diff --git a/ACSmI/Billing/.idea/.generators b/ACSmI/Billing/.idea/.generators
new file mode 100644
index 0000000000000000000000000000000000000000..16189766921e57e05bd2cdecdaf2336f63f37dd1
--- /dev/null
+++ b/ACSmI/Billing/.idea/.generators
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Settings><!--This file was automatically generated by Ruby plugin.
+You are allowed to: 
+1. Reorder generators
+2. Remove generators
+3. Add installed generators
+To add new installed generators automatically delete this file and reload the project.
+--><GeneratorsGroup><Generator name="active_record:migration" /><Generator name="active_record:model" /><Generator name="active_record:observer" /><Generator name="active_record:session_migration" /><Generator name="controller" /><Generator name="erb:controller" /><Generator name="erb:mailer" /><Generator name="erb:scaffold" /><Generator name="generator" /><Generator name="helper" /><Generator name="integration_test" /><Generator name="mailer" /><Generator name="metal" /><Generator name="migration" /><Generator name="model" /><Generator name="model_subclass" /><Generator name="observer" /><Generator name="performance_test" /><Generator name="plugin" /><Generator name="resource" /><Generator name="scaffold" /><Generator name="scaffold_controller" /><Generator name="session_migration" /><Generator name="stylesheets" /><Generator name="test_unit:controller" /><Generator name="test_unit:helper" /><Generator name="test_unit:integration" /><Generator name="test_unit:mailer" /><Generator name="test_unit:model" /><Generator name="test_unit:observer" /><Generator name="test_unit:performance" /><Generator name="test_unit:plugin" /><Generator name="test_unit:scaffold" /></GeneratorsGroup></Settings>
diff --git a/ACSmI/Billing/.idea/.rakeTasks b/ACSmI/Billing/.idea/.rakeTasks
new file mode 100644
index 0000000000000000000000000000000000000000..c6865d9a1bfff87fc35a9c2206870b04f9cff9a5
--- /dev/null
+++ b/ACSmI/Billing/.idea/.rakeTasks
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Settings><!--This file was automatically generated by Ruby plugin.
+You are allowed to: 
+1. Remove rake task
+2. Add existing rake tasks
+To add existing rake tasks automatically delete this file and reload the project.
+--><RakeGroup description="" fullCmd="" taksId="rake" /></Settings>
diff --git a/ACSmI/Billing/.idea/ACSmI_billing.iml b/ACSmI/Billing/.idea/ACSmI_billing.iml
new file mode 100644
index 0000000000000000000000000000000000000000..ab1b4c3181512670cab9ce339899ef99cdaf82ea
--- /dev/null
+++ b/ACSmI/Billing/.idea/ACSmI_billing.iml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="RUBY_MODULE" version="4">
+  <component name="FacetManager">
+    <facet type="RailsFacetType" name="Ruby on Rails">
+      <configuration>
+        <RAILS_FACET_CONFIG_ID NAME="RAILS_FACET_SUPPORT_REMOVED" VALUE="false" />
+        <RAILS_FACET_CONFIG_ID NAME="RAILS_TESTS_SOURCES_PATCHED" VALUE="true" />
+        <RAILS_FACET_CONFIG_ID NAME="RAILS_FACET_APPLICATION_ROOT" VALUE="$MODULE_DIR$" />
+      </configuration>
+    </facet>
+  </component>
+  <component name="ModuleRunConfigurationManager">
+    <shared />
+  </component>
+  <component name="NewModuleRootManager">
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/spec" isTestSource="true" />
+      <excludeFolder url="file://$MODULE_DIR$/.bundle" />
+      <excludeFolder url="file://$MODULE_DIR$/components" />
+      <excludeFolder url="file://$MODULE_DIR$/log" />
+      <excludeFolder url="file://$MODULE_DIR$/public/packs" />
+      <excludeFolder url="file://$MODULE_DIR$/public/system" />
+      <excludeFolder url="file://$MODULE_DIR$/tmp" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/bundle" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/cache" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+  <component name="RModuleSettingsStorage">
+    <LOAD_PATH number="0" />
+    <I18N_FOLDERS number="1" string0="$MODULE_DIR$/config/locales" />
+  </component>
+</module>
\ No newline at end of file
diff --git a/ACSmI/Billing/.idea/inspectionProfiles/Project_Default.xml b/ACSmI/Billing/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b0db9b0fcaf45297fcc6968bd9875c3ba0a73a02
--- /dev/null
+++ b/ACSmI/Billing/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,6 @@
+<component name="InspectionProjectProfileManager">
+  <profile version="1.0">
+    <option name="myName" value="Project Default" />
+    <inspection_tool class="Rubocop" enabled="false" level="WARNING" enabled_by_default="false" />
+  </profile>
+</component>
\ No newline at end of file
diff --git a/ACSmI/Billing/.idea/misc.xml b/ACSmI/Billing/.idea/misc.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ed9b36b074155f5297ed1237cb9eeee8c5538fee
--- /dev/null
+++ b/ACSmI/Billing/.idea/misc.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="JavaScriptSettings">
+    <option name="languageLevel" value="ES6" />
+  </component>
+  <component name="ProjectRootManager" version="2" project-jdk-name="rbenv: 2.3.8" project-jdk-type="RUBY_SDK" />
+</project>
\ No newline at end of file
diff --git a/ACSmI/Billing/.idea/modules.xml b/ACSmI/Billing/.idea/modules.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2e13cee1a65bf91beb477e805d3d00c1699c36a3
--- /dev/null
+++ b/ACSmI/Billing/.idea/modules.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/.idea/ACSmI_billing.iml" filepath="$PROJECT_DIR$/.idea/ACSmI_billing.iml" />
+    </modules>
+  </component>
+</project>
\ No newline at end of file
diff --git a/ACSmI/Billing/.idea/vcs.xml b/ACSmI/Billing/.idea/vcs.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6c0b8635858dc7ad44b93df54b762707ce49eefc
--- /dev/null
+++ b/ACSmI/Billing/.idea/vcs.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$/.." vcs="Git" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/ACSmI/Billing/.idea/workspace.xml b/ACSmI/Billing/.idea/workspace.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1f32d9de5a1502380929362a8e83db073a06498e
--- /dev/null
+++ b/ACSmI/Billing/.idea/workspace.xml
@@ -0,0 +1,463 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ChangeListManager">
+    <list default="true" id="ec619e04-0506-4cd4-9e04-bbc25960bc3f" name="Default Changelist" comment="" />
+    <ignored path="$PROJECT_DIR$/.bundle/" />
+    <ignored path="$PROJECT_DIR$/components/" />
+    <ignored path="$PROJECT_DIR$/log/" />
+    <ignored path="$PROJECT_DIR$/public/packs/" />
+    <ignored path="$PROJECT_DIR$/public/system/" />
+    <ignored path="$PROJECT_DIR$/tmp/" />
+    <ignored path="$PROJECT_DIR$/vendor/bundle/" />
+    <ignored path="$PROJECT_DIR$/vendor/cache/" />
+    <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
+    <option name="SHOW_DIALOG" value="false" />
+    <option name="HIGHLIGHT_CONFLICTS" value="true" />
+    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
+    <option name="LAST_RESOLUTION" value="IGNORE" />
+  </component>
+  <component name="FileEditorManager">
+    <leaf>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/db/migrate/20190312135409_create_credential_fields.rb">
+          <provider selected="true" editor-type-id="text-editor" />
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/db/migrate/20190312135358_create_contracting_resources.rb">
+          <provider selected="true" editor-type-id="text-editor" />
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/db/migrate/20190312130749_create_usage_records.rb">
+          <provider selected="true" editor-type-id="text-editor" />
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/db/migrate/20190312130748_create_contracts.rb">
+          <provider selected="true" editor-type-id="text-editor" />
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/db/migrate/20190312130747_create_invoices.rb">
+          <provider selected="true" editor-type-id="text-editor" />
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/db/migrate/20190311161148_create_users.rb">
+          <provider selected="true" editor-type-id="text-editor" />
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="true">
+        <entry file="file://$PROJECT_DIR$/db/seeds.rb">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="272">
+              <caret line="16" column="45" selection-start-line="16" selection-start-column="45" selection-end-line="16" selection-end-column="45" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/config/storage.yml">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="340">
+              <caret line="20" column="62" lean-forward="true" selection-start-line="20" selection-start-column="62" selection-end-line="20" selection-end-column="62" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/config/initializers/acsmi_ext.rb">
+          <provider selected="true" editor-type-id="text-editor" />
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/db/schema.rb">
+          <provider selected="true" editor-type-id="text-editor" />
+        </entry>
+      </file>
+    </leaf>
+  </component>
+  <component name="FindInProjectRecents">
+    <findStrings>
+      <find>INITIAL_PASSWORD</find>
+    </findStrings>
+  </component>
+  <component name="Git.Settings">
+    <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$/.." />
+  </component>
+  <component name="IdeDocumentHistory">
+    <option name="CHANGED_PATHS">
+      <list>
+        <option value="$PROJECT_DIR$/spec/lib/platform_spec.rb" />
+        <option value="$PROJECT_DIR$/db/seeds.rb" />
+      </list>
+    </option>
+  </component>
+  <component name="ProjectConfigurationFiles">
+    <option name="files">
+      <list>
+        <option value="$PROJECT_DIR$/.idea/inspectionProfiles/Project_Default.xml" />
+        <option value="$PROJECT_DIR$/.idea/ACSmI_billing.iml" />
+        <option value="$PROJECT_DIR$/.idea/misc.xml" />
+        <option value="$PROJECT_DIR$/.idea/vcs.xml" />
+        <option value="$PROJECT_DIR$/.idea/modules.xml" />
+      </list>
+    </option>
+  </component>
+  <component name="ProjectFrameBounds" extendedState="6">
+    <option name="x" value="293" />
+    <option name="y" value="53" />
+    <option name="width" value="1400" />
+    <option name="height" value="1000" />
+  </component>
+  <component name="ProjectLevelVcsManager" settingsEditedManually="true" />
+  <component name="ProjectView">
+    <navigator proportions="" version="1">
+      <foldersAlwaysOnTop value="true" />
+    </navigator>
+    <panes>
+      <pane id="Scope" />
+      <pane id="ProjectPane">
+        <subPane>
+          <expand>
+            <path>
+              <item name="ACSmI_billing" type="b2602c69:ProjectViewProjectNode" />
+              <item name="ACSmI_billing" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="ACSmI_billing" type="b2602c69:ProjectViewProjectNode" />
+              <item name="ACSmI_billing" type="462c0819:PsiDirectoryNode" />
+              <item name="config" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="ACSmI_billing" type="b2602c69:ProjectViewProjectNode" />
+              <item name="ACSmI_billing" type="462c0819:PsiDirectoryNode" />
+              <item name="db" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="ACSmI_billing" type="b2602c69:ProjectViewProjectNode" />
+              <item name="ACSmI_billing" type="462c0819:PsiDirectoryNode" />
+              <item name="db" type="462c0819:PsiDirectoryNode" />
+              <item name="migrate" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="ACSmI_billing" type="b2602c69:ProjectViewProjectNode" />
+              <item name="ACSmI_billing" type="462c0819:PsiDirectoryNode" />
+              <item name="lib" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="ACSmI_billing" type="b2602c69:ProjectViewProjectNode" />
+              <item name="ACSmI_billing" type="462c0819:PsiDirectoryNode" />
+              <item name="lib" type="462c0819:PsiDirectoryNode" />
+              <item name="api_clients" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="ACSmI_billing" type="b2602c69:ProjectViewProjectNode" />
+              <item name="ACSmI_billing" type="462c0819:PsiDirectoryNode" />
+              <item name="lib" type="462c0819:PsiDirectoryNode" />
+              <item name="assets" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="ACSmI_billing" type="b2602c69:ProjectViewProjectNode" />
+              <item name="ACSmI_billing" type="462c0819:PsiDirectoryNode" />
+              <item name="lib" type="462c0819:PsiDirectoryNode" />
+              <item name="reports" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="ACSmI_billing" type="b2602c69:ProjectViewProjectNode" />
+              <item name="ACSmI_billing" type="462c0819:PsiDirectoryNode" />
+              <item name="lib" type="462c0819:PsiDirectoryNode" />
+              <item name="tasks" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="ACSmI_billing" type="b2602c69:ProjectViewProjectNode" />
+              <item name="ACSmI_billing" type="462c0819:PsiDirectoryNode" />
+              <item name="public" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="ACSmI_billing" type="b2602c69:ProjectViewProjectNode" />
+              <item name="ACSmI_billing" type="462c0819:PsiDirectoryNode" />
+              <item name="spec" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="ACSmI_billing" type="b2602c69:ProjectViewProjectNode" />
+              <item name="ACSmI_billing" type="462c0819:PsiDirectoryNode" />
+              <item name="spec" type="462c0819:PsiDirectoryNode" />
+              <item name="lib" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="ACSmI_billing" type="b2602c69:ProjectViewProjectNode" />
+              <item name="ACSmI_billing" type="462c0819:PsiDirectoryNode" />
+              <item name="vendor" type="462c0819:PsiDirectoryNode" />
+            </path>
+          </expand>
+          <select />
+        </subPane>
+      </pane>
+      <pane id="RailsProjectView" />
+    </panes>
+  </component>
+  <component name="PropertiesComponent">
+    <property name="WebServerToolWindowFactoryState" value="false" />
+    <property name="last_opened_file_path" value="$PROJECT_DIR$" />
+    <property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
+    <property name="nodejs_npm_path_reset_for_default_project" value="true" />
+  </component>
+  <component name="RunDashboard">
+    <option name="ruleStates">
+      <list>
+        <RuleState>
+          <option name="name" value="ConfigurationTypeDashboardGroupingRule" />
+        </RuleState>
+        <RuleState>
+          <option name="name" value="StatusDashboardGroupingRule" />
+        </RuleState>
+      </list>
+    </option>
+  </component>
+  <component name="RunManager" selected="Rails.Development: ACSmI_billing">
+    <configuration name="Development: ACSmI_billing" type="RailsRunConfigurationType" factoryName="Rails">
+      <module name="ACSmI_billing" />
+      <predefined_log_file enabled="true" id="RUBY_RAILS_SERVER" />
+      <RAILS_SERVER_CONFIG_SETTINGS_ID NAME="RUBY_ARGS" VALUE="" />
+      <RAILS_SERVER_CONFIG_SETTINGS_ID NAME="WORK DIR" VALUE="$MODULE_DIR$" />
+      <RAILS_SERVER_CONFIG_SETTINGS_ID NAME="SHOULD_USE_SDK" VALUE="false" />
+      <RAILS_SERVER_CONFIG_SETTINGS_ID NAME="ALTERN_SDK_NAME" VALUE="" />
+      <RAILS_SERVER_CONFIG_SETTINGS_ID NAME="myPassParentEnvs" VALUE="true" />
+      <EXTENSION ID="BundlerRunConfigurationExtension" bundleExecEnabled="false" />
+      <EXTENSION ID="JRubyRunConfigurationExtension" NailgunExecEnabled="false" />
+      <EXTENSION ID="RubyCoverageRunConfigurationExtension" track_test_folders="true" runner="rcov">
+        <COVERAGE_PATTERN ENABLED="true">
+          <PATTERN REGEXPS="/.rvm/" INCLUDED="false" />
+        </COVERAGE_PATTERN>
+      </EXTENSION>
+      <RAILS_SERVER_CONFIG_SETTINGS_ID NAME="SCRIPT_ARGS" VALUE="" />
+      <RAILS_SERVER_CONFIG_SETTINGS_ID NAME="PORT" VALUE="3000" />
+      <RAILS_SERVER_CONFIG_SETTINGS_ID NAME="IP" VALUE="0.0.0.0" />
+      <RAILS_SERVER_CONFIG_SETTINGS_ID NAME="DUMMY_APP" VALUE="test/dummy" />
+      <RAILS_SERVER_CONFIG_SETTINGS_ID NAME="RAILS_SERVER_TYPE" VALUE="Default" />
+      <RAILS_SERVER_CONFIG_SETTINGS_ID NAME="ENVIRONMENT_TYPE" VALUE="development" />
+      <RAILS_SERVER_CONFIG_SETTINGS_ID NAME="LAUNCH_JS" VALUE="false" />
+      <method v="2" />
+    </configuration>
+    <configuration name="Production: ACSmI_billing" type="RailsRunConfigurationType" factoryName="Rails">
+      <module name="ACSmI_billing" />
+      <predefined_log_file enabled="true" id="RUBY_RAILS_SERVER" />
+      <RAILS_SERVER_CONFIG_SETTINGS_ID NAME="RUBY_ARGS" VALUE="" />
+      <RAILS_SERVER_CONFIG_SETTINGS_ID NAME="WORK DIR" VALUE="$MODULE_DIR$" />
+      <RAILS_SERVER_CONFIG_SETTINGS_ID NAME="SHOULD_USE_SDK" VALUE="false" />
+      <RAILS_SERVER_CONFIG_SETTINGS_ID NAME="ALTERN_SDK_NAME" VALUE="" />
+      <RAILS_SERVER_CONFIG_SETTINGS_ID NAME="myPassParentEnvs" VALUE="true" />
+      <EXTENSION ID="BundlerRunConfigurationExtension" bundleExecEnabled="false" />
+      <EXTENSION ID="JRubyRunConfigurationExtension" NailgunExecEnabled="false" />
+      <EXTENSION ID="RubyCoverageRunConfigurationExtension" track_test_folders="true" runner="rcov">
+        <COVERAGE_PATTERN ENABLED="true">
+          <PATTERN REGEXPS="/.rvm/" INCLUDED="false" />
+        </COVERAGE_PATTERN>
+      </EXTENSION>
+      <RAILS_SERVER_CONFIG_SETTINGS_ID NAME="SCRIPT_ARGS" VALUE="" />
+      <RAILS_SERVER_CONFIG_SETTINGS_ID NAME="PORT" VALUE="3000" />
+      <RAILS_SERVER_CONFIG_SETTINGS_ID NAME="IP" VALUE="0.0.0.0" />
+      <RAILS_SERVER_CONFIG_SETTINGS_ID NAME="DUMMY_APP" VALUE="test/dummy" />
+      <RAILS_SERVER_CONFIG_SETTINGS_ID NAME="RAILS_SERVER_TYPE" VALUE="Default" />
+      <RAILS_SERVER_CONFIG_SETTINGS_ID NAME="ENVIRONMENT_TYPE" VALUE="production" />
+      <RAILS_SERVER_CONFIG_SETTINGS_ID NAME="LAUNCH_JS" VALUE="false" />
+      <method v="2" />
+    </configuration>
+    <configuration name="spec: ACSmI_billing" type="RakeRunConfigurationType" factoryName="Rake">
+      <module name="ACSmI_billing" />
+      <RAKE_RUN_CONFIG_SETTINGS_ID NAME="RUBY_ARGS" VALUE="" />
+      <RAKE_RUN_CONFIG_SETTINGS_ID NAME="WORK DIR" VALUE="$MODULE_DIR$" />
+      <RAKE_RUN_CONFIG_SETTINGS_ID NAME="SHOULD_USE_SDK" VALUE="false" />
+      <RAKE_RUN_CONFIG_SETTINGS_ID NAME="ALTERN_SDK_NAME" VALUE="" />
+      <RAKE_RUN_CONFIG_SETTINGS_ID NAME="myPassParentEnvs" VALUE="true" />
+      <EXTENSION ID="BundlerRunConfigurationExtension" bundleExecEnabled="false" />
+      <EXTENSION ID="JRubyRunConfigurationExtension" NailgunExecEnabled="false" />
+      <EXTENSION ID="RubyCoverageRunConfigurationExtension" track_test_folders="true" runner="rcov">
+        <COVERAGE_PATTERN ENABLED="true">
+          <PATTERN REGEXPS="/.rvm/" INCLUDED="false" />
+        </COVERAGE_PATTERN>
+      </EXTENSION>
+      <RAKE_RUN_CONFIG_SETTINGS_ID NAME="RAKE_TASK_NAME" VALUE="spec" />
+      <RAKE_RUN_CONFIG_SETTINGS_ID NAME="RAKE_TASK_ARGS" VALUE="" />
+      <RAKE_RUN_CONFIG_SETTINGS_ID NAME="RAKE_TASK_ATTACHED_TEST_FRAMEWORKS" VALUE=":rspec " />
+      <RAKE_RUN_CONFIG_SETTINGS_ID NAME="RAKE_TASK_OPTION_TRACE" VALUE="false" />
+      <RAKE_RUN_CONFIG_SETTINGS_ID NAME="RAKE_TASK_OPTION_DRYRUN" VALUE="false" />
+      <RAKE_RUN_CONFIG_SETTINGS_ID NAME="RAKE_TASK_OPTION_PREREQS" VALUE="false" />
+      <method v="2" />
+    </configuration>
+    <configuration name="test: ACSmI_billing" type="RakeRunConfigurationType" factoryName="Rake">
+      <module name="ACSmI_billing" />
+      <RAKE_RUN_CONFIG_SETTINGS_ID NAME="RUBY_ARGS" VALUE="" />
+      <RAKE_RUN_CONFIG_SETTINGS_ID NAME="WORK DIR" VALUE="$MODULE_DIR$" />
+      <RAKE_RUN_CONFIG_SETTINGS_ID NAME="SHOULD_USE_SDK" VALUE="false" />
+      <RAKE_RUN_CONFIG_SETTINGS_ID NAME="ALTERN_SDK_NAME" VALUE="" />
+      <RAKE_RUN_CONFIG_SETTINGS_ID NAME="myPassParentEnvs" VALUE="true" />
+      <envs>
+        <env name="RAILS_ENV" value="test" />
+      </envs>
+      <EXTENSION ID="BundlerRunConfigurationExtension" bundleExecEnabled="false" />
+      <EXTENSION ID="JRubyRunConfigurationExtension" NailgunExecEnabled="false" />
+      <EXTENSION ID="RubyCoverageRunConfigurationExtension" track_test_folders="true" runner="rcov">
+        <COVERAGE_PATTERN ENABLED="true">
+          <PATTERN REGEXPS="/.rvm/" INCLUDED="false" />
+        </COVERAGE_PATTERN>
+      </EXTENSION>
+      <RAKE_RUN_CONFIG_SETTINGS_ID NAME="RAKE_TASK_NAME" VALUE="test" />
+      <RAKE_RUN_CONFIG_SETTINGS_ID NAME="RAKE_TASK_ARGS" VALUE="" />
+      <RAKE_RUN_CONFIG_SETTINGS_ID NAME="RAKE_TASK_ATTACHED_TEST_FRAMEWORKS" VALUE=":test_unit " />
+      <RAKE_RUN_CONFIG_SETTINGS_ID NAME="RAKE_TASK_OPTION_TRACE" VALUE="false" />
+      <RAKE_RUN_CONFIG_SETTINGS_ID NAME="RAKE_TASK_OPTION_DRYRUN" VALUE="false" />
+      <RAKE_RUN_CONFIG_SETTINGS_ID NAME="RAKE_TASK_OPTION_PREREQS" VALUE="false" />
+      <method v="2" />
+    </configuration>
+  </component>
+  <component name="SpringUtil" SPRING_PRE_LOADER_OPTION="true" />
+  <component name="SvnConfiguration">
+    <configuration />
+  </component>
+  <component name="TaskManager">
+    <task active="true" id="Default" summary="Default task">
+      <changelist id="ec619e04-0506-4cd4-9e04-bbc25960bc3f" name="Default Changelist" comment="" />
+      <created>1558443357605</created>
+      <option name="number" value="Default" />
+      <option name="presentableId" value="Default" />
+      <updated>1558443357605</updated>
+      <workItem from="1558443358807" duration="552000" />
+    </task>
+    <servers />
+  </component>
+  <component name="TimeTrackingManager">
+    <option name="totallyTimeSpent" value="552000" />
+  </component>
+  <component name="ToolWindowManager">
+    <frame x="67" y="25" width="1853" height="1055" extended-state="6" />
+    <editor active="true" />
+    <layout>
+      <window_info id="Favorites" side_tool="true" />
+      <window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.18594356" />
+      <window_info id="Structure" order="1" side_tool="true" weight="0.25" />
+      <window_info anchor="bottom" id="Docker" show_stripe_button="false" />
+      <window_info anchor="bottom" id="Database Changes" />
+      <window_info anchor="bottom" id="Version Control" />
+      <window_info anchor="bottom" id="Messages" weight="0.31101513" />
+      <window_info anchor="bottom" id="Terminal" />
+      <window_info anchor="bottom" id="Event Log" side_tool="true" />
+      <window_info anchor="bottom" id="Message" order="0" />
+      <window_info anchor="bottom" id="Find" order="1" />
+      <window_info anchor="bottom" id="Run" order="2" />
+      <window_info anchor="bottom" id="Debug" order="3" weight="0.4" />
+      <window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
+      <window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
+      <window_info anchor="bottom" id="TODO" order="6" />
+      <window_info anchor="right" id="Database" />
+      <window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" />
+      <window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
+      <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
+    </layout>
+  </component>
+  <component name="TypeScriptGeneratedFilesManager">
+    <option name="version" value="1" />
+  </component>
+  <component name="editorHistoryManager">
+    <entry file="file://$PROJECT_DIR$/spec/spec_helper.rb">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/spec/rails_helper.rb">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/spec/lib/platform_spec.rb">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="204">
+          <caret line="12" lean-forward="true" selection-start-line="12" selection-end-line="12" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/lib/exceptions.rb">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/lib/tasks/seeds_for_testing.rake">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/lib/reports/invoices_pdf_generator.rb">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/lib/api_clients/platform.rb">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="-418" />
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/lib/api_clients/acsmi_contracting.rb">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/db/migrate/20190403155312_add_platform_id_to_users.rb">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/db/migrate/20190328101309_add_constraint_to_usage_description_field.rb">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/db/migrate/20190326164540_add_index_to_usage_records.rb">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/db/migrate/20190321131840_add_usage_record_id_to_usage_description_field.rb">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/db/migrate/20190321113544_change_column_name_in_settings.rb">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/db/migrate/20190317072547_add_admin_to_users.rb">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/db/migrate/20190313122258_create_user_sessions.rb">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/db/migrate/20190313100941_create_delayed_jobs.rb">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/db/migrate/20190313100629_create_usage_description_fields.rb">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/db/migrate/20190312141212_create_settings.rb">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/db/migrate/20190312135409_create_credential_fields.rb">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/db/migrate/20190312135358_create_contracting_resources.rb">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/db/migrate/20190312130749_create_usage_records.rb">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/db/migrate/20190312130748_create_contracts.rb">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/db/migrate/20190312130747_create_invoices.rb">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/db/migrate/20190311161148_create_users.rb">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/db/schema.rb">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/config/initializers/acsmi_ext.rb">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/config/storage.yml">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="340">
+          <caret line="20" column="62" lean-forward="true" selection-start-line="20" selection-start-column="62" selection-end-line="20" selection-end-column="62" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/db/seeds.rb">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="272">
+          <caret line="16" column="45" selection-start-line="16" selection-start-column="45" selection-end-line="16" selection-end-column="45" />
+        </state>
+      </provider>
+    </entry>
+  </component>
+</project>
\ No newline at end of file
diff --git a/ACSmI/Billing/Gemfile b/ACSmI/Billing/Gemfile
new file mode 100644
index 0000000000000000000000000000000000000000..b497f3c5556a019e87d9199ba3f6219577a9de9e
--- /dev/null
+++ b/ACSmI/Billing/Gemfile
@@ -0,0 +1,48 @@
+source 'https://rubygems.org'
+git_source(:github) { |repo| "https://github.com/#{repo}.git" }
+
+ruby '2.4.5'
+
+gem 'rails', '~> 5.2.2'
+gem 'sqlite3', '~> 1.3.6'
+gem 'puma', '~> 3.11'
+gem 'sass-rails', '~> 5.0'
+gem 'uglifier', '>= 1.3.0'
+
+gem 'coffee-rails', '~> 4.2'
+gem 'turbolinks', '~> 5'
+gem 'jbuilder', '~> 2.5'
+gem 'bootsnap', '>= 1.1.0', require: false
+
+gem 'authlogic'
+gem 'rest-client'
+gem 'attr_encrypted'
+
+gem 'prawn'
+gem 'prawn-table'
+
+gem 'delayed_job_active_record'
+gem 'daemons'
+
+gem 'material_icons'
+gem 'jquery-rails'
+gem 'twitter-bootstrap-rails'
+gem 'bootstrap-generators', '~> 3.3.4'
+
+gem 'haml-rails'
+
+group :development do
+  gem 'web-console', '>= 3.3.0'
+  gem 'listen', '>= 3.0.5', '< 3.2'
+  gem 'spring'
+  gem 'spring-watcher-listen', '~> 2.0.0'
+  gem 'byebug'
+end
+
+group :test do
+  gem 'rspec-rails'
+end
+
+group :production do
+  gem 'tzinfo-data'
+end
diff --git a/ACSmI/Billing/Gemfile.lock b/ACSmI/Billing/Gemfile.lock
new file mode 100644
index 0000000000000000000000000000000000000000..b6ea05525f1af1458bac9302cf361d5dc9132b49
--- /dev/null
+++ b/ACSmI/Billing/Gemfile.lock
@@ -0,0 +1,308 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    actioncable (5.2.3)
+      actionpack (= 5.2.3)
+      nio4r (~> 2.0)
+      websocket-driver (>= 0.6.1)
+    actionmailer (5.2.3)
+      actionpack (= 5.2.3)
+      actionview (= 5.2.3)
+      activejob (= 5.2.3)
+      mail (~> 2.5, >= 2.5.4)
+      rails-dom-testing (~> 2.0)
+    actionpack (5.2.3)
+      actionview (= 5.2.3)
+      activesupport (= 5.2.3)
+      rack (~> 2.0)
+      rack-test (>= 0.6.3)
+      rails-dom-testing (~> 2.0)
+      rails-html-sanitizer (~> 1.0, >= 1.0.2)
+    actionview (5.2.3)
+      activesupport (= 5.2.3)
+      builder (~> 3.1)
+      erubi (~> 1.4)
+      rails-dom-testing (~> 2.0)
+      rails-html-sanitizer (~> 1.0, >= 1.0.3)
+    activejob (5.2.3)
+      activesupport (= 5.2.3)
+      globalid (>= 0.3.6)
+    activemodel (5.2.3)
+      activesupport (= 5.2.3)
+    activerecord (5.2.3)
+      activemodel (= 5.2.3)
+      activesupport (= 5.2.3)
+      arel (>= 9.0)
+    activestorage (5.2.3)
+      actionpack (= 5.2.3)
+      activerecord (= 5.2.3)
+      marcel (~> 0.3.1)
+    activesupport (5.2.3)
+      concurrent-ruby (~> 1.0, >= 1.0.2)
+      i18n (>= 0.7, < 2)
+      minitest (~> 5.1)
+      tzinfo (~> 1.1)
+    arel (9.0.0)
+    attr_encrypted (3.1.0)
+      encryptor (~> 3.0.0)
+    authlogic (5.0.1)
+      activemodel (>= 5.2, < 6.1)
+      activerecord (>= 5.2, < 6.1)
+      activesupport (>= 5.2, < 6.1)
+      request_store (~> 1.0)
+      scrypt (>= 1.2, < 4.0)
+    bindex (0.6.0)
+    bootsnap (1.4.2)
+      msgpack (~> 1.0)
+    bootstrap-generators (3.3.4)
+      railties (>= 3.1.0)
+    builder (3.2.3)
+    byebug (11.0.1)
+    coffee-rails (4.2.2)
+      coffee-script (>= 2.2.0)
+      railties (>= 4.0.0)
+    coffee-script (2.4.1)
+      coffee-script-source
+      execjs
+    coffee-script-source (1.12.2)
+    commonjs (0.2.7)
+    concurrent-ruby (1.1.5)
+    crass (1.0.4)
+    daemons (1.3.1)
+    delayed_job (4.1.5)
+      activesupport (>= 3.0, < 5.3)
+    delayed_job_active_record (4.1.3)
+      activerecord (>= 3.0, < 5.3)
+      delayed_job (>= 3.0, < 5)
+    diff-lcs (1.3)
+    domain_name (0.5.20180417)
+      unf (>= 0.0.5, < 1.0.0)
+    encryptor (3.0.0)
+    erubi (1.8.0)
+    erubis (2.7.0)
+    execjs (2.7.0)
+    ffi (1.10.0)
+    ffi-compiler (1.0.1)
+      ffi (>= 1.0.0)
+      rake
+    globalid (0.4.2)
+      activesupport (>= 4.2.0)
+    haml (5.0.4)
+      temple (>= 0.8.0)
+      tilt
+    haml-rails (2.0.0)
+      actionpack (>= 5.1)
+      activesupport (>= 5.1)
+      haml (>= 4.0.6, < 6.0)
+      html2haml (>= 1.0.1)
+      railties (>= 5.1)
+    html2haml (2.2.0)
+      erubis (~> 2.7.0)
+      haml (>= 4.0, < 6)
+      nokogiri (>= 1.6.0)
+      ruby_parser (~> 3.5)
+    http-cookie (1.0.3)
+      domain_name (~> 0.5)
+    i18n (1.6.0)
+      concurrent-ruby (~> 1.0)
+    jbuilder (2.8.0)
+      activesupport (>= 4.2.0)
+      multi_json (>= 1.2)
+    jquery-rails (4.3.3)
+      rails-dom-testing (>= 1, < 3)
+      railties (>= 4.2.0)
+      thor (>= 0.14, < 2.0)
+    less (2.6.0)
+      commonjs (~> 0.2.7)
+    less-rails (2.8.0)
+      actionpack (>= 4.0)
+      less (~> 2.6.0)
+      sprockets (> 2, < 4)
+      tilt
+    listen (3.1.5)
+      rb-fsevent (~> 0.9, >= 0.9.4)
+      rb-inotify (~> 0.9, >= 0.9.7)
+      ruby_dep (~> 1.2)
+    loofah (2.2.3)
+      crass (~> 1.0.2)
+      nokogiri (>= 1.5.9)
+    mail (2.7.1)
+      mini_mime (>= 0.1.1)
+    marcel (0.3.3)
+      mimemagic (~> 0.3.2)
+    material_icons (2.2.1)
+      railties (>= 3.2)
+    method_source (0.9.2)
+    mime-types (3.2.2)
+      mime-types-data (~> 3.2015)
+    mime-types-data (3.2019.0331)
+    mimemagic (0.3.3)
+    mini_mime (1.0.1)
+    mini_portile2 (2.4.0)
+    minitest (5.11.3)
+    msgpack (1.2.9)
+    multi_json (1.13.1)
+    netrc (0.11.0)
+    nio4r (2.3.1)
+    nokogiri (1.10.2)
+      mini_portile2 (~> 2.4.0)
+    pdf-core (0.7.0)
+    prawn (2.2.2)
+      pdf-core (~> 0.7.0)
+      ttfunk (~> 1.5)
+    prawn-table (0.2.2)
+      prawn (>= 1.3.0, < 3.0.0)
+    puma (3.12.1)
+    rack (2.0.6)
+    rack-test (1.1.0)
+      rack (>= 1.0, < 3)
+    rails (5.2.3)
+      actioncable (= 5.2.3)
+      actionmailer (= 5.2.3)
+      actionpack (= 5.2.3)
+      actionview (= 5.2.3)
+      activejob (= 5.2.3)
+      activemodel (= 5.2.3)
+      activerecord (= 5.2.3)
+      activestorage (= 5.2.3)
+      activesupport (= 5.2.3)
+      bundler (>= 1.3.0)
+      railties (= 5.2.3)
+      sprockets-rails (>= 2.0.0)
+    rails-dom-testing (2.0.3)
+      activesupport (>= 4.2.0)
+      nokogiri (>= 1.6)
+    rails-html-sanitizer (1.0.4)
+      loofah (~> 2.2, >= 2.2.2)
+    railties (5.2.3)
+      actionpack (= 5.2.3)
+      activesupport (= 5.2.3)
+      method_source
+      rake (>= 0.8.7)
+      thor (>= 0.19.0, < 2.0)
+    rake (12.3.2)
+    rb-fsevent (0.10.3)
+    rb-inotify (0.10.0)
+      ffi (~> 1.0)
+    request_store (1.4.1)
+      rack (>= 1.4)
+    rest-client (2.0.2)
+      http-cookie (>= 1.0.2, < 2.0)
+      mime-types (>= 1.16, < 4.0)
+      netrc (~> 0.8)
+    rspec-core (3.8.0)
+      rspec-support (~> 3.8.0)
+    rspec-expectations (3.8.2)
+      diff-lcs (>= 1.2.0, < 2.0)
+      rspec-support (~> 3.8.0)
+    rspec-mocks (3.8.0)
+      diff-lcs (>= 1.2.0, < 2.0)
+      rspec-support (~> 3.8.0)
+    rspec-rails (3.8.2)
+      actionpack (>= 3.0)
+      activesupport (>= 3.0)
+      railties (>= 3.0)
+      rspec-core (~> 3.8.0)
+      rspec-expectations (~> 3.8.0)
+      rspec-mocks (~> 3.8.0)
+      rspec-support (~> 3.8.0)
+    rspec-support (3.8.0)
+    ruby_dep (1.5.0)
+    ruby_parser (3.13.1)
+      sexp_processor (~> 4.9)
+    sass (3.7.3)
+      sass-listen (~> 4.0.0)
+    sass-listen (4.0.0)
+      rb-fsevent (~> 0.9, >= 0.9.4)
+      rb-inotify (~> 0.9, >= 0.9.7)
+    sass-rails (5.0.7)
+      railties (>= 4.0.0, < 6)
+      sass (~> 3.1)
+      sprockets (>= 2.8, < 4.0)
+      sprockets-rails (>= 2.0, < 4.0)
+      tilt (>= 1.1, < 3)
+    scrypt (3.0.6)
+      ffi-compiler (>= 1.0, < 2.0)
+    sexp_processor (4.12.0)
+    spring (2.0.2)
+      activesupport (>= 4.2)
+    spring-watcher-listen (2.0.1)
+      listen (>= 2.7, < 4.0)
+      spring (>= 1.2, < 3.0)
+    sprockets (3.7.2)
+      concurrent-ruby (~> 1.0)
+      rack (> 1, < 3)
+    sprockets-rails (3.2.1)
+      actionpack (>= 4.0)
+      activesupport (>= 4.0)
+      sprockets (>= 3.0.0)
+    sqlite3 (1.3.13)
+    temple (0.8.1)
+    thor (0.20.3)
+    thread_safe (0.3.6)
+    tilt (2.0.9)
+    ttfunk (1.5.1)
+    turbolinks (5.2.0)
+      turbolinks-source (~> 5.2)
+    turbolinks-source (5.2.0)
+    twitter-bootstrap-rails (4.0.0)
+      actionpack (~> 5.0, >= 5.0.1)
+      execjs (~> 2.7)
+      less-rails (~> 2.8, >= 2.8.0)
+      railties (~> 5.0, >= 5.0.1)
+    tzinfo (1.2.5)
+      thread_safe (~> 0.1)
+    tzinfo-data (1.2019.1)
+      tzinfo (>= 1.0.0)
+    uglifier (4.1.20)
+      execjs (>= 0.3.0, < 3)
+    unf (0.1.4)
+      unf_ext
+    unf_ext (0.0.7.5)
+    web-console (3.7.0)
+      actionview (>= 5.0)
+      activemodel (>= 5.0)
+      bindex (>= 0.4.0)
+      railties (>= 5.0)
+    websocket-driver (0.7.0)
+      websocket-extensions (>= 0.1.0)
+    websocket-extensions (0.1.3)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  attr_encrypted
+  authlogic
+  bootsnap (>= 1.1.0)
+  bootstrap-generators (~> 3.3.4)
+  byebug
+  coffee-rails (~> 4.2)
+  daemons
+  delayed_job_active_record
+  haml-rails
+  jbuilder (~> 2.5)
+  jquery-rails
+  listen (>= 3.0.5, < 3.2)
+  material_icons
+  prawn
+  prawn-table
+  puma (~> 3.11)
+  rails (~> 5.2.2)
+  rest-client
+  rspec-rails
+  sass-rails (~> 5.0)
+  spring
+  spring-watcher-listen (~> 2.0.0)
+  sqlite3 (~> 1.3.6)
+  turbolinks (~> 5)
+  twitter-bootstrap-rails
+  tzinfo-data
+  uglifier (>= 1.3.0)
+  web-console (>= 3.3.0)
+
+RUBY VERSION
+   ruby 2.4.5p335
+
+BUNDLED WITH
+   2.0.1
diff --git a/ACSmI/Billing/LICENSE.txt b/ACSmI/Billing/LICENSE.txt
new file mode 100644
index 0000000000000000000000000000000000000000..34ac89e95bec6032421370bb613367a22400d75d
--- /dev/null
+++ b/ACSmI/Billing/LICENSE.txt
@@ -0,0 +1,24 @@
+Copyright (c) 2017-2018 CloudBroker GmbH
+
+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.
+
+Contributors (in alphabetical order):
+
+Anton Ovcharenko (CloudBroker)
+Dmitriy Spivakov (CloudBroker)
+Elena Dubich (CloudBroker)
+Kirill Chubuk (CloudBroker)
+Kirill Stepanov (CloudBroker)
+Nicola Fantini (CloudBroker)
+Viktor Kopychko (CloudBroker)
+Vitalii Zakharenko (CloudBroker)
+Yevhenii Dzhura (CloudBroker)
+
+Initially developed in the context of DECIDE EU project http://www.decide-h2020.eu/
diff --git a/ACSmI/Billing/README.rdoc b/ACSmI/Billing/README.rdoc
new file mode 100644
index 0000000000000000000000000000000000000000..2ecb40efaccd33993db7282c3c748aa00631dcc4
--- /dev/null
+++ b/ACSmI/Billing/README.rdoc
@@ -0,0 +1,15 @@
+== Intro
+
+ACSmI Billing Tool
+
+== Installation instructions
+
+The below steps should be followed to install this component:
+1. Install ruby version 2.4.5 (https://www.ruby-lang.org/en/downloads/ for Windows or rvm.io for Unix). Please make sure ‘ruby -v’ returns the correct version in console.
+2. Install dependencies. Go to project folder and run the following: ‘gem install bundler; bundle install’. Wait until all the gems are installed.
+3. Please adjust confgiuration in:
+- db/seeds.rb - specify your gmail credentials in 'smtp_email' and 'smtp_password' settings in order to enable component's mailing functionality. Also, please set 'billing_component_url' setting to match you billing component installation url.
+- config/initializers/acsmi_ext.rb - for security reasons it is best to update ACSMI_EMAIL and INITIAL_PASSWORD with arbitrary values. Those credentials are to be used by contracting component to make API calls to ACSmI Billing.
+4. Create and configure the database. Go to project folder and run the following: ‘rake db:create; rake db:migrate; rake db:seed’
+5. Start the server. Run “bin/rails server -b 0.0.0.0 -p 3000 -e development”
+6. Open your browser, navigate to http://0.0.0.0:3000
diff --git a/ACSmI/Billing/Rakefile b/ACSmI/Billing/Rakefile
new file mode 100644
index 0000000000000000000000000000000000000000..e85f913914bd9d1342eae4cdd97b5520733a592a
--- /dev/null
+++ b/ACSmI/Billing/Rakefile
@@ -0,0 +1,6 @@
+# Add your own tasks in files placed in lib/tasks ending in .rake,
+# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
+
+require_relative 'config/application'
+
+Rails.application.load_tasks
diff --git a/ACSmI/Billing/app/assets/config/manifest.js b/ACSmI/Billing/app/assets/config/manifest.js
new file mode 100644
index 0000000000000000000000000000000000000000..b16e53d6d56d262ebcd7692c54616a9df2a30f8b
--- /dev/null
+++ b/ACSmI/Billing/app/assets/config/manifest.js
@@ -0,0 +1,3 @@
+//= link_tree ../images
+//= link_directory ../javascripts .js
+//= link_directory ../stylesheets .css
diff --git a/OPTIMUS/.gitkeep b/ACSmI/Billing/app/assets/images/.keep
similarity index 100%
rename from OPTIMUS/.gitkeep
rename to ACSmI/Billing/app/assets/images/.keep
diff --git a/ACSmI/Billing/app/assets/images/decide-logo.png b/ACSmI/Billing/app/assets/images/decide-logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..233071da11756e8fcd14f30ff83f702192381b24
Binary files /dev/null and b/ACSmI/Billing/app/assets/images/decide-logo.png differ
diff --git a/ACSmI/Billing/app/assets/images/favicon.jpg b/ACSmI/Billing/app/assets/images/favicon.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..a79369ecc404f8dd3410e895f42cb0dcd2426b94
Binary files /dev/null and b/ACSmI/Billing/app/assets/images/favicon.jpg differ
diff --git a/ACSmI/Billing/app/assets/images/sidebar-bg.jpg b/ACSmI/Billing/app/assets/images/sidebar-bg.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..b4ea5c4cb66087d0d01e1bb40546be84c5dc5429
Binary files /dev/null and b/ACSmI/Billing/app/assets/images/sidebar-bg.jpg differ
diff --git a/ACSmI/Billing/app/assets/javascripts/application.js b/ACSmI/Billing/app/assets/javascripts/application.js
new file mode 100644
index 0000000000000000000000000000000000000000..42cf312c2afd551c26d81e0081808972d8f63cc0
--- /dev/null
+++ b/ACSmI/Billing/app/assets/javascripts/application.js
@@ -0,0 +1,21 @@
+// This is a manifest file that'll be compiled into application.js, which will include all the files
+// listed below.
+//
+// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, or any plugin's
+// vendor/assets/javascripts directory can be referenced here using a relative path.
+//
+// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
+// compiled file. JavaScript code in this file should be added after the last require_* statement.
+//
+// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
+// about supported directives.
+//
+//= require rails-ujs
+//= require activestorage
+//= require turbolinks
+
+//= require jquery
+//= require jquery_ujs
+//= require twitter/bootstrap
+
+//= require_tree .
diff --git a/ACSmI/Billing/app/assets/javascripts/cable.js b/ACSmI/Billing/app/assets/javascripts/cable.js
new file mode 100644
index 0000000000000000000000000000000000000000..739aa5f022071bfaefac9de447f6250b5d83dd83
--- /dev/null
+++ b/ACSmI/Billing/app/assets/javascripts/cable.js
@@ -0,0 +1,13 @@
+// Action Cable provides the framework to deal with WebSockets in Rails.
+// You can generate new channels where WebSocket features live using the `rails generate channel` command.
+//
+//= require action_cable
+//= require_self
+//= require_tree ./channels
+
+(function() {
+  this.App || (this.App = {});
+
+  App.cable = ActionCable.createConsumer();
+
+}).call(this);
diff --git a/ACSmI/Billing/app/assets/javascripts/channels/.keep b/ACSmI/Billing/app/assets/javascripts/channels/.keep
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/ACSmI/Billing/app/assets/javascripts/usage_records.coffee b/ACSmI/Billing/app/assets/javascripts/usage_records.coffee
new file mode 100644
index 0000000000000000000000000000000000000000..24f83d18bbd38c24c4f7c3c2fc360cd68e857a2a
--- /dev/null
+++ b/ACSmI/Billing/app/assets/javascripts/usage_records.coffee
@@ -0,0 +1,3 @@
+# Place all the behaviors and hooks related to the matching controller here.
+# All this logic will automatically be available in application.js.
+# You can use CoffeeScript in this file: http://coffeescript.org/
diff --git a/ACSmI/Billing/app/assets/stylesheets/application.scss b/ACSmI/Billing/app/assets/stylesheets/application.scss
new file mode 100644
index 0000000000000000000000000000000000000000..c82e9988930f70ff280fed7d9d5fb5debfe42e8a
--- /dev/null
+++ b/ACSmI/Billing/app/assets/stylesheets/application.scss
@@ -0,0 +1,69 @@
+/*
+*= require material_icons
+*= require contracts
+*= require contracter
+*= require information
+*= require success
+*= require welcome
+*= require footer
+*= require progress-bar
+ */
+
+@import 'bootstrap-sprockets';
+@import 'bootstrap';
+@import "material-dashboard";
+
+.captcha_size { height: 100px; width: 300px;}
+
+.hide_spin_box {
+  input[type=number]::-webkit-inner-spin-button,
+  input[type=number]::-webkit-outer-spin-button {
+    -webkit-appearance: none;
+    margin: 0;
+  }
+}
+
+.site-content {
+    margin-bottom: 50px;
+}
+
+.btn-primary {
+  background-color: #004c8b !important;
+}
+
+.form-container {
+    margin: 0 auto;
+    padding: 10px 30px 5px 20px;
+}
+
+.form-container a:hover {
+    text-decoration: none;
+    cursor: pointer;
+}
+
+h3.form-header {
+    margin-bottom: 20px;
+    margin-top:10px
+}
+
+
+div.form-group {
+    margin-top: 20px;
+    margin-bottom: 10px;
+}
+
+div.form-group label{
+    font-weight: normal;
+}
+
+.delimiter {
+  height: 30px;
+}
+
+a, a:visited {
+  color: #004c8b;
+}
+
+label {
+  color: #3C4858 !important;
+}
\ No newline at end of file
diff --git a/ACSmI/Billing/app/assets/stylesheets/bootstrap-generators.scss b/ACSmI/Billing/app/assets/stylesheets/bootstrap-generators.scss
new file mode 100644
index 0000000000000000000000000000000000000000..3c085cc80107d97471c1d161153dd4b496938226
--- /dev/null
+++ b/ACSmI/Billing/app/assets/stylesheets/bootstrap-generators.scss
@@ -0,0 +1,15 @@
+@import "bootstrap-variables.scss";
+@import "bootstrap-sprockets.scss";
+@import "bootstrap.scss";
+
+.top-header {
+  img.header-logo {
+    margin-top: 4px;
+    margin-left: -15px;
+    margin-right: 20px;
+  }
+}
+
+.field_with_errors {
+  @extend .has-error;
+}
\ No newline at end of file
diff --git a/ACSmI/Billing/app/assets/stylesheets/bootstrap-variables.scss b/ACSmI/Billing/app/assets/stylesheets/bootstrap-variables.scss
new file mode 100644
index 0000000000000000000000000000000000000000..b63c68891a8f1d30f9217dba488e5dbe6bb7cbf1
--- /dev/null
+++ b/ACSmI/Billing/app/assets/stylesheets/bootstrap-variables.scss
@@ -0,0 +1,866 @@
+$bootstrap-sass-asset-helper: false !default;
+//
+// Variables
+// --------------------------------------------------
+
+
+//== Colors
+//
+//## Gray and brand colors for use across Bootstrap.
+
+$gray-base:              #000 !default;
+$gray-darker:            lighten($gray-base, 13.5%) !default; // #222
+$gray-dark:              lighten($gray-base, 20%) !default;   // #333
+$gray:                   lighten($gray-base, 33.5%) !default; // #555
+$gray-light:             lighten($gray-base, 46.7%) !default; // #777
+$gray-lighter:           lighten($gray-base, 93.5%) !default; // #eee
+
+$brand-primary:         darken(#428bca, 6.5%) !default; // #337ab7
+$brand-success:         #5cb85c !default;
+$brand-info:            #5bc0de !default;
+$brand-warning:         #f0ad4e !default;
+$brand-danger:          #d9534f !default;
+
+
+//== Scaffolding
+//
+//## Settings for some of the most global styles.
+
+//** Background color for `<body>`.
+$body-bg:               #fff !default;
+//** Global text color on `<body>`.
+$text-color:            $gray-dark !default;
+
+//** Global textual link color.
+$link-color:            $brand-primary !default;
+//** Link hover color set via `darken()` function.
+$link-hover-color:      darken($link-color, 15%) !default;
+//** Link hover decoration.
+$link-hover-decoration: underline !default;
+
+
+//== Typography
+//
+//## Font, line-height, and color for body text, headings, and more.
+
+$font-family-sans-serif:  "Helvetica Neue", Helvetica, Arial, sans-serif !default;
+$font-family-serif:       Georgia, "Times New Roman", Times, serif !default;
+//** Default monospace fonts for `<code>`, `<kbd>`, and `<pre>`.
+$font-family-monospace:   Menlo, Monaco, Consolas, "Courier New", monospace !default;
+$font-family-base:        $font-family-sans-serif !default;
+
+$font-size-base:          14px !default;
+$font-size-large:         ceil(($font-size-base * 1.25)) !default; // ~18px
+$font-size-small:         ceil(($font-size-base * 0.85)) !default; // ~12px
+
+$font-size-h1:            floor(($font-size-base * 2.6)) !default; // ~36px
+$font-size-h2:            floor(($font-size-base * 2.15)) !default; // ~30px
+$font-size-h3:            ceil(($font-size-base * 1.7)) !default; // ~24px
+$font-size-h4:            ceil(($font-size-base * 1.25)) !default; // ~18px
+$font-size-h5:            $font-size-base !default;
+$font-size-h6:            ceil(($font-size-base * 0.85)) !default; // ~12px
+
+//** Unit-less `line-height` for use in components like buttons.
+$line-height-base:        1.428571429 !default; // 20/14
+//** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
+$line-height-computed:    floor(($font-size-base * $line-height-base)) !default; // ~20px
+
+//** By default, this inherits from the `<body>`.
+$headings-font-family:    inherit !default;
+$headings-font-weight:    500 !default;
+$headings-line-height:    1.1 !default;
+$headings-color:          inherit !default;
+
+
+//== Iconography
+//
+//## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower.
+
+//** Load fonts from this directory.
+
+// [converter] If $bootstrap-sass-asset-helper if used, provide path relative to the assets load path.
+// [converter] This is because some asset helpers, such as Sprockets, do not work with file-relative paths.
+$icon-font-path: if($bootstrap-sass-asset-helper, "bootstrap/", "bootstrap/") !default;
+
+//** File name for all font files.
+$icon-font-name:          "glyphicons-halflings-regular" !default;
+//** Element ID within SVG icon file.
+$icon-font-svg-id:        "glyphicons_halflingsregular" !default;
+
+
+//== Components
+//
+//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).
+
+$padding-base-vertical:     6px !default;
+$padding-base-horizontal:   12px !default;
+
+$padding-large-vertical:    10px !default;
+$padding-large-horizontal:  16px !default;
+
+$padding-small-vertical:    5px !default;
+$padding-small-horizontal:  10px !default;
+
+$padding-xs-vertical:       1px !default;
+$padding-xs-horizontal:     5px !default;
+
+$line-height-large:         1.3333333 !default; // extra decimals for Win 8.1 Chrome
+$line-height-small:         1.5 !default;
+
+$border-radius-base:        4px !default;
+$border-radius-large:       6px !default;
+$border-radius-small:       3px !default;
+
+//** Global color for active items (e.g., navs or dropdowns).
+$component-active-color:    #fff !default;
+//** Global background color for active items (e.g., navs or dropdowns).
+$component-active-bg:       $brand-primary !default;
+
+//** Width of the `border` for generating carets that indicator dropdowns.
+$caret-width-base:          4px !default;
+//** Carets increase slightly in size for larger components.
+$caret-width-large:         5px !default;
+
+
+//== Tables
+//
+//## Customizes the `.table` component with basic values, each used across all table variations.
+
+//** Padding for `<th>`s and `<td>`s.
+$table-cell-padding:            8px !default;
+//** Padding for cells in `.table-condensed`.
+$table-condensed-cell-padding:  5px !default;
+
+//** Default background color used for all tables.
+$table-bg:                      transparent !default;
+//** Background color used for `.table-striped`.
+$table-bg-accent:               #f9f9f9 !default;
+//** Background color used for `.table-hover`.
+$table-bg-hover:                #f5f5f5 !default;
+$table-bg-active:               $table-bg-hover !default;
+
+//** Border color for table and cell borders.
+$table-border-color:            #ddd !default;
+
+
+//== Buttons
+//
+//## For each of Bootstrap's buttons, define text, background and border color.
+
+$btn-font-weight:                normal !default;
+
+$btn-default-color:              #333 !default;
+$btn-default-bg:                 #fff !default;
+$btn-default-border:             #ccc !default;
+
+$btn-primary-color:              #fff !default;
+$btn-primary-bg:                 $brand-primary !default;
+$btn-primary-border:             darken($btn-primary-bg, 5%) !default;
+
+$btn-success-color:              #fff !default;
+$btn-success-bg:                 $brand-success !default;
+$btn-success-border:             darken($btn-success-bg, 5%) !default;
+
+$btn-info-color:                 #fff !default;
+$btn-info-bg:                    $brand-info !default;
+$btn-info-border:                darken($btn-info-bg, 5%) !default;
+
+$btn-warning-color:              #fff !default;
+$btn-warning-bg:                 $brand-warning !default;
+$btn-warning-border:             darken($btn-warning-bg, 5%) !default;
+
+$btn-danger-color:               #fff !default;
+$btn-danger-bg:                  $brand-danger !default;
+$btn-danger-border:              darken($btn-danger-bg, 5%) !default;
+
+$btn-link-disabled-color:        $gray-light !default;
+
+
+//== Forms
+//
+//##
+
+//** `<input>` background color
+$input-bg:                       #fff !default;
+//** `<input disabled>` background color
+$input-bg-disabled:              $gray-lighter !default;
+
+//** Text color for `<input>`s
+$input-color:                    $gray !default;
+//** `<input>` border color
+$input-border:                   #ccc !default;
+
+// TODO: Rename `$input-border-radius` to `$input-border-radius-base` in v4
+//** Default `.form-control` border radius
+// This has no effect on `<select>`s in some browsers, due to the limited stylability of `<select>`s in CSS.
+$input-border-radius:            $border-radius-base !default;
+//** Large `.form-control` border radius
+$input-border-radius-large:      $border-radius-large !default;
+//** Small `.form-control` border radius
+$input-border-radius-small:      $border-radius-small !default;
+
+//** Border color for inputs on focus
+$input-border-focus:             #66afe9 !default;
+
+//** Placeholder text color
+$input-color-placeholder:        #999 !default;
+
+//** Default `.form-control` height
+$input-height-base:              ($line-height-computed + ($padding-base-vertical * 2) + 2) !default;
+//** Large `.form-control` height
+$input-height-large:             (ceil($font-size-large * $line-height-large) + ($padding-large-vertical * 2) + 2) !default;
+//** Small `.form-control` height
+$input-height-small:             (floor($font-size-small * $line-height-small) + ($padding-small-vertical * 2) + 2) !default;
+
+//** `.form-group` margin
+$form-group-margin-bottom:       15px !default;
+
+$legend-color:                   $gray-dark !default;
+$legend-border-color:            #e5e5e5 !default;
+
+//** Background color for textual input addons
+$input-group-addon-bg:           $gray-lighter !default;
+//** Border color for textual input addons
+$input-group-addon-border-color: $input-border !default;
+
+//** Disabled cursor for form controls and buttons.
+$cursor-disabled:                not-allowed !default;
+
+
+//== Dropdowns
+//
+//## Dropdown menu container and contents.
+
+//** Background for the dropdown menu.
+$dropdown-bg:                    #fff !default;
+//** Dropdown menu `border-color`.
+$dropdown-border:                rgba(0,0,0,.15) !default;
+//** Dropdown menu `border-color` **for IE8**.
+$dropdown-fallback-border:       #ccc !default;
+//** Divider color for between dropdown items.
+$dropdown-divider-bg:            #e5e5e5 !default;
+
+//** Dropdown link text color.
+$dropdown-link-color:            $gray-dark !default;
+//** Hover color for dropdown links.
+$dropdown-link-hover-color:      darken($gray-dark, 5%) !default;
+//** Hover background for dropdown links.
+$dropdown-link-hover-bg:         #f5f5f5 !default;
+
+//** Active dropdown menu item text color.
+$dropdown-link-active-color:     $component-active-color !default;
+//** Active dropdown menu item background color.
+$dropdown-link-active-bg:        $component-active-bg !default;
+
+//** Disabled dropdown menu item background color.
+$dropdown-link-disabled-color:   $gray-light !default;
+
+//** Text color for headers within dropdown menus.
+$dropdown-header-color:          $gray-light !default;
+
+//** Deprecated `$dropdown-caret-color` as of v3.1.0
+$dropdown-caret-color:           #000 !default;
+
+
+//-- Z-index master list
+//
+// Warning: Avoid customizing these values. They're used for a bird's eye view
+// of components dependent on the z-axis and are designed to all work together.
+//
+// Note: These variables are not generated into the Customizer.
+
+$zindex-navbar:            1000 !default;
+$zindex-dropdown:          1000 !default;
+$zindex-popover:           1060 !default;
+$zindex-tooltip:           1070 !default;
+$zindex-navbar-fixed:      1030 !default;
+$zindex-modal-background:  1040 !default;
+$zindex-modal:             1050 !default;
+
+
+//== Media queries breakpoints
+//
+//## Define the breakpoints at which your layout will change, adapting to different screen sizes.
+
+// Extra small screen / phone
+//** Deprecated `$screen-xs` as of v3.0.1
+$screen-xs:                  480px !default;
+//** Deprecated `$screen-xs-min` as of v3.2.0
+$screen-xs-min:              $screen-xs !default;
+//** Deprecated `$screen-phone` as of v3.0.1
+$screen-phone:               $screen-xs-min !default;
+
+// Small screen / tablet
+//** Deprecated `$screen-sm` as of v3.0.1
+$screen-sm:                  768px !default;
+$screen-sm-min:              $screen-sm !default;
+//** Deprecated `$screen-tablet` as of v3.0.1
+$screen-tablet:              $screen-sm-min !default;
+
+// Medium screen / desktop
+//** Deprecated `$screen-md` as of v3.0.1
+$screen-md:                  992px !default;
+$screen-md-min:              $screen-md !default;
+//** Deprecated `$screen-desktop` as of v3.0.1
+$screen-desktop:             $screen-md-min !default;
+
+// Large screen / wide desktop
+//** Deprecated `$screen-lg` as of v3.0.1
+$screen-lg:                  1200px !default;
+$screen-lg-min:              $screen-lg !default;
+//** Deprecated `$screen-lg-desktop` as of v3.0.1
+$screen-lg-desktop:          $screen-lg-min !default;
+
+// So media queries don't overlap when required, provide a maximum
+$screen-xs-max:              ($screen-sm-min - 1) !default;
+$screen-sm-max:              ($screen-md-min - 1) !default;
+$screen-md-max:              ($screen-lg-min - 1) !default;
+
+
+//== Grid system
+//
+//## Define your custom responsive grid.
+
+//** Number of columns in the grid.
+$grid-columns:              12 !default;
+//** Padding between columns. Gets divided in half for the left and right.
+$grid-gutter-width:         30px !default;
+// Navbar collapse
+//** Point at which the navbar becomes uncollapsed.
+$grid-float-breakpoint:     $screen-sm-min !default;
+//** Point at which the navbar begins collapsing.
+$grid-float-breakpoint-max: ($grid-float-breakpoint - 1) !default;
+
+
+//== Container sizes
+//
+//## Define the maximum width of `.container` for different screen sizes.
+
+// Small screen / tablet
+$container-tablet:             (720px + $grid-gutter-width) !default;
+//** For `$screen-sm-min` and up.
+$container-sm:                 $container-tablet !default;
+
+// Medium screen / desktop
+$container-desktop:            (940px + $grid-gutter-width) !default;
+//** For `$screen-md-min` and up.
+$container-md:                 $container-desktop !default;
+
+// Large screen / wide desktop
+$container-large-desktop:      (1140px + $grid-gutter-width) !default;
+//** For `$screen-lg-min` and up.
+$container-lg:                 $container-large-desktop !default;
+
+
+//== Navbar
+//
+//##
+
+// Basics of a navbar
+$navbar-height:                    50px !default;
+$navbar-margin-bottom:             $line-height-computed !default;
+$navbar-border-radius:             $border-radius-base !default;
+$navbar-padding-horizontal:        floor(($grid-gutter-width / 2)) !default;
+$navbar-padding-vertical:          (($navbar-height - $line-height-computed) / 2) !default;
+$navbar-collapse-max-height:       340px !default;
+
+$navbar-default-color:             #777 !default;
+$navbar-default-bg:                #f8f8f8 !default;
+$navbar-default-border:            darken($navbar-default-bg, 6.5%) !default;
+
+// Navbar links
+$navbar-default-link-color:                #777 !default;
+$navbar-default-link-hover-color:          #333 !default;
+$navbar-default-link-hover-bg:             transparent !default;
+$navbar-default-link-active-color:         #555 !default;
+$navbar-default-link-active-bg:            darken($navbar-default-bg, 6.5%) !default;
+$navbar-default-link-disabled-color:       #ccc !default;
+$navbar-default-link-disabled-bg:          transparent !default;
+
+// Navbar brand label
+$navbar-default-brand-color:               $navbar-default-link-color !default;
+$navbar-default-brand-hover-color:         darken($navbar-default-brand-color, 10%) !default;
+$navbar-default-brand-hover-bg:            transparent !default;
+
+// Navbar toggle
+$navbar-default-toggle-hover-bg:           #ddd !default;
+$navbar-default-toggle-icon-bar-bg:        #888 !default;
+$navbar-default-toggle-border-color:       #ddd !default;
+
+
+// Inverted navbar
+// Reset inverted navbar basics
+$navbar-inverse-color:                      lighten($gray-light, 15%) !default;
+$navbar-inverse-bg:                         #222 !default;
+$navbar-inverse-border:                     darken($navbar-inverse-bg, 10%) !default;
+
+// Inverted navbar links
+$navbar-inverse-link-color:                 lighten($gray-light, 15%) !default;
+$navbar-inverse-link-hover-color:           #fff !default;
+$navbar-inverse-link-hover-bg:              transparent !default;
+$navbar-inverse-link-active-color:          $navbar-inverse-link-hover-color !default;
+$navbar-inverse-link-active-bg:             darken($navbar-inverse-bg, 10%) !default;
+$navbar-inverse-link-disabled-color:        #444 !default;
+$navbar-inverse-link-disabled-bg:           transparent !default;
+
+// Inverted navbar brand label
+$navbar-inverse-brand-color:                $navbar-inverse-link-color !default;
+$navbar-inverse-brand-hover-color:          #fff !default;
+$navbar-inverse-brand-hover-bg:             transparent !default;
+
+// Inverted navbar toggle
+$navbar-inverse-toggle-hover-bg:            #333 !default;
+$navbar-inverse-toggle-icon-bar-bg:         #fff !default;
+$navbar-inverse-toggle-border-color:        #333 !default;
+
+
+//== Navs
+//
+//##
+
+//=== Shared nav styles
+$nav-link-padding:                          10px 15px !default;
+$nav-link-hover-bg:                         $gray-lighter !default;
+
+$nav-disabled-link-color:                   $gray-light !default;
+$nav-disabled-link-hover-color:             $gray-light !default;
+
+//== Tabs
+$nav-tabs-border-color:                     #ddd !default;
+
+$nav-tabs-link-hover-border-color:          $gray-lighter !default;
+
+$nav-tabs-active-link-hover-bg:             $body-bg !default;
+$nav-tabs-active-link-hover-color:          $gray !default;
+$nav-tabs-active-link-hover-border-color:   #ddd !default;
+
+$nav-tabs-justified-link-border-color:            #ddd !default;
+$nav-tabs-justified-active-link-border-color:     $body-bg !default;
+
+//== Pills
+$nav-pills-border-radius:                   $border-radius-base !default;
+$nav-pills-active-link-hover-bg:            $component-active-bg !default;
+$nav-pills-active-link-hover-color:         $component-active-color !default;
+
+
+//== Pagination
+//
+//##
+
+$pagination-color:                     #383838 !default;
+$pagination-bg:                        #f2fafe !default;
+$pagination-border:                    #ddd !default;
+
+$pagination-hover-color:               #009ee2 !default;
+$pagination-hover-bg:                  #f2fafe !default;
+$pagination-hover-border:              #009ee2 !default;
+
+$pagination-active-color:              #009ee2 !default;
+$pagination-active-bg:                 #f2fafe !default;
+$pagination-active-border:             #009ee2 !default;
+
+$pagination-disabled-color:            $gray-light !default;
+$pagination-disabled-bg:               #f2fafe !default;
+$pagination-disabled-border:           #ddd !default;
+
+
+//== Pager
+//
+//##
+
+$pager-bg:                             $pagination-bg !default;
+$pager-border:                         $pagination-border !default;
+$pager-border-radius:                  15px !default;
+
+$pager-hover-bg:                       $pagination-hover-bg !default;
+
+$pager-active-bg:                      $pagination-active-bg !default;
+$pager-active-color:                   $pagination-active-color !default;
+
+$pager-disabled-color:                 $pagination-disabled-color !default;
+
+
+//== Jumbotron
+//
+//##
+
+$jumbotron-padding:              30px !default;
+$jumbotron-color:                inherit !default;
+$jumbotron-bg:                   $gray-lighter !default;
+$jumbotron-heading-color:        inherit !default;
+$jumbotron-font-size:            ceil(($font-size-base * 1.5)) !default;
+
+
+//== Form states and alerts
+//
+//## Define colors for form feedback states and, by default, alerts.
+
+$state-success-text:             #3c763d !default;
+$state-success-bg:               #dff0d8 !default;
+$state-success-border:           darken(adjust-hue($state-success-bg, -10), 5%) !default;
+
+$state-info-text:                #31708f !default;
+$state-info-bg:                  #d9edf7 !default;
+$state-info-border:              darken(adjust-hue($state-info-bg, -10), 7%) !default;
+
+$state-warning-text:             #8a6d3b !default;
+$state-warning-bg:               #fcf8e3 !default;
+$state-warning-border:           darken(adjust-hue($state-warning-bg, -10), 5%) !default;
+
+$state-danger-text:              #a94442 !default;
+$state-danger-bg:                #f2dede !default;
+$state-danger-border:            darken(adjust-hue($state-danger-bg, -10), 5%) !default;
+
+
+//== Tooltips
+//
+//##
+
+//** Tooltip max width
+$tooltip-max-width:           200px !default;
+//** Tooltip text color
+$tooltip-color:               #fff !default;
+//** Tooltip background color
+$tooltip-bg:                  #000 !default;
+$tooltip-opacity:             .9 !default;
+
+//** Tooltip arrow width
+$tooltip-arrow-width:         5px !default;
+//** Tooltip arrow color
+$tooltip-arrow-color:         $tooltip-bg !default;
+
+
+//== Popovers
+//
+//##
+
+//** Popover body background color
+$popover-bg:                          #fff !default;
+//** Popover maximum width
+$popover-max-width:                   276px !default;
+//** Popover border color
+$popover-border-color:                rgba(0,0,0,.2) !default;
+//** Popover fallback border color
+$popover-fallback-border-color:       #ccc !default;
+
+//** Popover title background color
+$popover-title-bg:                    darken($popover-bg, 3%) !default;
+
+//** Popover arrow width
+$popover-arrow-width:                 10px !default;
+//** Popover arrow color
+$popover-arrow-color:                 $popover-bg !default;
+
+//** Popover outer arrow width
+$popover-arrow-outer-width:           ($popover-arrow-width + 1) !default;
+//** Popover outer arrow color
+$popover-arrow-outer-color:           fade_in($popover-border-color, 0.05) !default;
+//** Popover outer arrow fallback color
+$popover-arrow-outer-fallback-color:  darken($popover-fallback-border-color, 20%) !default;
+
+
+//== Labels
+//
+//##
+
+//** Default label background color
+$label-default-bg:            $gray-light !default;
+//** Primary label background color
+$label-primary-bg:            $brand-primary !default;
+//** Success label background color
+$label-success-bg:            $brand-success !default;
+//** Info label background color
+$label-info-bg:               $brand-info !default;
+//** Warning label background color
+$label-warning-bg:            $brand-warning !default;
+//** Danger label background color
+$label-danger-bg:             $brand-danger !default;
+
+//** Default label text color
+$label-color:                 #fff !default;
+//** Default text color of a linked label
+$label-link-hover-color:      #fff !default;
+
+
+//== Modals
+//
+//##
+
+//** Padding applied to the modal body
+$modal-inner-padding:         15px !default;
+
+//** Padding applied to the modal title
+$modal-title-padding:         15px !default;
+//** Modal title line-height
+$modal-title-line-height:     $line-height-base !default;
+
+//** Background color of modal content area
+$modal-content-bg:                             #fff !default;
+//** Modal content border color
+$modal-content-border-color:                   rgba(0,0,0,.2) !default;
+//** Modal content border color **for IE8**
+$modal-content-fallback-border-color:          #999 !default;
+
+//** Modal backdrop background color
+$modal-backdrop-bg:           #000 !default;
+//** Modal backdrop opacity
+$modal-backdrop-opacity:      .5 !default;
+//** Modal header border color
+$modal-header-border-color:   #e5e5e5 !default;
+//** Modal footer border color
+$modal-footer-border-color:   $modal-header-border-color !default;
+
+$modal-lg:                    900px !default;
+$modal-md:                    600px !default;
+$modal-sm:                    300px !default;
+
+
+//== Alerts
+//
+//## Define alert colors, border radius, and padding.
+
+$alert-padding:               15px !default;
+$alert-border-radius:         $border-radius-base !default;
+$alert-link-font-weight:      bold !default;
+
+$alert-success-bg:            $state-success-bg !default;
+$alert-success-text:          $state-success-text !default;
+$alert-success-border:        $state-success-border !default;
+
+$alert-info-bg:               $state-info-bg !default;
+$alert-info-text:             $state-info-text !default;
+$alert-info-border:           $state-info-border !default;
+
+$alert-warning-bg:            $state-warning-bg !default;
+$alert-warning-text:          $state-warning-text !default;
+$alert-warning-border:        $state-warning-border !default;
+
+$alert-danger-bg:             $state-danger-bg !default;
+$alert-danger-text:           $state-danger-text !default;
+$alert-danger-border:         $state-danger-border !default;
+
+
+//== Progress bars
+//
+//##
+
+//** Background color of the whole progress component
+$progress-bg:                 #f5f5f5 !default;
+//** Progress bar text color
+$progress-bar-color:          #fff !default;
+//** Variable for setting rounded corners on progress bar.
+$progress-border-radius:      $border-radius-base !default;
+
+//** Default progress bar color
+$progress-bar-bg:             $brand-primary !default;
+//** Success progress bar color
+$progress-bar-success-bg:     $brand-success !default;
+//** Warning progress bar color
+$progress-bar-warning-bg:     $brand-warning !default;
+//** Danger progress bar color
+$progress-bar-danger-bg:      $brand-danger !default;
+//** Info progress bar color
+$progress-bar-info-bg:        $brand-info !default;
+
+
+//== List group
+//
+//##
+
+//** Background color on `.list-group-item`
+$list-group-bg:                 #fff !default;
+//** `.list-group-item` border color
+$list-group-border:             #ddd !default;
+//** List group border radius
+$list-group-border-radius:      $border-radius-base !default;
+
+//** Background color of single list items on hover
+$list-group-hover-bg:           #f5f5f5 !default;
+//** Text color of active list items
+$list-group-active-color:       $component-active-color !default;
+//** Background color of active list items
+$list-group-active-bg:          $component-active-bg !default;
+//** Border color of active list elements
+$list-group-active-border:      $list-group-active-bg !default;
+//** Text color for content within active list items
+$list-group-active-text-color:  lighten($list-group-active-bg, 40%) !default;
+
+//** Text color of disabled list items
+$list-group-disabled-color:      $gray-light !default;
+//** Background color of disabled list items
+$list-group-disabled-bg:         $gray-lighter !default;
+//** Text color for content within disabled list items
+$list-group-disabled-text-color: $list-group-disabled-color !default;
+
+$list-group-link-color:         #555 !default;
+$list-group-link-hover-color:   $list-group-link-color !default;
+$list-group-link-heading-color: #333 !default;
+
+
+//== Panels
+//
+//##
+
+$panel-bg:                    #fff !default;
+$panel-body-padding:          15px !default;
+$panel-heading-padding:       10px 15px !default;
+$panel-footer-padding:        $panel-heading-padding !default;
+$panel-border-radius:         $border-radius-base !default;
+
+//** Border color for elements within panels
+$panel-inner-border:          #ddd !default;
+$panel-footer-bg:             #f5f5f5 !default;
+
+$panel-default-text:          $gray-dark !default;
+$panel-default-border:        #ddd !default;
+$panel-default-heading-bg:    #f5f5f5 !default;
+
+$panel-primary-text:          #fff !default;
+$panel-primary-border:        $brand-primary !default;
+$panel-primary-heading-bg:    $brand-primary !default;
+
+$panel-success-text:          $state-success-text !default;
+$panel-success-border:        $state-success-border !default;
+$panel-success-heading-bg:    $state-success-bg !default;
+
+$panel-info-text:             $state-info-text !default;
+$panel-info-border:           $state-info-border !default;
+$panel-info-heading-bg:       $state-info-bg !default;
+
+$panel-warning-text:          $state-warning-text !default;
+$panel-warning-border:        $state-warning-border !default;
+$panel-warning-heading-bg:    $state-warning-bg !default;
+
+$panel-danger-text:           $state-danger-text !default;
+$panel-danger-border:         $state-danger-border !default;
+$panel-danger-heading-bg:     $state-danger-bg !default;
+
+
+//== Thumbnails
+//
+//##
+
+//** Padding around the thumbnail image
+$thumbnail-padding:           4px !default;
+//** Thumbnail background color
+$thumbnail-bg:                $body-bg !default;
+//** Thumbnail border color
+$thumbnail-border:            #ddd !default;
+//** Thumbnail border radius
+$thumbnail-border-radius:     $border-radius-base !default;
+
+//** Custom text color for thumbnail captions
+$thumbnail-caption-color:     $text-color !default;
+//** Padding around the thumbnail caption
+$thumbnail-caption-padding:   9px !default;
+
+
+//== Wells
+//
+//##
+
+$well-bg:                     #f5f5f5 !default;
+$well-border:                 darken($well-bg, 7%) !default;
+
+
+//== Badges
+//
+//##
+
+$badge-color:                 #fff !default;
+//** Linked badge text color on hover
+$badge-link-hover-color:      #fff !default;
+$badge-bg:                    $gray-light !default;
+
+//** Badge text color in active nav link
+$badge-active-color:          $link-color !default;
+//** Badge background color in active nav link
+$badge-active-bg:             #fff !default;
+
+$badge-font-weight:           bold !default;
+$badge-line-height:           1 !default;
+$badge-border-radius:         10px !default;
+
+
+//== Breadcrumbs
+//
+//##
+
+$breadcrumb-padding-vertical:   8px !default;
+$breadcrumb-padding-horizontal: 15px !default;
+//** Breadcrumb background color
+$breadcrumb-bg:                 #f5f5f5 !default;
+//** Breadcrumb text color
+$breadcrumb-color:              #ccc !default;
+//** Text color of current page in the breadcrumb
+$breadcrumb-active-color:       $gray-light !default;
+//** Textual separator for between breadcrumb elements
+$breadcrumb-separator:          "/" !default;
+
+
+//== Carousel
+//
+//##
+
+$carousel-text-shadow:                        0 1px 2px rgba(0,0,0,.6) !default;
+
+$carousel-control-color:                      #fff !default;
+$carousel-control-width:                      15% !default;
+$carousel-control-opacity:                    .5 !default;
+$carousel-control-font-size:                  20px !default;
+
+$carousel-indicator-active-bg:                #fff !default;
+$carousel-indicator-border-color:             #fff !default;
+
+$carousel-caption-color:                      #fff !default;
+
+
+//== Close
+//
+//##
+
+$close-font-weight:           bold !default;
+$close-color:                 #000 !default;
+$close-text-shadow:           0 1px 0 #fff !default;
+
+
+//== Code
+//
+//##
+
+$code-color:                  #c7254e !default;
+$code-bg:                     #f9f2f4 !default;
+
+$kbd-color:                   #fff !default;
+$kbd-bg:                      #333 !default;
+
+$pre-bg:                      #f5f5f5 !default;
+$pre-color:                   $gray-dark !default;
+$pre-border-color:            #ccc !default;
+$pre-scrollable-max-height:   340px !default;
+
+
+//== Type
+//
+//##
+
+//** Horizontal offset for forms and lists.
+$component-offset-horizontal: 180px !default;
+//** Text muted color
+$text-muted:                  $gray-light !default;
+//** Abbreviations and acronyms border color
+$abbr-border-color:           $gray-light !default;
+//** Headings small color
+$headings-small-color:        $gray-light !default;
+//** Blockquote small color
+$blockquote-small-color:      $gray-light !default;
+//** Blockquote font size
+$blockquote-font-size:        ($font-size-base * 1.25) !default;
+//** Blockquote border color
+$blockquote-border-color:     $gray-lighter !default;
+//** Page header border color
+$page-header-border-color:    $gray-lighter !default;
+//** Width of horizontal description list titles
+$dl-horizontal-offset:        $component-offset-horizontal !default;
+//** Horizontal line color.
+$hr-border:                   $gray-lighter !default;
\ No newline at end of file
diff --git a/ACSmI/Billing/app/assets/stylesheets/contracter.scss b/ACSmI/Billing/app/assets/stylesheets/contracter.scss
new file mode 100644
index 0000000000000000000000000000000000000000..77ee6eb14fb15dbd5b444f4e9fe98c244136fa37
--- /dev/null
+++ b/ACSmI/Billing/app/assets/stylesheets/contracter.scss
@@ -0,0 +1,13 @@
+.contracter-container {
+  text-align: center;
+
+  .contracter-body {
+    display: inline-block;
+    padding: 10px 30px 5px 20px;
+
+    .contract-spinner {
+      color: gray;
+      font-size: 24px;
+    }
+  }
+}
\ No newline at end of file
diff --git a/ACSmI/Billing/app/assets/stylesheets/contracts.scss b/ACSmI/Billing/app/assets/stylesheets/contracts.scss
new file mode 100644
index 0000000000000000000000000000000000000000..32579ab6510c639016b0bf5a30c5784675924998
--- /dev/null
+++ b/ACSmI/Billing/app/assets/stylesheets/contracts.scss
@@ -0,0 +1,10 @@
+.contracts-content {
+    .resource-info {
+        font-size: 16px;
+
+        label {
+            color: #3C4858;
+            font-size: 16px;
+        }
+    }
+}
\ No newline at end of file
diff --git a/ACSmI/Billing/app/assets/stylesheets/footer.css b/ACSmI/Billing/app/assets/stylesheets/footer.css
new file mode 100644
index 0000000000000000000000000000000000000000..09306059e4b3adaf976400078d9b83da5951bdb1
--- /dev/null
+++ b/ACSmI/Billing/app/assets/stylesheets/footer.css
@@ -0,0 +1,18 @@
+.footer {
+    bottom: 0;
+    height: 70px;
+    background-color: #f8f8f8;
+    z-index: 999;
+}
+
+.footer-text,
+.footer-text > a {
+    color: #777;
+    font-size: 12px;
+}
+
+img.footer-flag {
+    float: right;
+    width: 24px;
+    margin-left: 5px;
+}
\ No newline at end of file
diff --git a/ACSmI/Billing/app/assets/stylesheets/home_page.scss b/ACSmI/Billing/app/assets/stylesheets/home_page.scss
new file mode 100644
index 0000000000000000000000000000000000000000..e2eec1ef618b7382f3fe477e1bfa1b012ae790a4
--- /dev/null
+++ b/ACSmI/Billing/app/assets/stylesheets/home_page.scss
@@ -0,0 +1,3 @@
+// Place all the styles related to the home_page controller here.
+// They will automatically be included in application.css.
+// You can use Sass (SCSS) here: http://sass-lang.com/
diff --git a/ACSmI/Billing/app/assets/stylesheets/information.scss b/ACSmI/Billing/app/assets/stylesheets/information.scss
new file mode 100644
index 0000000000000000000000000000000000000000..782d586c37671281e11c877aa764380de2da7169
--- /dev/null
+++ b/ACSmI/Billing/app/assets/stylesheets/information.scss
@@ -0,0 +1,18 @@
+.api_info {
+
+  td {
+    padding-left: 5px;
+  }
+
+  th {
+    text-align: center;
+    padding-left: 10px;
+    padding-right: 10px;
+  }
+
+  ul {
+    margin-top: 5px;
+    margin-bottom: 5px;
+    padding-left: 20px;
+  }
+}
\ No newline at end of file
diff --git a/ACSmI/Billing/app/assets/stylesheets/material-dashboard.scss b/ACSmI/Billing/app/assets/stylesheets/material-dashboard.scss
new file mode 100644
index 0000000000000000000000000000000000000000..d2eddfc8b813f1f534989805a64851b9d60aee70
--- /dev/null
+++ b/ACSmI/Billing/app/assets/stylesheets/material-dashboard.scss
@@ -0,0 +1,52 @@
+ /*!
+
+  =========================================================
+  * Material Dashboard Angular CLI - V1.4.2
+  =========================================================
+
+  * Product Page: https://www.creative-tim.com/product/material-dashboard-angular2
+  * Copyright 2017 Creative Tim (https://www.creative-tim.com)
+  * Licensed under MIT (https://github.com/creativetimofficial/material-dashboard-angular/blob/master/LICENSE.md)
+
+  =========================================================
+
+  * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+  */
+
+
+//variables and mixins
+@import "md/variables";
+@import "md/mixins";
+@import "md/shadows";
+
+//plugin css
+@import "md/plugins/_plugin-nouislider";
+@import "md/plugins/_animate";
+
+// Core CSS
+@import "md/typography";
+@import "md/sidebar-and-main-panel";
+@import "md/buttons";
+@import "md/misc";
+@import "md/inputs";
+@import "md/forms";
+@import "md/alerts";
+@import "md/tables";
+@import "md/checkboxes";
+@import "md/radios";
+@import "md/togglebutton";
+@import "md/ripples";
+@import "md/pills";
+@import "md/dialogs";
+@import "md/navbars";
+@import "md/popups";
+@import "md/footers";
+@import "md/select";
+
+// Fancy Stuff
+@import "md/dropdown";
+@import "md/cards";
+@import "md/tabs";
+@import "md/chartist";
+@import "md/responsive";
diff --git a/ACSmI/Billing/app/assets/stylesheets/md/_alerts.scss b/ACSmI/Billing/app/assets/stylesheets/md/_alerts.scss
new file mode 100644
index 0000000000000000000000000000000000000000..a3efa5a7f45c9c37c3b1e1b99e52a94fe7924fa8
--- /dev/null
+++ b/ACSmI/Billing/app/assets/stylesheets/md/_alerts.scss
@@ -0,0 +1,57 @@
+// This file has been autogenerated by grunt task lessToSass. Any changes will be overwritten.
+
+.alert {
+    border: 0;
+    border-radius: 0;
+    position: relative;
+    padding: 20px 30px;
+    line-height: 20px;
+
+    b{
+        font-weight: $font-weight-bold;
+        text-transform: uppercase;
+        font-size: $font-size-small;
+    }
+    // SASS conversion note: please mirror any content change in _mixins-shared.scss alert-variations-content
+    @include alert-variations(unquote(".alert"), unquote(""), $mdb-text-color-light);
+
+    &-info, &-danger, &-warning, &-success {
+        color: $mdb-text-color-light;
+    }
+
+    &-default {
+        a, .alert-link {
+            color: $mdb-text-color-primary;
+        }
+    }
+
+    i[data-notify="icon"] {
+        font-size: 30px;
+        display: block;
+        left: 15px;
+        position: absolute;
+        top: 50%;
+        margin-top: -15px;
+    }
+
+    span{
+        display: block;
+        max-width: 89%;
+    }
+
+    .alert-icon{
+        display: block;
+        float: left;
+        margin-right: $margin-base;
+
+        i{
+            margin-top: -7px;
+            top: 5px;
+            position: relative;
+        }
+    }
+}
+
+.alert.alert-with-icon {
+    padding-left: 65px;
+}
diff --git a/ACSmI/Billing/app/assets/stylesheets/md/_buttons.scss b/ACSmI/Billing/app/assets/stylesheets/md/_buttons.scss
new file mode 100644
index 0000000000000000000000000000000000000000..c7f53352fecd0d7ef91b7b46679d2bebce04607f
--- /dev/null
+++ b/ACSmI/Billing/app/assets/stylesheets/md/_buttons.scss
@@ -0,0 +1,264 @@
+.btn,
+.navbar .navbar-nav > li > a.btn{
+    border: none;
+    border-radius: $border-radius-base;
+    position: relative;
+    padding: 12px 30px;
+    margin: 10px 1px;
+
+    font-size: $mdb-btn-font-size-base;
+    font-weight: 400;
+    text-transform: uppercase;
+    letter-spacing: 0;
+
+    will-change: box-shadow, transform;
+    transition: box-shadow 0.2s $mdb-animation-curve-fast-out-linear-in,
+    background-color 0.2s $mdb-animation-curve-default;
+
+    &::-moz-focus-inner {
+    border: 0;
+    }
+
+    &,
+    &.btn-default{
+        @include btn-styles($gray-light);
+    }
+    &.btn-primary{
+      @include btn-styles($my-theme-primary);
+    }
+    &.btn-primary-dark{
+      @include btn-styles($my-theme-primary-dark);
+    }
+    &.btn-accent{
+      @include btn-styles($my-theme-accent);
+    }
+    &.btn-info{
+      @include btn-styles($brand-info);
+    }
+    &.btn-success{
+      @include btn-styles($brand-success);
+    }
+    &.btn-warning{
+      @include btn-styles($brand-warning);
+    }
+    &.btn-danger{
+      @include btn-styles($brand-danger);
+    }
+    &.btn-white{
+        &,
+        &:focus,
+        &:hover{
+            background-color: $white-color;
+            color: $gray-light;
+        }
+        &.btn-simple{
+            color: #FFFFFF;
+            background: transparent;
+            box-shadow: none;
+        }
+    }
+
+    // social buttons
+    &.btn-facebook {
+    	@include social-buttons-color($social-facebook);
+    }
+    &.btn-twitter {
+    	@include social-buttons-color($social-twitter);
+    }
+    &.btn-pinterest {
+    	@include social-buttons-color($social-pinterest);
+    }
+    &.btn-google {
+    	@include social-buttons-color($social-google);
+    }
+    &.btn-instagram {
+    	@include social-buttons-color($social-instagram);
+    }
+
+    &:focus,
+    &:active,
+    &:active:focus{
+      outline: 0;
+    }
+
+    &.btn-round{
+      border-radius: $border-radius-extreme;
+    }
+
+    &:not(.btn-just-icon):not(.btn-fab){
+      .fa{
+          font-size: 18px;
+          margin-top: -2px;
+          position: relative;
+          top: 2px;
+      }
+    }
+
+
+    &.btn-fab {
+        // see above for color variations
+        border-radius: 50%;
+        font-size: $mdb-btn-fab-font-size;
+        height: $mdb-btn-fab-size;
+        margin: auto;
+        min-width: $mdb-btn-fab-size;
+        width: $mdb-btn-fab-size;
+        padding: 0;
+        overflow: hidden;
+        position: relative;
+        line-height: normal;
+
+        .ripple-container {
+          border-radius: 50%;
+        }
+
+        &.btn-fab-mini,
+        .btn-group-sm & {
+            height: $mdb-btn-fab-size-mini;
+            min-width: $mdb-btn-fab-size-mini;
+            width: $mdb-btn-fab-size-mini;
+
+            &.material-icons {
+                top: ($mdb-btn-icon-size-mini - $mdb-btn-fab-font-size) / 2;
+                left: ($mdb-btn-icon-size-mini - $mdb-btn-fab-font-size) / 2;
+            }
+
+            .material-icons{
+                font-size: $mdb-btn-icon-size-mini;
+            }
+        }
+
+        i.material-icons {
+          position: absolute;
+          top: 50%;
+          left: 50%;
+          transform: translate(-($mdb-btn-fab-font-size / 2), -($mdb-btn-fab-font-size / 2));
+          line-height: $mdb-btn-fab-font-size;
+          width: $mdb-btn-fab-font-size;
+          font-size: $mdb-btn-fab-font-size;
+        }
+    }
+
+    // Size variations
+    &.btn-lg,
+    .btn-group-lg & {
+        font-size: $mdb-btn-font-size-lg;
+        padding: 18px 36px;
+    }
+    &.btn-sm,
+    .btn-group-sm & {
+        padding: 5px 20px;
+        font-size: $mdb-btn-font-size-sm;
+    }
+    &.btn-xs,
+    .btn-group-xs & {
+        padding: 4px 15px;
+        font-size: $mdb-btn-font-size-xs;
+    }
+
+    &.btn-just-icon{
+        font-size: 20px;
+        padding: 12px 12px;
+        line-height: 1em;
+
+        i{
+            width: 20px;
+        }
+        &.btn-lg{
+            font-size: 22px;
+            padding: 13px 18px;
+        }
+    }
+}
+
+.btn{
+    // Align icons inside buttons with text
+    .material-icons{
+        vertical-align: middle;
+        font-size: $mdb-btn-icon-size-mini;
+        top: -1px;
+        position: relative;
+    }
+
+}
+
+.navbar .navbar-nav > li > {
+    a.btn{
+        margin-top: 2px;
+        margin-bottom: 2px;
+
+        &.btn-fab{
+            margin: 5px 2px;
+        }
+    }
+    a:not(.btn){
+        .material-icons{
+            margin-top: -3px;
+            top: 0px;
+            position: relative;
+            margin-right: 3px;
+        }
+    }
+    .profile-photo{
+        margin: 5px 2px;
+    }
+}
+
+.navbar-default:not(.navbar-transparent) .navbar-nav > li > {
+    a.btn{
+        &.btn-white.btn-simple{
+            color: $gray;
+        }
+    }
+}
+
+// btn-group variations
+.btn-group,
+.btn-group-vertical {
+
+  position: relative;
+  //border-radius: 2px;
+  margin: 10px 1px;
+
+  &.open {
+    .dropdown-toggle {
+      //box-shadow: none;
+    }
+
+    & > .dropdown-toggle.btn {
+      @include variations(unquote(".btn"), unquote(""), background-color, $mdb-btn-background-color);
+    }
+  }
+
+  .dropdown-menu {
+    border-radius: 0 0 $border-radius-base $border-radius-base;
+  }
+
+  &.btn-group-raised {
+    @include shadow-2dp();
+  }
+
+  & .btn + .btn,
+  .btn,
+  .btn:active,
+  .btn-group {
+    margin: 0;
+  }
+}
+
+.close{
+    font-size: inherit;
+    color: $white-color;
+    opacity: .9;
+    text-shadow: none;
+
+    &:hover,
+    &:focus{
+        opacity: 1;
+        color: $white-color;
+    }
+
+    i{
+        font-size: 20px;
+    }
+}
diff --git a/ACSmI/Billing/app/assets/stylesheets/md/_cards.scss b/ACSmI/Billing/app/assets/stylesheets/md/_cards.scss
new file mode 100644
index 0000000000000000000000000000000000000000..f5d8ac6bbefae0d283ebe5e9023910e008239061
--- /dev/null
+++ b/ACSmI/Billing/app/assets/stylesheets/md/_cards.scss
@@ -0,0 +1,343 @@
+.card{
+    display: inline-block;
+    position: relative;
+    width: 100%;
+    margin: 25px 0;
+
+    box-shadow: 0 1px 4px 0 rgba(0,0,0,0.14);
+    border-radius: $border-radius-base;
+    color: $mdb-card-body-text;
+    background: $mdb-card-body-background;
+
+    .card-height-indicator {
+        margin-top: 100%;
+    }
+
+    .title{
+        margin-top: 0;
+        margin-bottom: 5px;
+    }
+    .card-image {
+        height: 60%;
+        position: relative;
+        overflow: hidden;
+
+        margin-left: 15px;
+        margin-right: 15px;
+        margin-top: -30px;
+        border-radius: $border-radius-large;
+
+        img {
+            width: 100%;
+            height: 100%;
+            border-radius: $border-radius-large;
+            pointer-events: none;
+        }
+        .card-title {
+            position: absolute;
+            bottom: 15px;
+            left: 15px;
+            color: $mdb-card-image-headline;
+            font-size: $font-size-h4;
+            text-shadow: 0 2px 5px rgba(33, 33, 33, 0.5);
+        }
+    }
+
+    .category:not([class*="text-"]){
+        color: $gray-color;
+    }
+    .card-content{
+        padding: 15px 20px;
+
+        .category{
+            margin-bottom: 0;
+        }
+    }
+
+    .card-header{
+        @include shadow-big();
+        margin: -20px $margin-base 0;
+        border-radius: $border-radius-base;
+        padding: $padding-base;
+        background-color: $gray-color;
+
+        .title{
+            color: $white-color;
+        }
+        .category{
+            margin-bottom: 0;
+            color: rgba($white-color, .62);
+        }
+
+        &.card-chart{
+            padding: 0;
+            min-height: 160px;
+
+            + .content{
+                h4{
+                    margin-top: 0;
+                }
+            }
+        }
+
+        .ct-label{
+            color: rgba($white-color, .7);
+        }
+        .ct-grid{
+            stroke: rgba(255, 255, 255, 0.2);
+        }
+        .ct-series-a .ct-point,
+        .ct-series-a .ct-line,
+        .ct-series-a .ct-bar,
+        .ct-series-a .ct-slice-donut{
+            stroke: rgba(255,255,255,.8);
+        }
+        .ct-series-a .ct-slice-pie,
+        .ct-series-a .ct-area{
+            fill: rgba(255,255,255,.4);
+        }
+
+    }
+
+    .chart-title{
+        position: absolute;;
+        top: 25px;
+        width: 100%;
+        text-align: center;
+
+        h3{
+            margin: 0;
+            color: $white-color;
+        }
+
+        h6{
+            margin: 0;
+            color: rgba(255,255,255, .4);
+        }
+
+    }
+
+    .card-footer{
+        margin: 0 20px 10px;
+        padding-top: 10px;
+        border-top: 1px solid #eeeeee;
+
+        .content{
+            display: block;
+        }
+
+        div{
+            display: inline-block;
+        }
+        .author{
+            color: $gray-color;
+        }
+        .stats{
+            line-height: 22px;
+            color: $gray-color;
+            font-size: $font-size-small;
+
+            .material-icons{
+                position: relative;
+                top: 4px;
+                font-size: $font-paragraph;
+            }
+        }
+
+        h6{
+            color: $gray-color;
+        }
+
+    }
+
+    img{
+        width: 100%;
+        height: auto;
+    }
+
+    .category{
+        .material-icons{
+            position: relative;
+            top: 6px;
+            line-height: 0;
+        }
+    }
+
+    .category-social{
+        .fa{
+            font-size: 24px;
+            position: relative;
+            margin-top: -4px;
+            top: 2px;
+            margin-right: 5px;
+        }
+    }
+
+    .author{
+        .avatar{
+            width: 30px;
+            height: 30px;
+            overflow: hidden;
+            border-radius: 50%;
+            margin-right: 5px;
+        }
+
+        a{
+            color: $black-color;
+            text-decoration: none;
+
+            .ripple-container{
+                display: none;
+            }
+        }
+    }
+
+    .table{
+        margin-bottom: 0;
+
+        tr:first-child td{
+            border-top: none;
+        }
+    }
+
+    [data-background-color="purple"]{
+        background: linear-gradient(60deg, $purple-400, $purple-600);
+        @include shadow-big-color($brand-primary);
+    }
+
+    [data-background-color="blue"]{
+        background: linear-gradient(60deg, $cyan-400, $cyan-600);
+        @include shadow-big-color($brand-info);
+    }
+
+    [data-background-color="green"]{
+        background: linear-gradient(60deg, $green-400, $green-600);
+        @include shadow-big-color($brand-success);
+    }
+
+    [data-background-color="orange"]{
+        background: linear-gradient(60deg, $orange-400, $orange-600);
+        @include shadow-big-color($brand-warning);
+    }
+
+    [data-background-color="red"]{
+        background: linear-gradient(60deg, $red-400, $red-600);
+        @include shadow-big-color($brand-danger);
+    }
+
+	[data-background-color="primary"]{
+        //background: linear-gradient($my-theme-primary-light, $my-theme-primary, $my-theme-primary-dark);
+        background: linear-gradient($my-theme-primary, $my-theme-primary, $my-theme-primary-dark);
+        @include shadow-big-color($my-theme-primary);
+    }
+    
+    [data-background-color]{
+        color: $white-color;
+
+        a{
+            color: $white-color;
+        }
+    }
+}
+
+.card-stats{
+    .title{
+        margin: 0;
+    }
+    .card-header{
+        float: left;
+        text-align: center;
+
+        i{
+            font-size: 36px;
+            line-height: 56px;
+            width: 56px;
+            height: 56px;
+        }
+    }
+    .card-content{
+        text-align: right;
+        padding-top: 10px;
+    }
+
+}
+
+.card-nav-tabs{
+    .header-raised{
+        margin-top: -$margin-base * 2;
+    }
+    .nav-tabs{
+        background: transparent;
+        padding: 0;
+    }
+    .nav-tabs-title{
+        float: left;
+        padding: 10px 10px 10px 0;
+        line-height: 24px;
+    }
+}
+
+.card-plain{
+    background: transparent;
+    box-shadow: none;
+
+    .card-header{
+        margin-left: 0;
+        margin-right: 0;
+    }
+    .content{
+        padding-left: 5px;
+        padding-right: 5px;
+    }
+
+    .card-image{
+        margin: 0;
+        border-radius: $border-radius-base;
+
+        img{
+            border-radius: $border-radius-base;
+        }
+    }
+}
+
+.iframe-container{
+    margin: 0 -20px 0;
+
+    iframe{
+        width: 100%;
+        height: 500px;
+        border: 0;
+        @include shadow-big();
+    }
+}
+
+.card-profile,
+.card-testimonial{
+    margin-top: 30px;
+    text-align: center;
+
+    .btn-just-icon.btn-raised{
+        margin-left: 6px;
+        margin-right: 6px;
+    }
+
+    .card-avatar{
+        max-width: 130px;
+        max-height: 130px;
+        margin: -50px auto 0;
+        border-radius: 50%;
+        overflow: hidden;
+
+        @include shadow-big();
+
+        & + .content{
+            margin-top: 15px;
+        }
+    }
+
+    &.card-plain{
+        .card-avatar{
+            margin-top: 0;
+        }
+    }
+}
diff --git a/ACSmI/Billing/app/assets/stylesheets/md/_chartist.scss b/ACSmI/Billing/app/assets/stylesheets/md/_chartist.scss
new file mode 100644
index 0000000000000000000000000000000000000000..25d7e10998c07e91348e0bc62025a34b8bd41106
--- /dev/null
+++ b/ACSmI/Billing/app/assets/stylesheets/md/_chartist.scss
@@ -0,0 +1,254 @@
+@mixin ct-responsive-svg-container($width: 100%, $ratio: $ct-container-ratio) {
+  display: block;
+  position: relative;
+  width: $width;
+
+  &:before {
+    display: block;
+    float: left;
+    content: "";
+    width: 0;
+    height: 0;
+    padding-bottom: $ratio * 100%;
+  }
+
+  &:after {
+    content: "";
+    display: table;
+    clear: both;
+  }
+
+  > svg {
+    display: block;
+    position: absolute;
+    top: 0;
+    left: 0;
+  }
+}
+
+@mixin ct-align-justify($ct-text-align: $ct-text-align, $ct-text-justify: $ct-text-justify) {
+  -webkit-box-align: $ct-text-align;
+  -webkit-align-items: $ct-text-align;
+  -ms-flex-align: $ct-text-align;
+  align-items: $ct-text-align;
+  -webkit-box-pack: $ct-text-justify;
+  -webkit-justify-content: $ct-text-justify;
+  -ms-flex-pack: $ct-text-justify;
+  justify-content: $ct-text-justify;
+  // Fallback to text-align for non-flex browsers
+  @if($ct-text-justify == 'flex-start') {
+    text-align: left;
+  } @else if ($ct-text-justify == 'flex-end') {
+    text-align: right;
+  } @else {
+    text-align: center;
+  }
+}
+
+@mixin ct-flex() {
+  // Fallback to block
+  display: block;
+  display: -webkit-box;
+  display: -moz-box;
+  display: -ms-flexbox;
+  display: -webkit-flex;
+  display: flex;
+}
+
+
+
+@mixin ct-chart-label($ct-text-color: $ct-text-color, $ct-text-size: $ct-text-size, $ct-text-line-height: $ct-text-line-height) {
+  fill: $ct-text-color;
+  color: $ct-text-color;
+  font-size: $ct-text-size;
+  line-height: $ct-text-line-height;
+}
+
+@mixin ct-chart-grid($ct-grid-color: $ct-grid-color, $ct-grid-width: $ct-grid-width, $ct-grid-dasharray: $ct-grid-dasharray) {
+  stroke: $ct-grid-color;
+  stroke-width: $ct-grid-width;
+
+  @if ($ct-grid-dasharray) {
+    stroke-dasharray: $ct-grid-dasharray;
+  }
+}
+
+@mixin ct-chart-point($ct-point-size: $ct-point-size, $ct-point-shape: $ct-point-shape) {
+  stroke-width: $ct-point-size;
+  stroke-linecap: $ct-point-shape;
+}
+
+@mixin ct-chart-line($ct-line-width: $ct-line-width, $ct-line-dasharray: $ct-line-dasharray) {
+  fill: none;
+  stroke-width: $ct-line-width;
+
+  @if ($ct-line-dasharray) {
+    stroke-dasharray: $ct-line-dasharray;
+  }
+}
+
+@mixin ct-chart-area($ct-area-opacity: $ct-area-opacity) {
+  stroke: none;
+  fill-opacity: $ct-area-opacity;
+}
+
+@mixin ct-chart-bar($ct-bar-width: $ct-bar-width) {
+  fill: none;
+  stroke-width: $ct-bar-width;
+}
+
+@mixin ct-chart-donut($ct-donut-width: $ct-donut-width) {
+  fill: none;
+  stroke-width: $ct-donut-width;
+}
+
+@mixin ct-chart-series-color($color) {
+  .#{$ct-class-point}, .#{$ct-class-line}, .#{$ct-class-bar}, .#{$ct-class-slice-donut} {
+    stroke: $color;
+  }
+
+  .#{$ct-class-slice-pie}, .#{$ct-class-area} {
+    fill: $color;
+  }
+}
+
+@mixin ct-chart($ct-container-ratio: $ct-container-ratio, $ct-text-color: $ct-text-color, $ct-text-size: $ct-text-size, $ct-grid-color: $ct-grid-color, $ct-grid-width: $ct-grid-width, $ct-grid-dasharray: $ct-grid-dasharray, $ct-point-size: $ct-point-size, $ct-point-shape: $ct-point-shape, $ct-line-width: $ct-line-width, $ct-bar-width: $ct-bar-width, $ct-donut-width: $ct-donut-width, $ct-series-names: $ct-series-names, $ct-series-colors: $ct-series-colors) {
+
+  .#{$ct-class-label} {
+    @include ct-chart-label($ct-text-color, $ct-text-size);
+  }
+
+  .#{$ct-class-chart-line} .#{$ct-class-label},
+  .#{$ct-class-chart-bar} .#{$ct-class-label} {
+    @include ct-flex();
+  }
+
+  .#{$ct-class-label}.#{$ct-class-horizontal}.#{$ct-class-start} {
+    @include ct-align-justify(flex-end, flex-start);
+    // Fallback for browsers that don't support foreignObjects
+    text-anchor: start;
+  }
+
+  .#{$ct-class-label}.#{$ct-class-horizontal}.#{$ct-class-end} {
+    @include ct-align-justify(flex-start, flex-start);
+    // Fallback for browsers that don't support foreignObjects
+    text-anchor: start;
+  }
+
+  .#{$ct-class-label}.#{$ct-class-vertical}.#{$ct-class-start} {
+    @include ct-align-justify(flex-end, flex-end);
+    // Fallback for browsers that don't support foreignObjects
+    text-anchor: end;
+  }
+
+  .#{$ct-class-label}.#{$ct-class-vertical}.#{$ct-class-end} {
+    @include ct-align-justify(flex-end, flex-start);
+    // Fallback for browsers that don't support foreignObjects
+    text-anchor: start;
+  }
+
+  .#{$ct-class-chart-bar} .#{$ct-class-label}.#{$ct-class-horizontal}.#{$ct-class-start} {
+    @include ct-align-justify(flex-end, center);
+    // Fallback for browsers that don't support foreignObjects
+    text-anchor: start;
+  }
+
+  .#{$ct-class-chart-bar} .#{$ct-class-label}.#{$ct-class-horizontal}.#{$ct-class-end} {
+    @include ct-align-justify(flex-start, center);
+    // Fallback for browsers that don't support foreignObjects
+    text-anchor: start;
+  }
+
+  .#{$ct-class-chart-bar}.#{$ct-class-horizontal-bars} .#{$ct-class-label}.#{$ct-class-horizontal}.#{$ct-class-start} {
+    @include ct-align-justify(flex-end, flex-start);
+    // Fallback for browsers that don't support foreignObjects
+    text-anchor: start;
+  }
+
+  .#{$ct-class-chart-bar}.#{$ct-class-horizontal-bars} .#{$ct-class-label}.#{$ct-class-horizontal}.#{$ct-class-end} {
+    @include ct-align-justify(flex-start, flex-start);
+    // Fallback for browsers that don't support foreignObjects
+    text-anchor: start;
+  }
+
+  .#{$ct-class-chart-bar}.#{$ct-class-horizontal-bars} .#{$ct-class-label}.#{$ct-class-vertical}.#{$ct-class-start} {
+    //@include ct-chart-label($ct-text-color, $ct-text-size, center, $ct-vertical-text-justify);
+    @include ct-align-justify(center, flex-end);
+    // Fallback for browsers that don't support foreignObjects
+    text-anchor: end;
+  }
+
+  .#{$ct-class-chart-bar}.#{$ct-class-horizontal-bars} .#{$ct-class-label}.#{$ct-class-vertical}.#{$ct-class-end} {
+    @include ct-align-justify(center, flex-start);
+    // Fallback for browsers that don't support foreignObjects
+    text-anchor: end;
+  }
+
+  .#{$ct-class-grid} {
+    @include ct-chart-grid($ct-grid-color, $ct-grid-width, $ct-grid-dasharray);
+  }
+
+  .#{$ct-class-point} {
+    @include ct-chart-point($ct-point-size, $ct-point-shape);
+  }
+
+  .#{$ct-class-line} {
+    @include ct-chart-line($ct-line-width);
+  }
+
+  .#{$ct-class-area} {
+    @include ct-chart-area();
+  }
+
+  .#{$ct-class-bar} {
+    @include ct-chart-bar($ct-bar-width);
+  }
+
+  .#{$ct-class-slice-donut} {
+    @include ct-chart-donut($ct-donut-width);
+  }
+
+  @if $ct-include-colored-series {
+    @for $i from 0 to length($ct-series-names) {
+      .#{$ct-class-series}-#{nth($ct-series-names, $i + 1)} {
+        $color: nth($ct-series-colors, $i + 1);
+
+        @include ct-chart-series-color($color);
+      }
+    }
+  }
+}
+
+@if $ct-include-classes {
+  @include ct-chart();
+
+  @if $ct-include-alternative-responsive-containers {
+    @for $i from 0 to length($ct-scales-names) {
+      .#{nth($ct-scales-names, $i + 1)} {
+        @include ct-responsive-svg-container($ratio: nth($ct-scales, $i + 1));
+      }
+    }
+  }
+}
+
+.ct-blue{
+    stroke: $brand-primary !important;
+}
+.ct-azure{
+    stroke: $brand-info !important;
+}
+.ct-green{
+    stroke: $brand-success !important;
+}
+.ct-orange{
+    stroke: $brand-warning !important;
+}
+.ct-red{
+    stroke: $brand-danger !important;
+}
+.ct-white{
+    stroke: $white-color !important;
+}
+.ct-rose{
+    stroke: $brand-rose !important;
+}
diff --git a/ACSmI/Billing/app/assets/stylesheets/md/_checkboxes.scss b/ACSmI/Billing/app/assets/stylesheets/md/_checkboxes.scss
new file mode 100644
index 0000000000000000000000000000000000000000..e5f15d4e0b754b79be7e63c5ea4941fe4cf6612f
--- /dev/null
+++ b/ACSmI/Billing/app/assets/stylesheets/md/_checkboxes.scss
@@ -0,0 +1,193 @@
+.form-group {
+}
+
+.checkbox {
+  label {
+    cursor: pointer;
+    padding-left: 0; // Reset for Bootstrap rule
+    color: $mdb-checkbox-label-color;
+    @include mdb-label-color-toggle-focus();
+  }
+
+  // Hide native checkbox
+  input[type=checkbox] {
+    opacity: 0;
+    position: absolute;
+    margin: 0;
+    z-index: -1;
+    width: 0;
+    height: 0;
+    overflow: hidden;
+    left: 0;
+    pointer-events: none;
+  }
+
+  .checkbox-material {
+    vertical-align: middle;
+    position: relative;
+    top: 3px;
+    padding-right: 5px;
+
+    &:before {
+      display: block;
+      position: absolute;
+      left: 0;
+      content: "";
+      background-color: rgba(0,0,0,.84);
+      height: $mdb-checkbox-size;
+      width: $mdb-checkbox-size;
+      border-radius: 100%;
+      z-index: 1;
+      opacity: 0;
+      margin: 0;
+      transform: scale3d(2.3, 2.3, 1);
+    }
+
+    .check {
+      position: relative;
+      display: inline-block;
+      width: $mdb-checkbox-size;
+      height: $mdb-checkbox-size;
+      border: 1px solid $mdb-checkbox-border-color;
+      overflow: hidden;
+      z-index: 1;
+      border-radius: $border-radius-base;
+    }
+    .check:before {
+      position: absolute;
+      content: "";
+      transform: rotate(45deg);
+      display: block;
+      margin-top: -3px;
+      margin-left: 7px;
+      width: 0;
+      height: 0;
+      background: red;
+      box-shadow:
+        0 0 0 0,
+        0 0 0 0,
+        0 0 0 0,
+        0 0 0 0,
+        0 0 0 0,
+        0 0 0 0,
+        0 0 0 0 inset;
+      animation: checkbox-off $mdb-checkbox-animation-check forwards;
+    }
+  }
+
+  input[type=checkbox] {
+
+    &:focus + .checkbox-material .check:after {
+      opacity: 0.2;
+    }
+
+    &:checked {
+
+      & + .checkbox-material .check {
+        background: $mdb-checkbox-checked-color;
+      }
+
+      & + .checkbox-material .check:before {
+        color: #FFFFFF;
+        box-shadow: 0 0 0 10px,
+          10px -10px 0 10px,
+        32px 0 0 20px,
+        0px 32px 0 20px,
+        -5px 5px 0 10px,
+          20px -12px 0 11px;
+        animation: checkbox-on $mdb-checkbox-animation-check forwards;
+      }
+
+      & + .checkbox-material:before {
+        animation: rippleOn $mdb-checkbox-animation-ripple;
+      }
+
+      & + .checkbox-material .check:after {
+        //background-color: $brand-success; // FIXME: seems like tho wrong color, test and make sure it can be removed
+        animation: rippleOn $mdb-checkbox-animation-ripple forwards; // Ripple effect on check
+      }
+    }
+
+    &:not(:checked) {
+      & + .checkbox-material:before {
+        animation: rippleOff $mdb-checkbox-animation-ripple;
+      }
+
+      & + .checkbox-material .check:after {
+        animation: rippleOff $mdb-checkbox-animation-ripple; // Ripple effect on uncheck
+
+      }
+    }
+  }
+
+  // Style for disabled inputs
+  fieldset[disabled] &,
+  fieldset[disabled] & input[type=checkbox],
+  input[type=checkbox][disabled] ~ .checkbox-material .check,
+  input[type=checkbox][disabled] + .circle {
+    opacity: 0.5;
+  }
+
+  input[type=checkbox][disabled] ~ .checkbox-material .check{
+      border-color: #000000;
+      opacity: .26;
+  }
+
+  input[type=checkbox][disabled] + .checkbox-material .check:after {
+    background-color: $mdb-text-color-primary;
+    transform: rotate(-45deg);
+  }
+}
+
+@keyframes checkbox-on {
+  0% {
+    box-shadow:
+      0 0 0 10px,
+      10px -10px 0 10px,
+      32px 0 0 20px,
+      0px 32px 0 20px,
+      -5px 5px 0 10px,
+      15px 2px 0 11px;
+  }
+  50% {
+    box-shadow:
+      0 0 0 10px,
+      10px -10px 0 10px,
+      32px 0 0 20px,
+      0px 32px 0 20px,
+      -5px 5px 0 10px,
+      20px 2px 0 11px;
+  }
+  100% {
+    box-shadow:
+      0 0 0 10px,
+      10px -10px 0 10px,
+      32px 0 0 20px,
+      0px 32px 0 20px,
+      -5px 5px 0 10px,
+      20px -12px 0 11px;
+  }
+}
+
+@keyframes rippleOn {
+  0% {
+    opacity: 0;
+  }
+  50% {
+    opacity: 0.2;
+  }
+  100% {
+    opacity: 0;
+  }
+}
+@keyframes rippleOff {
+  0% {
+    opacity: 0;
+  }
+  50% {
+    opacity: 0.2;
+  }
+  100% {
+    opacity: 0;
+  }
+}
diff --git a/ACSmI/Billing/app/assets/stylesheets/md/_colors.scss b/ACSmI/Billing/app/assets/stylesheets/md/_colors.scss
new file mode 100644
index 0000000000000000000000000000000000000000..2c1a44ebc1de17786dfe25f9871fa30ef4bafbd8
--- /dev/null
+++ b/ACSmI/Billing/app/assets/stylesheets/md/_colors.scss
@@ -0,0 +1,325 @@
+$red-50: #ffebee !default;
+$red-100: #ffcdd2 !default;
+$red-200: #ef9a9a !default;
+$red-300: #e57373 !default;
+$red-400: #ef5350 !default;
+$red-500: #f44336 !default;
+$red-600: #e53935 !default;
+$red-700: #d32f2f !default;
+$red-800: #c62828 !default;
+$red-900: #b71c1c !default;
+$red-A100: #ff8a80 !default;
+$red-A200: #ff5252 !default;
+$red-A400: #ff1744 !default;
+$red-A700: #d50000 !default;
+$red: $red-500 !default;
+
+
+$pink-50: #fce4ec !default;
+$pink-100: #f8bbd0 !default;
+$pink-200: #f48fb1 !default;
+$pink-300: #f06292 !default;
+$pink-400: #ec407a !default;
+$pink-500: #e91e63 !default;
+$pink-600: #d81b60 !default;
+$pink-700: #c2185b !default;
+$pink-800: #ad1457 !default;
+$pink-900: #880e4f !default;
+$pink-A100: #ff80ab !default;
+$pink-A200: #ff4081 !default;
+$pink-A400: #f50057 !default;
+$pink-A700: #c51162 !default;
+$pink: $pink-500 !default;
+
+
+$purple-50: #f3e5f5 !default;
+$purple-100: #e1bee7 !default;
+$purple-200: #ce93d8 !default;
+$purple-300: #ba68c8 !default;
+$purple-400: #ab47bc !default;
+$purple-500: #9c27b0 !default;
+$purple-600: #8e24aa !default;
+$purple-700: #7b1fa2 !default;
+$purple-800: #6a1b9a !default;
+$purple-900: #4a148c !default;
+$purple-A100: #ea80fc !default;
+$purple-A200: #e040fb !default;
+$purple-A400: #d500f9 !default;
+$purple-A700: #aa00ff !default;
+$purple: $purple-500 !default;
+
+
+$deep-purple-50: #ede7f6 !default;
+$deep-purple-100: #d1c4e9 !default;
+$deep-purple-200: #b39ddb !default;
+$deep-purple-300: #9575cd !default;
+$deep-purple-400: #7e57c2 !default;
+$deep-purple-500: #673ab7 !default;
+$deep-purple-600: #5e35b1 !default;
+$deep-purple-700: #512da8 !default;
+$deep-purple-800: #4527a0 !default;
+$deep-purple-900: #311b92 !default;
+$deep-purple-A100: #b388ff !default;
+$deep-purple-A200: #7c4dff !default;
+$deep-purple-A400: #651fff !default;
+$deep-purple-A700: #6200ea !default;
+$deep-purple: $deep-purple-500 !default;
+
+
+$indigo-50: #e8eaf6 !default;
+$indigo-100: #c5cae9 !default;
+$indigo-200: #9fa8da !default;
+$indigo-300: #7986cb !default;
+$indigo-400: #5c6bc0 !default;
+$indigo-500: #3f51b5 !default;
+$indigo-600: #3949ab !default;
+$indigo-700: #303f9f !default;
+$indigo-800: #283593 !default;
+$indigo-900: #1a237e !default;
+$indigo-A100: #8c9eff !default;
+$indigo-A200: #536dfe !default;
+$indigo-A400: #3d5afe !default;
+$indigo-A700: #304ffe !default;
+$indigo: $indigo-500 !default;
+
+
+$blue-50: #e3f2fd !default;
+$blue-100: #bbdefb !default;
+$blue-200: #90caf9 !default;
+$blue-300: #64b5f6 !default;
+$blue-400: #42a5f5 !default;
+$blue-500: #2196f3 !default;
+$blue-600: #1e88e5 !default;
+$blue-700: #1976d2 !default;
+$blue-800: #1565c0 !default;
+$blue-900: #0d47a1 !default;
+$blue-A100: #82b1ff !default;
+$blue-A200: #448aff !default;
+$blue-A400: #2979ff !default;
+$blue-A700: #2962ff !default;
+$blue: $blue-500 !default;
+
+
+$light-blue-50: #e1f5fe !default;
+$light-blue-100: #b3e5fc !default;
+$light-blue-200: #81d4fa !default;
+$light-blue-300: #4fc3f7 !default;
+$light-blue-400: #29b6f6 !default;
+$light-blue-500: #03a9f4 !default;
+$light-blue-600: #039be5 !default;
+$light-blue-700: #0288d1 !default;
+$light-blue-800: #0277bd !default;
+$light-blue-900: #01579b !default;
+$light-blue-A100: #80d8ff !default;
+$light-blue-A200: #40c4ff !default;
+$light-blue-A400: #00b0ff !default;
+$light-blue-A700: #0091ea !default;
+$light-blue: $light-blue-500 !default;
+
+
+$cyan-50: #e0f7fa !default;
+$cyan-100: #b2ebf2 !default;
+$cyan-200: #80deea !default;
+$cyan-300: #4dd0e1 !default;
+$cyan-400: #26c6da !default;
+$cyan-500: #00bcd4 !default;
+$cyan-600: #00acc1 !default;
+$cyan-700: #0097a7 !default;
+$cyan-800: #00838f !default;
+$cyan-900: #006064 !default;
+$cyan-A100: #84ffff !default;
+$cyan-A200: #18ffff !default;
+$cyan-A400: #00e5ff !default;
+$cyan-A700: #00b8d4 !default;
+$cyan: $cyan-500 !default;
+
+
+$teal-50: #e0f2f1 !default;
+$teal-100: #b2dfdb !default;
+$teal-200: #80cbc4 !default;
+$teal-300: #4db6ac !default;
+$teal-400: #26a69a !default;
+$teal-500: #009688 !default;
+$teal-600: #00897b !default;
+$teal-700: #00796b !default;
+$teal-800: #00695c !default;
+$teal-900: #004d40 !default;
+$teal-A100: #a7ffeb !default;
+$teal-A200: #64ffda !default;
+$teal-A400: #1de9b6 !default;
+$teal-A700: #00bfa5 !default;
+$teal: $teal-500 !default;
+
+
+$green-50: #e8f5e9 !default;
+$green-100: #c8e6c9 !default;
+$green-200: #a5d6a7 !default;
+$green-300: #81c784 !default;
+$green-400: #66bb6a !default;
+$green-500: #4caf50 !default;
+$green-600: #43a047 !default;
+$green-700: #388e3c !default;
+$green-800: #2e7d32 !default;
+$green-900: #1b5e20 !default;
+$green-A100: #b9f6ca !default;
+$green-A200: #69f0ae !default;
+$green-A400: #00e676 !default;
+$green-A700: #00c853 !default;
+$green: $green-500 !default;
+
+
+$light-green-50: #f1f8e9 !default;
+$light-green-100: #dcedc8 !default;
+$light-green-200: #c5e1a5 !default;
+$light-green-300: #aed581 !default;
+$light-green-400: #9ccc65 !default;
+$light-green-500: #8bc34a !default;
+$light-green-600: #7cb342 !default;
+$light-green-700: #689f38 !default;
+$light-green-800: #558b2f !default;
+$light-green-900: #33691e !default;
+$light-green-A100: #ccff90 !default;
+$light-green-A200: #b2ff59 !default;
+$light-green-A400: #76ff03 !default;
+$light-green-A700: #64dd17 !default;
+$light-green: $light-green-500 !default;
+
+
+$lime-50: #f9fbe7 !default;
+$lime-100: #f0f4c3 !default;
+$lime-200: #e6ee9c !default;
+$lime-300: #dce775 !default;
+$lime-400: #d4e157 !default;
+$lime-500: #cddc39 !default;
+$lime-600: #c0ca33 !default;
+$lime-700: #afb42b !default;
+$lime-800: #9e9d24 !default;
+$lime-900: #827717 !default;
+$lime-A100: #f4ff81 !default;
+$lime-A200: #eeff41 !default;
+$lime-A400: #c6ff00 !default;
+$lime-A700: #aeea00 !default;
+$lime: $lime-500 !default;
+
+
+$yellow-50: #fffde7 !default;
+$yellow-100: #fff9c4 !default;
+$yellow-200: #fff59d !default;
+$yellow-300: #fff176 !default;
+$yellow-400: #ffee58 !default;
+$yellow-500: #fec60a !default;
+$yellow-600: #fdd835 !default;
+$yellow-700: #fbc02d !default;
+$yellow-800: #f9a825 !default;
+$yellow-900: #f57f17 !default;
+$yellow-A100: #ffff8d !default;
+$yellow-A200: #ffff00 !default;
+$yellow-A400: #ffea00 !default;
+$yellow-A700: #ffd600 !default;
+$yellow: $yellow-700 !default;
+
+
+$amber-50: #fff8e1 !default;
+$amber-100: #ffecb3 !default;
+$amber-200: #ffe082 !default;
+$amber-300: #ffd54f !default;
+$amber-400: #ffca28 !default;
+$amber-500: #ffc107 !default;
+$amber-600: #ffb300 !default;
+$amber-700: #ffa000 !default;
+$amber-800: #ff8f00 !default;
+$amber-900: #ff6f00 !default;
+$amber-A100: #ffe57f !default;
+$amber-A200: #ffd740 !default;
+$amber-A400: #ffc400 !default;
+$amber-A700: #ffab00 !default;
+$amber: $amber-500 !default;
+
+
+$orange-50: #fff3e0 !default;
+$orange-100: #ffe0b2 !default;
+$orange-200: #ffcc80 !default;
+$orange-300: #ffb74d !default;
+$orange-400: #ffa726 !default;
+$orange-500: #ff9800 !default;
+$orange-600: #fb8c00 !default;
+$orange-700: #f57c00 !default;
+$orange-800: #ef6c00 !default;
+$orange-900: #e65100 !default;
+$orange-A100: #ffd180 !default;
+$orange-A200: #ffab40 !default;
+$orange-A400: #ff9100 !default;
+$orange-A700: #ff6d00 !default;
+$orange: $orange-500 !default;
+
+
+$deep-orange-50: #fbe9e7 !default;
+$deep-orange-100: #ffccbc !default;
+$deep-orange-200: #ffab91 !default;
+$deep-orange-300: #ff8a65 !default;
+$deep-orange-400: #ff7043 !default;
+$deep-orange-500: #ff5722 !default;
+$deep-orange-600: #f4511e !default;
+$deep-orange-700: #e64a19 !default;
+$deep-orange-800: #d84315 !default;
+$deep-orange-900: #bf360c !default;
+$deep-orange-A100: #ff9e80 !default;
+$deep-orange-A200: #ff6e40 !default;
+$deep-orange-A400: #ff3d00 !default;
+$deep-orange-A700: #dd2c00 !default;
+$deep-orange: $deep-orange-500 !default;
+
+
+$brown-50: #efebe9 !default;
+$brown-100: #d7ccc8 !default;
+$brown-200: #bcaaa4 !default;
+$brown-300: #a1887f !default;
+$brown-400: #8d6e63 !default;
+$brown-500: #795548 !default;
+$brown-600: #6d4c41 !default;
+$brown-700: #5d4037 !default;
+$brown-800: #4e342e !default;
+$brown-900: #3e2723 !default;
+$brown-A100: #d7ccc8 !default;
+$brown-A200: #bcaaa4 !default;
+$brown-A400: #8d6e63 !default;
+$brown-A700: #5d4037 !default;
+$brown: $brown-500 !default;
+
+
+$grey-50: #fafafa !default;
+$grey-100: #f5f5f5 !default;
+$grey-200: #eeeeee !default;
+$grey-300: #e0e0e0 !default;
+$grey-400: #bdbdbd !default;
+$grey-500: #9e9e9e;  $rgb-grey-500: "158, 158, 158" !default;
+$grey-600: #757575 !default;
+$grey-700: #616161 !default;
+$grey-800: #424242 !default;
+$grey-900: #212121 !default;
+$grey-A100: #f5f5f5 !default;
+$grey-A200: #eeeeee !default;
+$grey-A400: #bdbdbd !default;
+$grey-A700: #616161 !default;
+$grey: $grey-500 !default;
+
+
+$blue-grey-50: #eceff1 !default;
+$blue-grey-100: #cfd8dc !default;
+$blue-grey-200: #b0bec5 !default;
+$blue-grey-300: #90a4ae !default;
+$blue-grey-400: #78909c !default;
+$blue-grey-500: #607d8b !default;
+$blue-grey-600: #546e7a !default;
+$blue-grey-700: #455a64 !default;
+$blue-grey-800: #37474f !default;
+$blue-grey-900: #263238 !default;
+$blue-grey-A100: #cfd8dc !default;
+$blue-grey-A200: #b0bec5 !default;
+$blue-grey-A400: #78909c !default;
+$blue-grey-A700: #455a64 !default;
+$blue-grey: $blue-grey-500 !default;
+
+
+$black: #000000; $rgb-black: "0,0,0" !default;
+$white: #ffffff; $rgb-white: "255,255,255" !default;
diff --git a/ACSmI/Billing/app/assets/stylesheets/md/_dialogs.scss b/ACSmI/Billing/app/assets/stylesheets/md/_dialogs.scss
new file mode 100644
index 0000000000000000000000000000000000000000..050518a48ad1c4a36757b3e09f78c82a3d381456
--- /dev/null
+++ b/ACSmI/Billing/app/assets/stylesheets/md/_dialogs.scss
@@ -0,0 +1,99 @@
+// This file has been autogenerated by grunt task lessToSass. Any changes will be overwritten.
+
+//
+// Modals
+// Material Design element Dialogs
+// --------------------------------------------------
+.modal-content {
+  @include shadow-z-5();
+  border-radius: $border-radius-large;
+  border: none;
+  // Modal header
+  // Top section of the modal w/ title and dismiss
+  .modal-header {
+    border-bottom: none;
+    padding-top:    24px;
+    padding-right:  24px;
+    padding-bottom: 0;
+    padding-left:   24px;
+  }
+  // Modal body
+  // Where all modal content resides (sibling of .modal-header and .modal-footer)
+  .modal-body {
+    padding-top:    24px;
+    padding-right:  24px;
+    padding-bottom: 16px;
+    padding-left:   24px;
+  }
+  // Footer (for actions)
+  .modal-footer {
+    border-top: none;
+    padding: 7px;
+    
+    &.text-center{
+        text-align: center;
+    }
+    
+    button {
+      margin: 0;
+      padding-left: 16px;
+      padding-right: 16px;
+      width: auto;
+      &.pull-left {
+        padding-left: 5px;
+        padding-right: 5px;
+        position: relative;
+        left: -5px;
+      }
+    }
+    button+button {
+      margin-bottom: 16px;
+    }
+  }
+  .modal-body + .modal-footer {
+    padding-top: 0;
+  }
+}
+.modal-backdrop {
+  background: rgba(0,0,0,0.3);
+}
+
+.modal{
+    .modal-dialog{
+        margin-top: 100px;
+    }
+    .modal-header .close{
+        color: $gray-light;
+
+        &:hover,
+        &:focus{
+            opacity: 1;
+        }
+        
+        i{
+            font-size: 16px;
+        }
+    }
+}
+
+.modal-notice {
+    .instruction{
+         margin-bottom: 25px;
+    }
+    .picture{
+        max-width: 150px;
+    }
+
+    .modal-content{
+        .btn-raised{
+            margin-bottom: 15px;
+        }
+    }
+}
+
+.modal-small{
+    width: 300px;    
+    .modal-body{
+        margin-top: 20px;
+    }
+}
\ No newline at end of file
diff --git a/ACSmI/Billing/app/assets/stylesheets/md/_dropdown.scss b/ACSmI/Billing/app/assets/stylesheets/md/_dropdown.scss
new file mode 100644
index 0000000000000000000000000000000000000000..95166cf66df9e341f262bbe6344ed9724fa5d0d5
--- /dev/null
+++ b/ACSmI/Billing/app/assets/stylesheets/md/_dropdown.scss
@@ -0,0 +1,67 @@
+.dropdown-menu {
+    border: 0;
+    box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26);
+
+    .divider {
+        background-color: rgba(0, 0, 0, .12);
+    }
+
+
+    li > a{
+        font-size: $mdb-dropdown-font-size;
+        padding: 10px 20px;
+        margin: 0 5px;
+        border-radius: $border-radius-small;
+        @include transition($fast-transition-time, $transition-linear);
+
+        &:hover,
+        &:focus {
+          @include shadow-8dp();
+
+        }
+    }
+
+    &.dropdown-with-icons{
+        li > a{
+            padding: 12px 20px 12px 12px;
+
+            .material-icons{
+                vertical-align: middle;
+                font-size: 24px;
+                position: relative;
+                margin-top: -4px;
+                top: 1px;
+                margin-right: 12px;
+                opacity: .5;
+            }
+        }
+    }
+
+    li {
+        position: relative;
+        a:hover,
+        a:focus,
+        a:active {
+            background-color: $brand-primary;
+            color: #FFFFFF;
+        }
+    }
+
+    .divider{
+        margin: 5px 0;
+    }
+
+    .navbar &,
+    .navbar.navbar-default &{
+        li{
+            a:hover,
+            a:focus,
+            a:active {
+                background-color: $brand-primary;
+                color: #FFFFFF;
+                @include shadow-big-color($brand-primary);
+            }
+        }
+    }
+
+}
diff --git a/ACSmI/Billing/app/assets/stylesheets/md/_footers.scss b/ACSmI/Billing/app/assets/stylesheets/md/_footers.scss
new file mode 100644
index 0000000000000000000000000000000000000000..2ba1c1257e0d559db8175eee9f79cfe613d3e8c4
--- /dev/null
+++ b/ACSmI/Billing/app/assets/stylesheets/md/_footers.scss
@@ -0,0 +1,45 @@
+footer{
+    // padding: $padding-base 0;
+    border-top: 1px solid #e7e7e7;
+
+    ul{
+    margin-bottom: 0;
+    padding: 0;
+    list-style: none;
+
+        li{
+            display: inline-block;
+
+            a{
+                color: inherit;
+                padding: $padding-base;
+                font-weight: $font-weight-bold;
+                font-size: $mdb-btn-font-size-base;
+                text-transform: uppercase;
+                border-radius: $border-radius-base;
+                text-decoration: none;
+                position: relative;
+                display: block;
+
+                &:hover{
+                    text-decoration: none;
+                }
+            }
+        }
+    }
+
+    .copyright{
+        padding: 15px 0;
+        margin: 0;
+        .material-icons{
+            font-size: 18px;
+            position: relative;
+            top: 3px;
+        }
+    }
+
+    .btn{
+        margin-top: 0;
+        margin-bottom: 0;
+    }
+}
diff --git a/ACSmI/Billing/app/assets/stylesheets/md/_forms.scss b/ACSmI/Billing/app/assets/stylesheets/md/_forms.scss
new file mode 100644
index 0000000000000000000000000000000000000000..ea287134020bbc440f7fbc38a4971e4c75feb0ad
--- /dev/null
+++ b/ACSmI/Billing/app/assets/stylesheets/md/_forms.scss
@@ -0,0 +1,58 @@
+// This file has been autogenerated by grunt task lessToSass. Any changes will be overwritten.
+
+@mixin mdb-label-color-toggle-focus(){
+  // override bootstrap focus and keep all the standard color (could be multiple radios in the form group)
+  .form-group.is-focused & {
+    color: $mdb-label-color;
+
+    // on focus just darken the specific labels, do not turn them to the brand-primary
+    &:hover,
+    &:focus {
+      color: $mdb-label-color-toggle-focus;
+    }
+
+    // correct the above focus color for disabled items
+    fieldset[disabled] & {
+      color: $mdb-label-color;
+    }
+  }
+}
+
+.form-horizontal {
+
+  // Consistent vertical alignment of radios and checkboxes
+  .radio,
+  .checkbox,
+  .radio-inline,
+  .checkbox-inline {
+    padding-top: 0;
+  }
+
+  .radio {
+    margin-bottom: 10px;
+  }
+
+  label {
+    text-align: right;
+  }
+
+  label.control-label {
+    margin: 0;
+  }
+}
+
+.form-newsletter{
+    .input-group,
+    .form-group{
+        float: left;
+        width: 78%;
+        margin-right: 2%;
+        margin-top: 9px;
+    }
+
+    .btn{
+        float: left;
+        width: 20%;
+        margin: 9px 0 0;
+    }
+}
diff --git a/ACSmI/Billing/app/assets/stylesheets/md/_inputs-size.scss b/ACSmI/Billing/app/assets/stylesheets/md/_inputs-size.scss
new file mode 100644
index 0000000000000000000000000000000000000000..c86338ccf9469ab11a1f570b7b296c54080490b1
--- /dev/null
+++ b/ACSmI/Billing/app/assets/stylesheets/md/_inputs-size.scss
@@ -0,0 +1,223 @@
+// This file has been autogenerated by grunt task lessToSass. Any changes will be overwritten.
+
+//
+// Forms - sizing - material - mirrors bootstrap/forms.less with custom sizing
+//
+// LEAVE THIS IDENTICAL TO THE BOOTSTRAP FILE - DO NOT CUSTOMIZE HERE.
+//
+// NOTE: this is intentionally kept structurally _identical_ to the bootstrap/forms.less file to make it easier
+//        to identify differences in sizing approaches to form inputs.
+// --------------------------------------------------
+
+legend {
+  margin-bottom: $mdb-input-line-height-computed;
+  font-size: ($mdb-input-font-size-base * 1.5);
+}
+
+// Adjust output element
+output {
+  padding-top: ($mdb-input-padding-base-vertical + 1);
+  font-size: $mdb-input-font-size-base;
+  line-height: $mdb-input-line-height-base;
+}
+
+.form-control {
+  height: $mdb-input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)
+  padding: $mdb-input-padding-base-vertical $mdb-input-padding-base-horizontal;
+  font-size: $mdb-input-font-size-base;
+  line-height: $mdb-input-line-height-base;
+}
+
+// Special styles for iOS temporal inputs
+//
+// In Mobile Safari, setting `display: block` on temporal inputs causes the
+// text within the input to become vertically misaligned. As a workaround, we
+// set a pixel line-height that matches the given height of the input, but only
+// for Safari. See https://bugs.webkit.org/show_bug.cgi?id=139848
+//
+// Note that as of 8.3, iOS doesn't support `datetime` or `week`.
+
+@media screen and (-webkit-min-device-pixel-ratio: 0) {
+  input[type="date"],
+  input[type="time"],
+  input[type="datetime-local"],
+  input[type="month"] {
+    &.form-control {
+      line-height: $mdb-input-height-base;
+    }
+
+    &.input-sm,
+    .input-group-sm & {
+      line-height: $mdb-input-height-small;
+    }
+
+    &.input-lg,
+    .input-group-lg & {
+      line-height: $mdb-input-height-large;
+    }
+  }
+}
+
+.radio,
+.checkbox {
+
+  label {
+    min-height: $mdb-input-line-height-computed; // Ensure the input doesn't jump when there is no text
+  }
+}
+
+
+// Static form control text
+//
+// Apply class to a `p` element to make any string of text align with labels in
+// a horizontal form layout.
+
+.form-control-static {
+  // Size it appropriately next to real form controls
+  padding-top: ($mdb-input-padding-base-vertical + 1);
+  padding-bottom: ($mdb-input-padding-base-vertical + 1);
+  min-height: ($mdb-input-line-height-computed + $mdb-input-font-size-base);
+}
+
+
+// Form control sizing
+//
+// Relative text size, padding, and border-radii changes for form controls. For
+// horizontal sizing, wrap controls in the predefined grid classes. `<select>`
+// element gets special love because it's special, and that's a fact!
+
+// mixin pulled from bootstrap and altered for less/sass compatibility with sass parent hack.
+//  bootstrap-sass has this one, but we would have to then convert it back to less.  chicken meet egg.
+@mixin input-size($parent, $mdb-input-height, $padding-vertical, $padding-horizontal, $font-size, $line-height, $border-radius){
+
+  #{$parent} {
+    height: $mdb-input-height;
+    padding: $padding-vertical $padding-horizontal;
+    font-size: $font-size;
+    line-height: $line-height;
+    border-radius: $border-radius;
+  }
+
+  select#{$parent} {
+    height: $mdb-input-height;
+    line-height: $mdb-input-height;
+  }
+
+  textarea#{$parent},
+  select[multiple]#{$parent} {
+    height: auto;
+  }
+}
+
+
+
+// Form control sizing
+//
+// Build on `.form-control` with modifier classes to decrease or increase the
+// height and font-size of form controls.
+//
+// The `.form-group-* form-control` variations are sadly duplicated to avoid the
+// issue documented in https://github.com/twbs/bootstrap/issues/15074.
+.input-sm {
+  @include input-size(unquote(".input-sm"), $mdb-input-height-small, $mdb-input-padding-small-vertical, $mdb-input-padding-small-horizontal, $mdb-input-font-size-small, $mdb-input-line-height-small, $mdb-input-border-radius-small);
+}
+.form-group-sm {
+  .form-control {
+    height: $mdb-input-height-small;
+    padding: $mdb-input-padding-small-vertical $mdb-input-padding-small-horizontal;
+    font-size: $mdb-input-font-size-small;
+    line-height: $mdb-input-line-height-small;
+  }
+  select.form-control {
+    height: $mdb-input-height-small;
+    line-height: $mdb-input-height-small;
+  }
+  textarea.form-control,
+  select[multiple].form-control {
+    height: auto;
+  }
+  .form-control-static {
+    height: $mdb-input-height-small;
+    min-height: ($mdb-input-line-height-computed + $mdb-input-font-size-small);
+    padding: ($mdb-input-padding-small-vertical + 1) $mdb-input-padding-small-horizontal;
+    font-size: $mdb-input-font-size-small;
+    line-height: $mdb-input-line-height-small;
+  }
+}
+
+.input-lg {
+  @include input-size(unquote(".input-lg"), $mdb-input-height-large, $mdb-input-padding-large-vertical, $mdb-input-padding-large-horizontal, $mdb-input-font-size-large, $mdb-input-line-height-large, $mdb-input-border-radius-large);
+}
+.form-group-lg {
+  .form-control {
+    height: $mdb-input-height-large;
+    padding: $mdb-input-padding-large-vertical $mdb-input-padding-large-horizontal;
+    font-size: $mdb-input-font-size-large;
+    line-height: $mdb-input-line-height-large;
+  }
+  select.form-control {
+    height: $mdb-input-height-large;
+    line-height: $mdb-input-height-large;
+  }
+  textarea.form-control,
+  select[multiple].form-control {
+    height: auto;
+  }
+  .form-control-static {
+    height: $mdb-input-height-large;
+    min-height: ($mdb-input-line-height-computed + $mdb-input-font-size-large);
+    padding: ($mdb-input-padding-large-vertical + 1) $mdb-input-padding-large-horizontal;
+    font-size: $mdb-input-font-size-large;
+    line-height: $mdb-input-line-height-large;
+  }
+}
+
+
+.form-horizontal {
+
+  // Consistent vertical alignment of radios and checkboxes
+  //
+  // Labels also get some reset styles, but that is scoped to a media query below.
+  .radio,
+  .checkbox,
+  .radio-inline,
+  .checkbox-inline {
+    padding-top: ($mdb-input-padding-base-vertical + 1); // Default padding plus a border
+  }
+  // Account for padding we're adding to ensure the alignment and of help text
+  // and other content below items
+  .radio,
+  .checkbox {
+    min-height: ($mdb-input-line-height-computed + ($mdb-input-padding-base-vertical + 1));
+  }
+
+  // Reset spacing and right align labels, but scope to media queries so that
+  // labels on narrow viewports stack the same as a default form example.
+  @media (min-width: $screen-sm-min) {
+    .control-label {
+      padding-top: ($mdb-input-padding-base-vertical + 1); // Default padding plus a border
+    }
+  }
+
+
+  // Form group sizes
+  //
+  // Quick utility class for applying `.input-lg` and `.input-sm` styles to the
+  // inputs and labels within a `.form-group`.
+  .form-group-lg {
+    @media (min-width: $screen-sm-min) {
+      .control-label {
+        padding-top: (($mdb-input-padding-large-vertical * $mdb-input-line-height-large) + 1);
+        font-size: $mdb-input-font-size-large;
+      }
+    }
+  }
+  .form-group-sm {
+    @media (min-width: $screen-sm-min) {
+      .control-label {
+        padding-top: ($mdb-input-padding-small-vertical + 1);
+        font-size: $mdb-input-font-size-small;
+      }
+    }
+  }
+}
diff --git a/ACSmI/Billing/app/assets/stylesheets/md/_inputs.scss b/ACSmI/Billing/app/assets/stylesheets/md/_inputs.scss
new file mode 100644
index 0000000000000000000000000000000000000000..c56b21b496528c54655465bca79f3895e0ffea26
--- /dev/null
+++ b/ACSmI/Billing/app/assets/stylesheets/md/_inputs.scss
@@ -0,0 +1,400 @@
+// This file has been autogenerated by grunt task lessToSass. Any changes will be overwritten.
+
+@import '_inputs-size';
+
+// label variations
+.label {
+  border-radius: $border-radius-small;
+  @include variations(unquote(".label"), unquote(""), background-color, $grey);
+}
+
+// must be broken out for reuse - webkit selector breaks firefox
+@mixin label-static($label-top, $static-font-size, $static-line-height){
+  label.control-label {
+    top: $label-top;
+    left: 0;
+    // must repeat because the selector above is more specific than the general label sizing
+    font-size: $static-font-size;
+    line-height: $static-line-height;
+  }
+}
+
+@mixin label-size-variant($placeholder-font-size, $vertical-padding, $line-height, $static-font-size, $static-line-height, $help-block-font-size){
+  .form-control {
+    @include material-placeholder {
+      font-size: $placeholder-font-size;
+      line-height: $line-height;
+      color: $mdb-input-placeholder-color;
+      font-weight: 400;
+
+}
+    // margin-bottom must be specified to give help-block vertical space.
+    //    $see also form-group padding-bottom (and size variants) re: collapsible margins.  These work together.
+    margin-bottom: $vertical-padding;
+  }
+
+  // generic labels used anywhere in the form (not control-label)
+  .checkbox label,
+  .radio label,
+  label {
+    font-size: $placeholder-font-size;
+    line-height: $line-height;
+    color: $mdb-input-placeholder-color;
+    font-weight: 400;
+  }
+
+  // smaller focused or static size
+  label.control-label {
+    font-size: $static-font-size;
+    line-height: $static-line-height;
+    color: $mdb-input-placeholder-color;
+    font-weight: 400;
+    margin: 16px 0 0 0; // std and lg
+  }
+
+  .help-block {
+    margin-top: 0; // allow the input margin to set-off the top of the help-block
+    font-size: $help-block-font-size;
+  }
+}
+
+@mixin form-group-validation-state($name, $color){
+
+  &.#{$name} { // e.g. has-error
+    .form-control {
+      box-shadow: none;
+    }
+    &.is-focused .form-control {
+      background-image: linear-gradient($color, $color), linear-gradient($mdb-input-underline-color, $mdb-input-underline-color);
+    }
+    label.control-label,
+    .help-block {
+      color: $color;
+    }
+  }
+}
+
+@mixin form-group-size-variant($parent, $placeholder-font-size, $label-top-margin, $vertical-padding, $line-height, $label-as-placeholder-shim){
+  $static-font-size: ceil(($mdb-label-static-size-ratio * $placeholder-font-size)) !default;
+  $static-line-height: ($mdb-label-static-size-ratio * $line-height) !default;
+
+  $label-as-placeholder-top: -1 * ($vertical-padding + $label-as-placeholder-shim) !default;
+  $label-top: $label-as-placeholder-top - ($placeholder-font-size + $vertical-padding) !default;
+
+  $help-block-font-size: ceil(($mdb-help-block-size-ratio * $placeholder-font-size)) !default;
+  $help-block-line-height: ($mdb-help-block-size-ratio * $line-height) !default;
+
+  // this is outside a form-group
+  @if not $parent {
+    @include label-size-variant($placeholder-font-size, $vertical-padding, $line-height, $static-font-size, $static-line-height, $help-block-font-size);
+  }
+
+  // this is inside a form-group, may be .form-group.form-group-sm or .form-group.form-group-lg
+  @else {
+    #{$parent} {
+      @include label-size-variant($placeholder-font-size, $vertical-padding, $line-height, $static-font-size, $static-line-height, $help-block-font-size);
+
+      // form-group padding-bottom
+      //  upon collapsing margins, the largest margin is honored which collapses the form-control margin-bottom,
+      //  so the form-control margin-bottom must also be expressed as form-group padding
+      padding-bottom: $vertical-padding;
+
+      // form-group margin-top must be large enough for the label and the label's top padding since label is absolutely positioned
+      margin: ($label-top-margin + $static-font-size) 0 0 0;
+
+      // larger labels as placeholders
+      &.label-floating,
+      &.label-placeholder {
+        label.control-label {
+          top: $label-as-placeholder-top; // place the floating label to look like a placeholder with input padding
+          font-size: $placeholder-font-size;
+          line-height: $line-height;
+        }
+      }
+
+      // static, focused, or autofill floating labels
+      &.label-static,
+      &.label-floating.is-focused,
+      &.label-floating:not(.is-empty) {
+        @include label-static($label-top, $static-font-size, $static-line-height);
+      }
+      // #559 Fix for webkit/chrome autofill - rule must be separate because it breaks firefox otherwise #731
+      &.label-floating input.form-control:-webkit-autofill ~ label.control-label {
+        @include label-static($label-top, $static-font-size, $static-line-height);
+      }
+    }
+  }
+}
+
+// -----
+// Inputs
+
+.form-control,
+.form-group .form-control {
+  border: 0;
+  background-image: linear-gradient($brand-primary, $brand-primary), linear-gradient($mdb-input-underline-color, $mdb-input-underline-color);
+  background-size: 0 2px, 100% 1px;
+  background-repeat: no-repeat;
+  background-position: center bottom, center calc(100% - 1px);
+  background-color: rgba(0, 0, 0, 0);
+  transition: background 0s ease-out;
+  float: none;
+  box-shadow: none;
+  border-radius: 0;
+
+  font-weight: 400;
+
+  // Placeholders and and labels-as-placeholders should look the same
+  @include material-placeholder {
+    color: $mdb-input-placeholder-color;
+    font-weight: 400;
+}
+
+
+  //&:textarea {    // appears to be an invalid selector
+  //  height: 40px;
+  //}
+
+  &[readonly],
+  &[disabled],
+  fieldset[disabled] & {
+    background-color: rgba(0, 0, 0, 0);
+  }
+
+  &[disabled],
+  fieldset[disabled] & {
+    background-image: none;
+    border-bottom: 1px dotted $mdb-input-underline-color;
+  }
+}
+
+// -----
+// Labels with form-group signalled state
+//
+// Reference http://www.google.com/design/spec/components/text-fields.html
+// MDL implementation: http://www.getmdl.io/components/index.html#textfields-section
+//.variations(unquote(" label.control-label"), color, $mdb-input-placeholder-color);  // default label color variations
+
+.form-group {
+  position: relative;
+
+  // -----
+  // Labels with form-group signalled state
+  //
+  // Reference http://www.google.com/design/spec/components/text-fields.html
+  // MDL implementation: http://www.getmdl.io/components/index.html#textfields-section
+  &.label-static,
+  &.label-placeholder,
+  &.label-floating {
+    label.control-label {
+      position: absolute;
+      pointer-events: none;
+      transition: 0.3s ease all;
+    }
+  }
+
+  // hint to browser for optimization
+  //    TODO: evaluate effectiveness - looking for community feedback
+  &.label-floating label.control-label {
+    will-change: left, top, contents;
+  }
+
+  // hide label-placeholders when the field is not empty
+  &.label-placeholder:not(.is-empty){
+    label.control-label{
+      display: none;
+    }
+  }
+
+  // Help blocks - position: absolute approach - uses no vertical space, text wrapping - not so good.
+  .help-block {
+    position: absolute; // do not use position: absolute because width/wrapping isn't automatic and overflows occur
+    display: none;
+  }
+
+  // form-group is-focused display
+  &.is-focused {
+    .form-control {
+      outline: none;
+      background-image: linear-gradient($brand-primary, $brand-primary), linear-gradient($mdb-input-underline-color, $mdb-input-underline-color);
+      background-size: 100% 2px, 100% 1px;
+      box-shadow: none;
+      transition-duration: 0.3s;
+
+      .material-input:after {
+        background-color: $brand-primary;
+      }
+    }
+
+    &.form-info{
+        .form-control{
+             background-image: linear-gradient($brand-info, $brand-info), linear-gradient($mdb-input-underline-color, $mdb-input-underline-color);
+         }
+    }
+    &.form-success{
+        .form-control{
+             background-image: linear-gradient($brand-success, $brand-success), linear-gradient($mdb-input-underline-color, $mdb-input-underline-color);
+         }
+    }
+    &.form-warning{
+        .form-control{
+             background-image: linear-gradient($brand-warning, $brand-warning), linear-gradient($mdb-input-underline-color, $mdb-input-underline-color);
+         }
+    }
+    &.form-danger{
+        .form-control{
+             background-image: linear-gradient($brand-danger, $brand-danger), linear-gradient($mdb-input-underline-color, $mdb-input-underline-color);
+         }
+    }
+    &.form-rose{
+        .form-control{
+             background-image: linear-gradient($brand-rose, $brand-rose), linear-gradient($mdb-input-underline-color, $mdb-input-underline-color);
+         }
+    }
+    &.form-white{
+        .form-control{
+             background-image: linear-gradient($white-color, $white-color), linear-gradient($mdb-input-underline-color, $mdb-input-underline-color);
+         }
+    }
+
+    &.form-black{
+        .form-control{
+             background-image: linear-gradient($black-input-color, $black-input-color), linear-gradient($mdb-input-underline-color, $mdb-input-underline-color);
+        }
+    }
+
+    //.variations(unquote(".is-focused.label-placeholder label.control-label"), color, $mdb-input-placeholder-color);  // default label color variations
+    &.label-placeholder {
+      label,
+      label.control-label {
+        color: $mdb-input-placeholder-color;
+      }
+    }
+
+    .help-block {
+      display: block;
+    }
+  }
+
+  @include form-group-validation-state(has-warning, $brand-warning);
+  @include form-group-validation-state(has-error, $brand-danger);
+  @include form-group-validation-state(has-success, $brand-success);
+  @include form-group-validation-state(has-info, $brand-info);
+
+  textarea {
+    resize: none;
+    & ~ .form-control-highlight {
+      margin-top: -11px;
+    }
+  }
+
+  select {
+    appearance: none; // Fix for OS X
+
+    & ~ .material-input:after {
+      display: none;
+    }
+  }
+}
+
+// default floating size/location without a form-group (will skip form-group styles, and just render default sizing variation)
+@include form-group-size-variant(null, $mdb-input-font-size-base, $mdb-label-top-margin-base, $mdb-input-padding-base-vertical, $mdb-input-line-height-base, $mdb-label-as-placeholder-shim-base);
+
+// default floating size/location with a form-group (need margin etc from a default form-group)
+@include form-group-size-variant(unquote(".form-group"), $mdb-input-font-size-base, $mdb-label-top-margin-base, $mdb-input-padding-base-vertical, $mdb-input-line-height-base, $mdb-label-as-placeholder-shim-base);
+
+// sm floating size/location
+@include form-group-size-variant(unquote(".form-group.form-group-sm"), $mdb-input-font-size-small, $mdb-label-top-margin-small, $mdb-input-padding-small-vertical, $mdb-input-line-height-small, $mdb-label-as-placeholder-shim-small);
+
+// lg floating size/location
+@include form-group-size-variant(unquote(".form-group.form-group-lg"), $mdb-input-font-size-large, $mdb-label-top-margin-large, $mdb-input-padding-large-vertical, $mdb-input-line-height-large, $mdb-label-as-placeholder-shim-large);
+
+
+select.form-control {
+
+  border: 0;
+  box-shadow: none;
+  border-radius: 0;
+
+  .form-group.is-focused & {
+    box-shadow: none;
+    border-color: $mdb-input-underline-color;
+  }
+
+  &[multiple] {
+    &,
+    .form-group.is-focused & {
+      height: 85px;
+    }
+  }
+}
+
+@mixin input-group-button-variation($vertical-padding){
+  .input-group-btn {
+    .btn {
+      margin: 0 0 $vertical-padding 0;
+    }
+  }
+}
+
+// ----------------
+// input group/addon related styles
+
+// default margin - no form-group required
+@include input-group-button-variation($mdb-input-padding-base-vertical);
+
+.form-group {
+  //.form-control {
+  //  float: none;
+  //}
+
+  // sm margin
+  &.form-group-sm {
+    @include input-group-button-variation($mdb-input-padding-small-vertical);
+  }
+
+  // lg margin
+  &.form-group-lg {
+    @include input-group-button-variation($mdb-input-padding-large-vertical);
+  }
+}
+
+.input-group {  // may be in or outside of form-group
+  .input-group-btn {
+    padding: 0 12px; // match addon spacing
+  }
+
+  .input-group-addon {
+    border: 0;
+    background: transparent;
+    padding: 6px 15px 0px;
+  }
+}
+
+// Input files - hide actual input - requires specific markup in the sample.
+.form-group input[type=file] {
+  opacity: 0;
+  position: absolute;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  z-index: 100;
+}
+
+
+.form-control-feedback{
+    opacity: 0;
+
+    .has-success &{
+        color: $green;
+        opacity: 1;
+    }
+
+    .has-error &{
+        color: $red;
+        opacity: 1;
+    }
+}
diff --git a/ACSmI/Billing/app/assets/stylesheets/md/_misc.scss b/ACSmI/Billing/app/assets/stylesheets/md/_misc.scss
new file mode 100644
index 0000000000000000000000000000000000000000..4982166e51bc7c1c47d473f00ff23ba788cc5747
--- /dev/null
+++ b/ACSmI/Billing/app/assets/stylesheets/md/_misc.scss
@@ -0,0 +1,189 @@
+
+.loader {
+    margin: 0 auto;
+    width: 60px;
+    position: absolute;
+    display: block;
+    left: 0;
+    right: 0;
+    z-index: 1;
+    @include transform-translate-y(-50%);
+    text-align: center;
+    top: 50%;
+
+    &:before {
+        content: '';
+        display: block;
+        padding-top: 100%;
+    }
+}
+
+.circular {
+  animation: rotate 2s linear infinite;
+  height: 100%;
+  transform-origin: center center;
+  width: 100%;
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  margin: auto;
+}
+
+.path {
+  stroke-dasharray: 1, 200;
+  stroke-dashoffset: 0;
+  animation: dash 1.5s ease-in-out infinite, color 2s ease-in-out infinite;
+  stroke-linecap: round;
+}
+
+@keyframes rotate {
+  100% {
+    transform: rotate(360deg);
+  }
+}
+
+@keyframes dash {
+  0% {
+    stroke-dasharray: 1, 200;
+    stroke-dashoffset: 0;
+  }
+  50% {
+    stroke-dasharray: 89, 200;
+    stroke-dashoffset: -35px;
+  }
+  100% {
+    stroke-dasharray: 89, 200;
+    stroke-dashoffset: -124px;
+  }
+}
+
+@keyframes color {
+  100%,
+  0% {
+    stroke: $brand-primary;
+  }
+  50% {
+    stroke: $brand-warning;
+  }
+  100% {
+    stroke: $brand-primary;
+  }
+}
+body {
+  background-color: #EEEEEE;
+  // background: #fdfdfe;
+  color: $black-color;
+  min-height: 100vh;
+  &.inverse {
+    background: #333333;
+    &, .form-control {
+      color: $mdb-text-color-light;
+    }
+    .modal,
+    .panel-default,
+    .card {
+      &,
+      .form-control {
+        background-color: initial;
+        color: initial;
+      }
+    }
+
+  }
+}
+
+.wrapper{
+
+    &.wrapper-full-page{
+        height: auto;
+        min-height: 100vh;
+    }
+}
+
+
+blockquote{
+    p{
+        font-style: italic;
+    }
+}
+
+.life-of-material-dashboard{
+    background: #FFFFFF;
+}
+
+body, h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4 {
+  font-family: $font-family-sans-serif;
+  font-weight: 300;
+  line-height: 1.5em;
+}
+
+.serif-font{
+    font-family: $font-family-serif;
+}
+
+.page-header {
+    height: 60vh;
+    background-position: center center;
+    background-size: cover;
+    margin: 0;
+    padding: 0;
+    border: 0;
+    border-bottom-left-radius: 6px;
+    border-bottom-right-radius: 6px;
+}
+
+a{
+  color: $link-color;
+  &:hover,
+  &:focus{
+      color: darken($link-color, 5%);
+      text-decoration: none;
+  }
+
+  &.text-info{
+      &:hover, &:focus{
+          color: darken($brand-info, 5%);
+      }
+  }
+
+  & .material-icons {
+    vertical-align: middle;
+  }
+}
+
+/*           Animations              */
+.animation-transition-general{
+    @include transition($general-transition-time, $transition-linear);
+}
+
+.animation-transition-slow{
+    @include transition($slow-transition-time, $transition-linear);
+}
+
+.animation-transition-fast{
+    @include transition($fast-transition-time, $transition-ease);
+}
+legend {
+  border-bottom: 0;
+}
+
+// Prevent highlight on mobile
+* {
+  -webkit-tap-highlight-color: rgba(255, 255, 255, 0);
+  -webkit-tap-highlight-color: transparent;
+  &:focus {
+    outline: 0;
+  }
+}
+a:focus, a:active,
+button:active, button:focus, button:hover,
+button::-moz-focus-inner,
+input[type="reset"]::-moz-focus-inner,
+input[type="button"]::-moz-focus-inner,
+input[type="submit"]::-moz-focus-inner,
+select::-moz-focus-inner,
+input[type="file"] > input[type="button"]::-moz-focus-inner {
+    outline : 0 !important;
+}
diff --git a/ACSmI/Billing/app/assets/stylesheets/md/_mixins.scss b/ACSmI/Billing/app/assets/stylesheets/md/_mixins.scss
new file mode 100644
index 0000000000000000000000000000000000000000..3ca5a71d9c5954c619835da60f610e05cccf46eb
--- /dev/null
+++ b/ACSmI/Billing/app/assets/stylesheets/md/_mixins.scss
@@ -0,0 +1,422 @@
+//Utilities
+
+@import "mixins/transparency";
+@import "mixins/vendor-prefixes";
+@import "mixins/chartist";
+
+// Placeholder text
+@mixin material-placeholder() {
+  &::-moz-placeholder {@content; } // Firefox
+  &:-ms-input-placeholder {@content; } // Internet Explorer 10+
+  &::-webkit-input-placeholder  {@content; } // Safari and Chrome
+}
+
+
+// variations(unquote(""), background-color, #FFF);
+@mixin variations($component, $selector-suffix, $mdb-param-1, $color-default) {
+  @include generic-variations($component, $selector-suffix, $color-default, "variations-content", $mdb-param-1);
+}
+
+@mixin variations-content($args) {
+  //@debug "#{map-get($args, mixin-name)}{ #{map-get($args, material-param-1)}: #{map-get($args, variation-color)}; }";
+  //@debug "#{inspect($args)}";
+  //@error "break here";
+  #{map-get($args, material-param-1)}: map-get($args, variation-color);
+}
+
+@mixin background-variations($component, $selector-suffix, $color-default) {
+  @include generic-variations($component, $selector-suffix, $color-default, "background-variations-content", null);
+}
+
+@mixin background-variations-content($args) {
+  background-color: map-get($args, variation-color);
+  @if (map-get($args, variation-color) == $mdb-btn-background-color) {
+    color: $mdb-text-color-primary;
+  } @else {
+    color: map-get($args, variation-color-text);
+
+  }
+}
+
+//@mixin text-variations($component, $selector-suffix, $color-default) {
+//  @include generic-variations($component, $selector-suffix, $color-default, "text-variations-content", null);
+//}
+//
+//@mixin text-variations-content($args) {
+//  color: map-get($args, variation-color);
+//}
+
+@mixin button-variations($component, $selector-suffix, $color-default) {
+  @include generic-variations($component, $selector-suffix, $color-default, "button-variations-content", 4%);
+}
+
+@mixin button-variations-content($args) {
+  //@debug "#{inspect($args)}";
+  $variation-color: map-get($args, variation-color);
+  $mdb-param-1: map-get($args, material-param-1);
+  background-color: contrast-color($variation-color,
+          darken($variation-color, $mdb-param-1),
+          lighten($variation-color, $mdb-param-1));
+}
+
+// navbar-variations(" label input[type=checkbox]:checked + .toggle:active:after", $brand-primary
+@mixin navbar-variations($component, $selector-suffix, $color-default) {
+  @include generic-variations($component, $selector-suffix, $color-default, "navbar-variations-content", null);
+}
+
+@mixin navbar-variations-content($args){
+  $variation-color: map-get($args, variation-color);
+  $variation-color-text: map-get($args, variation-color-text);
+
+  background-color: $variation-color;
+  color: $variation-color-text;
+  // deeply defined to override welljumbo class without !impotant need
+  .navbar-form .form-group input.form-control,
+  .navbar-form input.form-control {
+    @include material-placeholder {
+      color: $variation-color-text;
+    }
+  }
+  .dropdown-menu {
+    border-radius: $border-radius-base !important;
+    li > a {
+      &:hover,
+      &:focus {
+        color: $white-color;
+        background-color: $variation-color;
+        @include shadow-big-color($variation-color);
+      }
+    }
+
+    .active > a {
+      &:hover,
+      &:focus {
+        color: $variation-color-text;
+      }
+      background-color: $variation-color;
+      color: $variation-color-text;
+      @include shadow-big-color($variation-color);
+    }
+  }
+}
+
+// alert-variations("", $brand-primary)
+@mixin alert-variations($component, $selector-suffix, $color-default) {
+  @include generic-variations($component, $selector-suffix, $color-default, "alert-variations-content", null);
+}
+
+@mixin alert-variations-content($args){
+  $variation-color: map-get($args, variation-color);
+  $variation-color-text: map-get($args, variation-color-text);
+
+  background-color: lighten($variation-color,5%);
+  color: $variation-color-text;
+  border-radius: $border-radius-base;
+
+  @include shadow-big-color($variation-color);
+
+  a, .alert-link {
+    color: $variation-color-text;
+  }
+}
+
+// interpolation of mixin-name is not allowed evidently, so we statically include based on the mixin-name given
+@mixin call-variations-content-mixin($args) {
+  $mixin-name: map-get($args, mixin-name);
+  @if $mixin-name == variations-content {
+    @include variations-content($args);
+  } @else if $mixin-name == background-variations-content {
+    @include background-variations-content($args);
+  } @else if $mixin-name == text-variations-content {
+    @include text-variations-content($args);
+  } @else if $mixin-name == button-variations-content {
+    @include button-variations-content($args);
+  } @else if $mixin-name == bg-color-variations-content {
+    @include bg-color-variations-content($args);
+  } @else if $mixin-name == bg-box-shadow-variations-content {
+    @include bg-box-shadow-variations-content($args);
+  } @else if $mixin-name == bg-img-variations-content {
+    @include bg-img-variations-content($args);
+  } @else if $mixin-name == navbar-variations-content {
+    @include navbar-variations-content($args);
+  }@else if $mixin-name == alert-variations-content {
+    @include alert-variations-content($args);
+  } @else {
+    @error "Unknown mixin: #{$mixin-name}"
+  }
+}
+
+//
+// To use this mixin you should pass a function as final parameter to define
+// the style. In that definition you can use the following variables to define it.
+//
+// $variation-color-name ---> "red", "green", "indigo" ...
+// $variation-color-full-name ---> "red", "green-50", "indigo-400" ...
+// $variation-color ---> #f44336, #e8f5e9, #5c6bc0 ...
+// $variation-color-text ---> rgba(255,255,255,0.84), rgba(0,0,0,0.84), rgba(255,255,255,0.84) ...
+//
+
+@mixin generic-variations($component, $selector-suffix, $color-default, $mixin-name, $mdb-param-1) {
+
+  //setup map to pass parameters (instead of the incredibly long-error-prone list for each and every @include)
+  $args: (
+          //extra: $selector-suffix,
+          //default: $color-default,
+          mixin-name: $mixin-name,
+          material-param-1: $mdb-param-1
+  );
+
+  // bootstrap styles
+  &#{$selector-suffix},
+  &#{$component}-default#{$selector-suffix} {
+
+    $args-extra: map-merge($args, (
+            variation-color: $white-color,
+            variation-color-text: $gray
+    ));
+    @include call-variations-content-mixin($args-extra);
+  }
+  &#{$component}-inverse#{$selector-suffix} {
+    $args-inverse: map-merge($args, (
+            variation-color: #212121,
+            variation-color-text: #fff
+    ));
+    @include call-variations-content-mixin($args-inverse);
+  }
+  &#{$component}-primary#{$selector-suffix} {
+    $args-primary: map-merge($args, (
+            variation-color: $brand-primary,
+            variation-color-text: $mdb-text-color-light
+    ));
+    @include call-variations-content-mixin($args-primary);
+  }
+  &#{$component}-success#{$selector-suffix} {
+    $args-success: map-merge($args, (
+            variation-color: $brand-success,
+            variation-color-text: $mdb-text-color-light
+    ));
+    @include call-variations-content-mixin($args-success);
+  }
+  &#{$component}-info#{$selector-suffix} {
+    $args-info: map-merge($args, (
+            variation-color: $brand-info,
+            variation-color-text: $mdb-text-color-light
+    ));
+    @include call-variations-content-mixin($args-info);
+  }
+  &#{$component}-warning#{$selector-suffix} {
+    $args-warning: map-merge($args, (
+            variation-color: $brand-warning,
+            variation-color-text: $mdb-text-color-light
+    ));
+    @include call-variations-content-mixin($args-warning);
+  }
+  &#{$component}-danger#{$selector-suffix} {
+    $args-danger: map-merge($args, (
+            variation-color: $brand-danger,
+            variation-color-text: $mdb-text-color-light
+    ));
+    @include call-variations-content-mixin($args-danger);
+  }
+
+  &#{$component}-rose#{$selector-suffix} {
+    $args-rose: map-merge($args, (
+            variation-color: $brand-rose,
+            variation-color-text: $mdb-text-color-light
+    ));
+    @include call-variations-content-mixin($args-rose);
+  }
+
+}
+
+@mixin transition($time, $type){
+    -webkit-transition: all $time $type;
+    -moz-transition: all $time $type;
+    -o-transition: all $time $type;
+    -ms-transition: all $time $type;
+    transition: all $time $type;
+}
+
+@mixin transform-scale($value){
+     -webkit-transform: scale($value);
+        -moz-transform: scale($value);
+        -o-transform: scale($value);
+        -ms-transform: scale($value);
+        transform: scale($value);
+}
+
+@mixin transform-translate-x($value){
+     -webkit-transform:  translate3d($value, 0, 0);
+        -moz-transform: translate3d($value, 0, 0);
+        -o-transform: translate3d($value, 0, 0);
+        -ms-transform: translate3d($value, 0, 0);
+        transform: translate3d($value, 0, 0);
+}
+
+@mixin transform-translate-y($value){
+     -webkit-transform:  translate3d(0,$value, 0);
+        -moz-transform: translate3d(0, $value, 0);
+        -o-transform: translate3d(0, $value, 0);
+        -ms-transform: translate3d(0, $value, 0);
+        transform: translate3d(0, $value, 0);
+}
+
+@mixin transform-origin($coordinates){
+      -webkit-transform-origin: $coordinates;
+        -moz-transform-origin: $coordinates;
+        -o-transform-origin: $coordinates;
+        -ms-transform-origin: $coordinates;
+        transform-origin: $coordinates;
+}
+
+@mixin black-filter(){
+    background: rgba(0,0,0,.55);
+    position: absolute;
+    width: 100%;
+    height: 100%;
+    content: "";
+    z-index: 0;
+    left: 0;
+    top: 0;
+}
+
+@mixin radial-gradient($extern-color, $center-color){
+    background: $extern-color;
+    background: -moz-radial-gradient(center, ellipse cover, $center-color 0%, $extern-color 100%); /* FF3.6+ */
+    background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%,$center-color), color-stop(100%,$extern-color)); /* Chrome,Safari4+ */
+    background: -webkit-radial-gradient(center, ellipse cover, $center-color 0%,$extern-color 100%); /* Chrome10+,Safari5.1+ */
+    background: -o-radial-gradient(center, ellipse cover, $center-color 0%,$extern-color 100%); /* Opera 12+ */
+    background: -ms-radial-gradient(center, ellipse cover, $center-color 0%,$extern-color 100%); /* IE10+ */
+    background: radial-gradient(ellipse at center, $center-color 0%,$extern-color 100%); /* W3C */
+    background-size: 550% 450%;
+}
+
+@mixin tag-color ($color){
+    .tag{
+         background-color: $color;
+         color: $white-color;
+         .tagsinput-remove-link{
+             color: $white-color;
+         }
+     }
+     .tagsinput-add{
+         color: $color;
+     }
+}
+@mixin create-colored-tags(){
+    &.tag-primary{
+        @include tag-color($brand-primary);
+    }
+    &.tag-info {
+        @include tag-color($brand-info);
+    }
+    &.tag-success{
+        @include tag-color($brand-success);
+    }
+    &.tag-warning{
+        @include tag-color($brand-warning);
+    }
+    &.tag-danger{
+        @include tag-color($brand-danger);
+    }
+    &.tag-rose{
+      @include tag-color($brand-rose);
+    }
+}
+
+@mixin rotate-180(){
+    filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
+    -webkit-transform: rotate(180deg);
+    -ms-transform: rotate(180deg);
+    transform: rotate(180deg);
+}
+
+@mixin linear-gradient($color1, $color2){
+    background: $color1; /* For browsers that do not support gradients */
+    background: -webkit-linear-gradient(60deg, $color1 , $color2); /* For Safari 5.1 to 6.0 */
+    background: -o-linear-gradient(60deg, $color1, $color2); /* For Opera 11.1 to 12.0 */
+    background: -moz-linear-gradient(60deg, $color1, $color2); /* For Firefox 3.6 to 15 */
+    background: linear-gradient(60deg, $color1 , $color2); /* Standard syntax */
+}
+
+
+
+// Mixins for buttons
+
+@mixin btn-styles($btn-color) {
+
+    // remove this line if you want black shadows
+    @include shadow-2dp-color($btn-color);
+
+    &,
+    &:hover,
+    &:focus,
+    &:active,
+    &.active,
+    &:active:focus,
+    &:active:hover,
+    &.active:focus,
+    &.active:hover,
+    .open > &.dropdown-toggle,
+    .open > &.dropdown-toggle:focus,
+    .open > &.dropdown-toggle:hover {
+      background-color: $btn-color;
+      color: $white-color;
+    }
+
+    &:focus,
+    &:active,
+    &:hover{
+      // remove this line if you want black shadows
+      @include button-shadow-color($btn-color);
+    }
+
+  &.disabled,
+  &:disabled,
+  &[disabled],
+  fieldset[disabled] & {
+    &,
+    &:hover,
+    &:focus,
+    &.focus,
+    &:active,
+    &.active {
+        box-shadow: none;
+    }
+  }
+
+  &.btn-simple{
+      background-color: transparent;
+      color: $btn-color;
+      box-shadow: none;
+
+      &:hover,
+      &:focus,
+      &:active{
+          background-color: transparent;
+          color: $btn-color;
+      }
+  }
+
+}
+
+// for social buttons
+@mixin social-buttons-color ($color){
+    background-color: $color;
+    color: #fff;
+    @include shadow-2dp-color($color);
+
+    &:focus,
+    &:active,
+    &:hover{
+        background-color: $color;
+        color: #fff;
+        @include button-shadow-color($color);
+    }
+
+    &.btn-simple{
+        color: $color;
+        background-color: transparent;
+        box-shadow: none;
+    }
+}
diff --git a/ACSmI/Billing/app/assets/stylesheets/md/_navbars.scss b/ACSmI/Billing/app/assets/stylesheets/md/_navbars.scss
new file mode 100644
index 0000000000000000000000000000000000000000..74f8f55368fa4a1273d02c04b69d42da65f7f599
--- /dev/null
+++ b/ACSmI/Billing/app/assets/stylesheets/md/_navbars.scss
@@ -0,0 +1,334 @@
+// This file has been autogenerated by grunt task lessToSass. Any changes will be overwritten.
+
+.navbar {
+//   background-color: $brand-primary;
+  border: 0;
+  border-radius: $border-radius-base;
+  // @include shadow-big-navbar();
+
+  border-bottom: 1px solid #ededf3;
+  @extend .animation-transition-fast;
+
+  padding: 10px 0;
+
+  .navbar-brand {
+    position: relative;
+    height: 50px;
+    line-height: 30px;
+    color: inherit;
+    padding: 10px 15px;
+
+    &:hover,
+    &:focus {
+      color: inherit;
+      background-color: transparent;
+    }
+  }
+
+  .notification{
+    position: absolute;
+    top: 5px;
+    border: 1px solid #FFF;
+    right: 10px;
+    font-size: 9px;
+    background: #f44336;
+    color: #FFFFFF;
+    min-width: 20px;
+    padding: 0px 5px;
+    height: 20px;
+    border-radius: 10px;
+    text-align: center;
+    line-height: 19px;
+    vertical-align: middle;
+    display: block;
+  }
+
+
+
+  .navbar-text {
+    color: inherit;
+    margin-top: 15px;
+    margin-bottom: 15px;
+  }
+
+  .navbar-nav {
+    > li > a {
+      color: inherit;
+      padding-top: 15px;
+      padding-bottom: 15px;
+
+      font-weight: $font-weight-default;
+      font-size: $mdb-btn-font-size-base;
+      text-transform: uppercase;
+
+      border-radius: $border-radius-base;
+
+      &:hover,
+      &:focus {
+        color: inherit;
+        background-color: transparent;
+      }
+
+
+      .material-icons,
+      .fa{
+            font-size: 20px;
+      }
+
+      &.btn:not(.btn-just-icon){
+          .fa{
+            position: relative;
+            top: 2px;
+            margin-top: -4px;
+            margin-right: 4px;
+          }
+      }
+    }
+
+    > li > .dropdown-menu{
+        margin-top: -20px;
+    }
+
+    > li.open > .dropdown-menu{
+        margin-top: 0;
+    }
+
+    > .active > a {
+      &,
+      &:hover,
+      &:focus {
+        color: inherit;
+        background-color: rgba(255, 255, 255, 0.1);
+      }
+    }
+    > .disabled > a {
+      &,
+      &:hover,
+      &:focus {
+        color: inherit;
+        background-color: transparent;
+        opacity: 0.9;
+      }
+    }
+    .profile-photo{
+        padding: 0 5px 0;
+        .profile-photo-small{
+            height: 40px;
+            width: 40px;
+        }
+    }
+
+  }
+
+  // Darken the responsive nav toggle
+  .navbar-toggle {
+    border: 0;
+    &:hover,
+    &:focus {
+      background-color: transparent;
+    }
+    .icon-bar {
+      background-color: inherit;
+      border: 1px solid;
+    }
+  }
+
+  .navbar-default .navbar-toggle,
+  .navbar-inverse .navbar-toggle {
+    border-color: transparent;
+  }
+
+  .navbar-collapse,
+  .navbar-form {
+    border-top: none;
+    box-shadow: none;
+  }
+
+  // Dropdowns
+  .navbar-nav {
+    > .open > a {
+      &,
+      &:hover,
+      &:focus {
+        background-color: transparent;
+        color: inherit;
+      }
+    }
+
+    @media (max-width: $grid-float-breakpoint-max) {
+      .navbar-text {
+        color: inherit;
+        margin-top: 15px;
+        margin-bottom: 15px;
+      }
+
+      // Dropdowns get custom display
+      .open .dropdown-menu {
+        > .dropdown-header {
+          border: 0;
+          color: inherit;
+        }
+        .divider {
+          border-bottom: 1px solid;
+          opacity: 0.08;
+        }
+        > li > a {
+          color: inherit;
+          &:hover,
+          &:focus {
+            color: inherit;
+            background-color: transparent;
+          }
+        }
+        > .active > a {
+          &,
+          &:hover,
+          &:focus {
+            color: inherit;
+            background-color: transparent;
+          }
+        }
+        > .disabled > a {
+          &,
+          &:hover,
+          &:focus {
+            color: inherit;
+            background-color: transparent;
+          }
+        }
+      }
+    }
+  }
+
+  &.navbar-default{
+      .logo-container .brand{
+          color: $gray;
+      }
+  }
+
+  .navbar-link {
+    color: inherit;
+    &:hover {
+      color: inherit;
+    }
+  }
+
+  .btn{
+      margin-top: 0;
+      margin-bottom: 0;
+  }
+  .btn-link {
+    color: inherit;
+    &:hover,
+    &:focus {
+      color: inherit;
+    }
+    &[disabled],
+    fieldset[disabled] & {
+      &:hover,
+      &:focus {
+        color: inherit;
+      }
+    }
+  }
+
+  .navbar-form {
+    margin: 4px 0 0;
+    .form-group {
+      margin: 0;
+      padding: 0;
+
+      .material-input:before,
+      &.is-focused .material-input:after {
+        background-color: inherit;
+      }
+    }
+
+    .form-group .form-control,
+    .form-control {
+      border-color: inherit;
+      color: inherit;
+      padding: 0;
+      margin: 0;
+
+      // re-normalize inputs in a navbar the size of standard bootstrap since our normal inputs are larger by spec than bootstrap
+      //---
+      //height: $mdb-input-height-base;
+      $bs-line-height-base: 1.428571429 !default;
+      $bs-line-height-computed:    floor(($font-size-base * $bs-line-height-base)) !default; // ~20px
+      height: ($bs-line-height-computed + 8px);
+      font-size: $font-size-base;
+      line-height: $bs-line-height-base;
+      //---
+    }
+  }
+
+  // SASS conversion note: please mirror any content change in _mixins-shared.scss navbar-variations-content
+  @include navbar-variations(unquote(".navbar"), unquote(""), $brand-primary);
+
+
+  &-inverse {
+    background-color: $indigo;
+  }
+
+  &.navbar-transparent{
+      background-color: transparent;
+      box-shadow: none;
+      border-bottom: 0;
+
+      .logo-container .brand{
+          color: $white-color;
+      }
+  }
+  &-fixed-top{
+      border-radius: 0;
+  }
+  @media (max-width: $screen-md-max) {
+
+    .navbar-brand {
+      height: 50px;
+      padding: 10px 15px;
+    }
+/*
+    .navbar-form {
+      margin-top: 10px;
+    }
+*/
+
+    .navbar-nav > li > a {
+      padding-top: 15px;
+      padding-bottom: 15px;
+    }
+  }
+
+    .alert{
+        border-radius: 0;
+        left: 0;
+        position: absolute;
+        right: 0;
+        top: 85px;
+        width: 100%;
+        z-index: 3;
+        transition: all 0.3s;
+    }
+
+}
+
+.nav-align-center{
+    text-align: center;
+
+    .nav-pills{
+        display: inline-block;
+    }
+}
+.navbar-absolute{
+    position: absolute;
+    width: 100%;
+    padding-top: 10px;
+    z-index: 1029;
+}
+@media (max-width: 991px) {
+    .nav-container{
+        position: relative;
+    }
+}
diff --git a/ACSmI/Billing/app/assets/stylesheets/md/_pills.scss b/ACSmI/Billing/app/assets/stylesheets/md/_pills.scss
new file mode 100644
index 0000000000000000000000000000000000000000..b9a9926f33c1eab4fdb13ad293fcca3f60c77e9c
--- /dev/null
+++ b/ACSmI/Billing/app/assets/stylesheets/md/_pills.scss
@@ -0,0 +1,117 @@
+.nav-pills{
+
+    .section-dark &,
+    .section-image &{
+        > li > a{
+            color: $gray-color;
+        }
+        > li{
+            > a:hover,
+            > a:focus{
+                background-color: #EEEEEE;
+            }
+        }
+    }
+
+    > li {
+        > a{
+            line-height: $mdb-btn-font-size-base * 2;
+            text-transform: uppercase;
+            font-size: $mdb-btn-font-size-base;
+            font-weight: $font-weight-bold;
+            min-width: 100px;
+            text-align: center;
+            color: $gray;
+            transition: all .3s;
+
+            &:hover{
+                background-color: rgba(200, 200, 200, 0.2);
+            }
+        }
+
+        i{
+            display: block;
+            font-size: 30px;
+            padding: 15px 0;
+        }
+
+        &.active > a{
+            &,
+            &:focus,
+            &:hover{
+                background-color: $brand-primary;
+                color: $white-color;
+                @include shadow-big-color($brand-primary);
+            }
+        }
+
+    }
+
+    &:not(.nav-pills-icons){
+        > li > a{
+            border-radius: $border-radius-extreme;
+        }
+    }
+
+    &.nav-stacked{
+        > li + li{
+            margin-top: 5px;
+        }
+    }
+
+    &.nav-pills-info{
+        > li {
+            &.active > a{
+                &,
+                &:focus,
+                &:hover{
+                    background-color: $brand-info;
+                    @include shadow-big-color($brand-info);
+                }
+            }
+        }
+    }
+
+    &.nav-pills-success{
+        > li {
+            &.active > a{
+                &,
+                &:focus,
+                &:hover{
+                    background-color: $brand-success;
+                    @include shadow-big-color($brand-success);
+                }
+            }
+        }
+    }
+
+    &.nav-pills-warning{
+        > li {
+            &.active > a{
+                &,
+                &:focus,
+                &:hover{
+                    background-color: $brand-warning;
+                    @include shadow-big-color($brand-warning);
+                }
+            }
+        }
+    }
+
+    &.nav-pills-danger{
+        > li {
+            &.active > a{
+                &,
+                &:focus,
+                &:hover{
+                    background-color: $brand-danger;
+                    @include shadow-big-color($brand-warning);
+                }
+            }
+        }
+    }
+    
+}
+.tab-space{
+    padding: 20px 0 50px 0px;
+}
diff --git a/ACSmI/Billing/app/assets/stylesheets/md/_popups.scss b/ACSmI/Billing/app/assets/stylesheets/md/_popups.scss
new file mode 100644
index 0000000000000000000000000000000000000000..a73ea0ee9e10320af5357341bc7edb9797323caf
--- /dev/null
+++ b/ACSmI/Billing/app/assets/stylesheets/md/_popups.scss
@@ -0,0 +1,77 @@
+// This file has been autogenerated by grunt task lessToSass. Any changes will be overwritten.
+
+.popover, .tooltip-inner {
+    color: $gray;
+    line-height: 1.5em;
+    background: $white-color;
+    border: none;
+    border-radius: $border-radius-base;
+    @include shadow-8dp();
+}
+
+.popover{
+    padding: 0;
+    @include shadow-16dp();
+
+    &.left,
+    &.right,
+    &.top,
+    &.bottom{
+        > .arrow{
+            border: none;
+        }
+    }
+}
+
+.popover-title{
+    background-color: $white-color;
+    border: none;
+    padding: 15px 15px 5px;
+    font-size: $font-size-h4;
+}
+
+.popover-content{
+    padding: 10px 15px 15px;
+    line-height: 1.4;
+}
+
+.tooltip, .tooltip.in {
+  //opacity: 1;
+}
+.tooltip.in{
+    opacity: 1;
+    @include transform-translate-y(0px);
+
+
+}
+.tooltip{
+    opacity: 0;
+    transition: opacity, transform .2s ease;
+    @include transform-translate-y(5px);
+
+    &.left{
+        .tooltip-arrow{
+            border-left-color: $white-color;
+        }
+    }
+    &.right{
+        .tooltip-arrow{
+            border-right-color: $white-color;
+        }
+    }
+    &.top{
+        .tooltip-arrow{
+            border-top-color: $white-color;
+        }
+    }
+    &.bottom{
+        .tooltip-arrow{
+            border-bottom-color: $white-color;
+        }
+    }
+}
+
+.tooltip-inner{
+    padding: 10px 15px;
+    min-width: 130px;
+}
diff --git a/ACSmI/Billing/app/assets/stylesheets/md/_radios.scss b/ACSmI/Billing/app/assets/stylesheets/md/_radios.scss
new file mode 100644
index 0000000000000000000000000000000000000000..38ae3b6cd218c221fca2f7c20b0aeaea582e4ada
--- /dev/null
+++ b/ACSmI/Billing/app/assets/stylesheets/md/_radios.scss
@@ -0,0 +1,114 @@
+// This file has been autogenerated by grunt task lessToSass. Any changes will be overwritten.
+
+@mixin radio-color($color, $opacity){
+  & ~ .check,
+  & ~ .circle {
+    opacity: $opacity;
+  }
+
+  & ~ .check {
+    background-color: $color;
+  }
+
+  & ~ .circle {
+    border-color: $color;
+  }
+}
+
+.radio {
+  label {
+    cursor: pointer;
+    padding-left: 35px;
+    position: relative;
+    color: $mdb-radio-label-color;
+    @include mdb-label-color-toggle-focus();
+
+    span {
+      display: block;
+      position: absolute;
+      left: 10px;
+      top: 2px;
+      transition-duration: 0.2s;
+    }
+    .circle {
+      border: 1px solid $mdb-radio-color-off;
+      height: 15px;
+      width: 15px;
+      border-radius: 100%;
+    }
+    .check {
+      height: 15px;
+      width: 15px;
+      border-radius: 100%;
+      background-color: $mdb-radio-color-on;
+      transform: scale3d(0, 0, 0);
+    }
+    .check:after {
+      display: block;
+      position: absolute;
+      content: "";
+      background-color: $mdb-text-color-primary;
+      left: -18px;
+      top: -18px;
+      height: 50px;
+      width: 50px;
+      border-radius: 100%;
+      z-index: 1;
+      opacity: 0;
+      margin: 0;
+      transform: scale3d(1.5, 1.5, 1);
+    }
+    input[type=radio]:not(:checked) ~ .check:after {
+      animation: rippleOff 500ms;
+    }
+    input[type=radio]:checked ~ .check:after {
+      animation: rippleOn 500ms;
+    }
+
+  }
+
+  input[type=radio] {
+    opacity: 0;
+    height: 0;
+    width: 0;
+    overflow: hidden;
+
+    &:checked {
+      @include radio-color($mdb-radio-color-on, 1);
+    }
+    &:checked ~ .check {
+      transform: scale3d(0.65, 0.65, 1);
+    }
+  }
+
+  input[type=radio][disabled] {
+
+    // light theme spec: Disabled: #000000, Opacity  26%
+    @include radio-color($black, 0.26);
+
+  }
+}
+
+@keyframes rippleOn {
+  0% {
+    opacity: 0;
+  }
+  50% {
+    opacity: 0.2;
+  }
+  100% {
+    opacity: 0;
+  }
+}
+
+@keyframes rippleOff {
+  0% {
+    opacity: 0;
+  }
+  50% {
+    opacity: 0.2;
+  }
+  100% {
+    opacity: 0;
+  }
+}
diff --git a/ACSmI/Billing/app/assets/stylesheets/md/_responsive.scss b/ACSmI/Billing/app/assets/stylesheets/md/_responsive.scss
new file mode 100644
index 0000000000000000000000000000000000000000..cbda75964b598991d4306ed8dfa61f8c91e2df0d
--- /dev/null
+++ b/ACSmI/Billing/app/assets/stylesheets/md/_responsive.scss
@@ -0,0 +1,542 @@
+@media (min-width: 992px){
+    .navbar-form {
+        margin-top: 21px;
+        margin-bottom: 21px;
+        padding-left: 5px;
+        padding-right: 5px;
+    }
+    .navbar-nav > li > .dropdown-menu,
+    .dropdown .dropdown-menu,
+    .dropdown-menu.bootstrap-datetimepicker-widget{
+        @include transition($fast-transition-time, $transition-linear);
+        margin-top: -20px;
+        visibility: hidden;
+        display: block;
+        @include opacity(0);
+    }
+    .navbar-nav > li.open > .dropdown-menu,
+    .dropdown.open .dropdown-menu,
+    .dropdown-menu.bootstrap-datetimepicker-widget.open{
+        @include opacity(1);
+        visibility: visible;
+        margin-top: 0px;
+
+    }
+
+    /*.navbar-nav > li > .dropdown-menu:before{
+        border-bottom: 11px solid rgba(0, 0, 0, 0.2);
+        border-left: 11px solid rgba(0, 0, 0, 0);
+        border-right: 11px solid rgba(0, 0, 0, 0);
+        content: "";
+        display: inline-block;
+        position: absolute;
+        left: 12px;
+        top: -11px;
+    }
+    .navbar-nav > li > .dropdown-menu:after {
+        border-bottom: 11px solid #FFFFFF;
+        border-left: 11px solid rgba(0, 0, 0, 0);
+        border-right: 11px solid rgba(0, 0, 0, 0);
+        content: "";
+        display: inline-block;
+        position: absolute;
+        left: 12px;
+        top: -10px;
+    }*/
+
+    .navbar-nav.navbar-right > li > .dropdown-menu:before{
+        left: auto;
+        right: 12px;
+    }
+
+    .navbar-nav.navbar-right > li > .dropdown-menu:after{
+        left: auto;
+        right: 12px;
+    }
+
+    .footer:not(.footer-big){
+        nav > ul{
+           li:first-child{
+             margin-left: 0;
+           }
+        }
+    }
+
+    body > .navbar-collapse.collapse{
+        display: none !important;
+    }
+
+    .card{
+        form{
+            [class*="col-"]{
+                padding: 6px;
+            }
+            [class*="col-"]:first-child{
+                padding-left: 15px;
+            }
+            [class*="col-"]:last-child{
+                padding-right: 15px;
+            }
+        }
+    }
+
+    .sidebar{
+        .navbar-form{
+            display: none !important;
+        }
+        .nav-mobile-menu{
+            display: none;
+        }
+    }
+}
+
+/*          Changes for small display      */
+
+@media (max-width: 991px){
+    .sidebar{
+        display: none;
+        box-shadow: none;
+
+        .sidebar-wrapper{
+            padding-bottom: 60px;
+        }
+
+        .nav-mobile-menu{
+            margin-top: 0;
+
+            .notification{
+                float: left;
+                line-height: 30px;
+                margin-right: 8px;
+            }
+
+            .open .dropdown-menu {
+                position: static;
+                float: none;
+                width: auto;
+                margin-top: 0;
+                background-color: transparent;
+                border: 0;
+                -webkit-box-shadow: none;
+                box-shadow: none;
+            }
+        }
+    }
+
+    .main-panel{
+        width: 100%;
+    }
+    .navbar-transparent{
+        padding-top: 15px;
+        background-color: rgba(0, 0, 0, 0.45);
+    }
+    body {
+         position: relative;
+    }
+    .main-panel{
+       @include transform-translate-x(0px);
+       @include transition (0.33s, cubic-bezier(0.685, 0.0473, 0.346, 1));
+       left: 0;
+    }
+    .navbar .container{
+         left: 0;
+          width: 100%;
+         @include transition (0.33s, cubic-bezier(0.685, 0.0473, 0.346, 1));
+         position: relative;
+    }
+    .navbar .navbar-collapse.collapse,
+    .navbar .navbar-collapse.collapse.in,
+    .navbar .navbar-collapse.collapsing{
+        display: none !important;
+    }
+
+    .navbar-nav > li{
+        float: none;
+        position: relative;
+        display: block;
+    }
+
+    .sidebar,
+    .off-canvas-sidebar{
+        position: fixed;
+        display: block;
+        top: 0;
+        height: 100vh;
+        width: 260px;
+        right: 0;
+        left: auto;
+        z-index: 1032;
+        visibility: visible;
+        background-color: #9A9A9A;
+        overflow-y: visible;
+        border-top: none;
+        text-align: left;
+        padding-right: 0px;
+        padding-left: 0;
+
+        @include transform-translate-x(260px);
+        @include transition (0.33s, cubic-bezier(0.685, 0.0473, 0.346, 1));
+        > ul {
+            position: relative;
+            z-index: 4;
+            overflow-y:scroll;
+            height: calc(100vh - 61px);
+            width: 100%;
+        }
+        &::before{
+            top: 0;
+            left: 0;
+            height: 100%;
+            width: 100%;
+            position: absolute;
+            background-color: #282828;
+            display: block;
+            content: "";
+            z-index: 1;
+        }
+
+        .logo{
+            position: relative;
+            z-index: 4;
+        }
+
+        .navbar-form{
+            margin: 10px 15px;
+            float: none !important;
+
+            .btn{
+                position: absolute;
+                top: 25px;
+                right: 15px;
+            }
+        }
+
+        .table-responsive {
+            width: 100%;
+            margin-bottom: 15px;
+            overflow-x: scroll;
+            overflow-y: hidden;
+            -ms-overflow-style: -ms-autohiding-scrollbar;
+            -webkit-overflow-scrolling: touch;
+        }
+    }
+
+    .nav-open .navbar-collapse{
+        @include transform-translate-x(0px);
+    }
+    .nav-open .navbar .container{
+        left: -250px;
+    }
+    .nav-open .main-panel{
+        left: 0;
+        @include transform-translate-x(-260px);
+    }
+
+    .nav-open .sidebar{
+        @include shadow-big();
+    }
+
+    .nav-open{
+        .off-canvas-sidebar,
+        .sidebar{
+            @include transform-translate-x(0);
+        }
+    }
+
+    .close-layer{
+        height: 100%;
+        width: 100%;
+        position: fixed;
+        opacity: 0;
+        top: 0;
+        left: auto;
+        right: 260px;
+        content: "";
+        z-index: 9999;
+        overflow-x: hidden;
+
+        @include transition($slow-transition-time, $transition-ease-in);
+
+        &.visible{
+            opacity: 1;
+        }
+    }
+
+    .navbar-toggle .icon-bar {
+          display: block;
+          position: relative;
+          background: #fff;
+          width: 24px;
+          height: 2px;
+          border-radius: 1px;
+          margin: 0 auto;
+    }
+
+    .navbar-header .navbar-toggle {
+        margin: 10px 15px 10px 0;
+        width: 40px;
+        height: 40px;
+    }
+    .icon-bar:nth-child(2),
+    .icon-bar:nth-child(3),
+    .icon-bar:nth-child(4){
+      outline: 1px solid transparent;
+    }
+    .icon-bar:nth-child(2){
+      top: 0px;
+      @include bar-animation($topbar-back);
+    }
+    .icon-bar:nth-child(3) {
+      opacity: 1;
+    }
+    .icon-bar:nth-child(4) {
+      bottom: 0px;
+      @include bar-animation($bottombar-back);
+    }
+    .toggled .icon-bar:nth-child(2) {
+      top: 6px;
+      @include bar-animation($topbar-x);
+    }
+    .toggled .icon-bar:nth-child(3) {
+      opacity: 0;
+    }
+    .toggled .icon-bar:nth-child(4) {
+      bottom: 6px;
+      @include bar-animation($bottombar-x);
+    }
+
+    @include topbar-x-rotation();
+    @include topbar-back-rotation();
+    @include bottombar-x-rotation();
+    @include bottombar-back-rotation();
+
+    @-webkit-keyframes fadeIn {
+      0% {opacity: 0;}
+      100% {opacity: 1;}
+    }
+    @-moz-keyframes fadeIn {
+      0% {opacity: 0;}
+      100% {opacity: 1;}
+    }
+    @keyframes fadeIn {
+      0% {opacity: 0;}
+      100% {opacity: 1;}
+    }
+    .bar1,
+    .bar2,
+    .bar3 {
+      outline: 1px solid transparent;
+    }
+
+    @-webkit-keyframes fadeIn {
+      0% {opacity: 0;}
+      100% {opacity: 1;}
+    }
+    @-moz-keyframes fadeIn {
+      0% {opacity: 0;}
+      100% {opacity: 1;}
+    }
+    @keyframes fadeIn {
+      0% {opacity: 0;}
+      100% {opacity: 1;}
+    }
+
+    .dropdown-menu .divider{
+        background-color: rgba(229, 229, 229, 0.15);
+    }
+
+    .navbar-nav {
+        margin: 1px 0;
+
+        .open .dropdown-menu > li {
+            & > a{
+                padding: 15px 15px 5px 50px;
+            }
+
+            &:first-child > a{
+                padding: 5px 15px 5px 50px;
+            }
+
+            &:last-child > a {
+                padding: 15px 15px 25px 50px;
+            }
+        }
+    }
+
+    [class*="navbar-"] .navbar-nav {
+        & > li > a,
+        > li > a:hover,
+        > li > a:focus,
+        .active > a,
+        .active > a:hover,
+        .active > a:focus,
+        .open .dropdown-menu > li > a,
+        .open .dropdown-menu > li > a:hover,
+        .open .dropdown-menu > li > a:focus,
+        .navbar-nav .open .dropdown-menu > li > a:active {
+            color: white;
+        }
+
+        & > li > a,
+        > li > a:hover,
+        > li > a:focus,
+        .open .dropdown-menu > li > a,
+        .open .dropdown-menu > li > a:hover,
+        .open .dropdown-menu > li > a:focus{
+            opacity: .7;
+            background: transparent;
+        }
+
+        &.navbar-nav .open .dropdown-menu > li > a:active {
+            opacity: 1;
+        }
+
+        & .dropdown > a{
+            &:hover .caret {
+                border-bottom-color: #777;
+                border-top-color: #777;
+            }
+            &:active .caret {
+                border-bottom-color: white;
+                border-top-color: white;
+            }
+        }
+
+    }
+
+    .dropdown-menu {
+        display: none;
+    }
+    .navbar-fixed-top {
+        -webkit-backface-visibility: hidden;
+    }
+
+    .social-line .btn{
+        margin: $margin-bottom;
+    }
+    .subscribe-line .form-control{
+        margin: $margin-bottom;
+    }
+    .social-line.pull-right{
+        float: none;
+    }
+    .footer:not(.footer-big) nav > ul li{
+        float: none;
+    }
+    .social-area.pull-right{
+        float: none !important;
+    }
+    .form-control + .form-control-feedback{
+        margin-top: -8px;
+    }
+    .navbar-toggle:hover,.navbar-toggle:focus {
+        background-color: transparent !important;
+    }
+    .btn.dropdown-toggle{
+        margin-bottom: 0;
+    }
+    .media-post .author{
+        width: 20%;
+        float: none !important;
+        display: block;
+        margin: 0 auto 10px;
+    }
+    .media-post .media-body{
+        width: 100%;
+    }
+
+    .navbar-collapse.collapse{
+        height: 100% !important;
+    }
+    .navbar-collapse.collapse.in {
+        display: block;
+    }
+    .navbar-header .collapse, .navbar-toggle {
+        display:block !important;
+    }
+    .navbar-header {
+        float:none;
+    }
+    .navbar-collapse{
+        .nav p{
+            font-size: $font-size-base;
+            margin: 0;
+        }
+
+        [class^="pe-7s-"]{
+            float: left;
+            font-size: 20px;
+            margin-right: 10px;
+        }
+    }
+    .bootstrap-navbar{
+        > ul{
+            position: relative;
+            z-index: 4;
+            overflow-y: scroll;
+            height: calc(100vh - 61px);
+            width: 100%;
+        }
+        a{
+            color:#fff;
+        }
+        .nav{
+            p{
+                margin: 0;
+                line-height: 30px;
+                font-size: 12px;
+                font-weight: 600;
+                text-transform: uppercase;
+                margin-left: 45px;
+                color: #fff;
+            }
+            li {
+                > a{
+                    color: #FFFFFF;
+                    margin: 5px 15px;
+                    opacity: .86;
+                    border-radius: 4px;
+                    display: block;
+                }
+            }
+        }
+        position: fixed;
+        color: white;
+        display: block;
+        top: 0;
+        height: 100%;
+        right: 0;
+        left: auto;
+        z-index: 1032;
+        visibility: visible;
+        background-color: #999;
+        overflow-y: visible;
+        border-top: none;
+        text-align: left;
+        padding: 0;
+        -webkit-transform: translate3d(260px, 0, 0);
+        -moz-transform: translate3d(260px, 0, 0);
+        -o-transform: translate3d(260px, 0, 0);
+        -ms-transform: translate3d(260px, 0, 0);
+        transform: translate3d(260px, 0, 0);
+        -webkit-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1);
+        -moz-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1);
+        -o-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1);
+        -ms-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1);
+        transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1);
+    }
+}
+
+//overwrite table responsive for 768px screens
+
+@media (min-width: 768px){
+    .navbar> .container-fluid .navbar-brand{
+        margin-left: 0;
+    }
+}
+@media (min-width: 992px){
+    .table-full-width{
+        margin-left: -20px;
+        margin-right: -20px;
+    }
+}
diff --git a/ACSmI/Billing/app/assets/stylesheets/md/_ripples.scss b/ACSmI/Billing/app/assets/stylesheets/md/_ripples.scss
new file mode 100644
index 0000000000000000000000000000000000000000..c305be09cde7a566a5d06d8015f5a30bc13869ce
--- /dev/null
+++ b/ACSmI/Billing/app/assets/stylesheets/md/_ripples.scss
@@ -0,0 +1,40 @@
+.withripple {
+    position: relative;
+}
+.ripple-container {
+    position: absolute;
+    top: 0;
+    left: 0;
+    z-index: 1;
+    width: 100%;
+    height: 100%;
+    overflow: hidden;
+    border-radius: inherit;
+    pointer-events: none;
+
+    .disabled &{
+        display: none;
+    }
+}
+.ripple {
+    position: absolute;
+    width: 20px;
+    height: 20px;
+    margin-left: -10px;
+    margin-top: -10px;
+    border-radius: 100%;
+    background-color: #000; // fallback color
+    background-color: rgba(0,0,0,0.05);
+    transform: scale(1);
+    transform-origin: 50%;
+    opacity: 0;
+    pointer-events: none;
+}
+.ripple.ripple-on {
+    transition: opacity 0.15s ease-in 0s, transform 0.5s cubic-bezier(0.4, 0, 0.2, 1) 0.1s;
+    opacity: 0.1;
+}
+.ripple.ripple-out {
+    transition: opacity 0.1s linear 0s !important;
+    opacity: 0;
+}
diff --git a/ACSmI/Billing/app/assets/stylesheets/md/_select.scss b/ACSmI/Billing/app/assets/stylesheets/md/_select.scss
new file mode 100644
index 0000000000000000000000000000000000000000..c1e9f70a4d4a6427b462bc6c3fbecd707238d331
--- /dev/null
+++ b/ACSmI/Billing/app/assets/stylesheets/md/_select.scss
@@ -0,0 +1,56 @@
+/* ==========  Select Field Variables ========== */
+$color-black: "0,0,0";
+$select-background-color: transparent;
+$select-border-color: unquote("rgba(#{$color-black}, 0.12)") !default;
+$select-font-size: 16px;
+$select-color: unquote("rgba(#{$color-black}, 0.26)") !default;
+$select-padding: 4px;
+
+/* ==========  Select Field ========== */
+
+/* Style Select Field */
+select {
+  font-family: inherit;
+  background-color: transparent;
+  width: 100%;
+  padding: $select-padding 0;
+  font-size: $select-font-size;
+  color: $color-black;
+  border: none;
+  border-bottom: 1px solid $select-border-color;
+}
+
+/* Remove focus */
+select:focus {
+  outline: none}
+
+/* Hide label */
+.mdl-selectfield label {display: none;}
+/* Use custom arrow */
+.mdl-selectfield select {appearance: none}
+.mdl-selectfield {
+  font-family: 'Roboto','Helvetica','Arial',sans-serif;
+  position: relative;
+    &:after {
+        position: absolute;
+        top: 0.75em;
+        right: 0.5em;
+        /* Styling the down arrow */
+        width: 0;
+        height: 0;
+        padding: 0;
+        content: '';
+        border-left: .25em solid transparent;
+        border-right: .25em solid transparent;
+        border-top: .375em solid $select-border-color;
+        pointer-events: none;
+    }
+}
+
+/* ==========  Demo CSS ========== */
+body {
+  padding: 20px;
+  background: #fafafa;
+  font-family: 'Roboto','Helvetica','Arial',sans-serif;
+}
+
diff --git a/ACSmI/Billing/app/assets/stylesheets/md/_shadows.scss b/ACSmI/Billing/app/assets/stylesheets/md/_shadows.scss
new file mode 100644
index 0000000000000000000000000000000000000000..2ac176887a94db9de5e26b8d9ec66b8737894f45
--- /dev/null
+++ b/ACSmI/Billing/app/assets/stylesheets/md/_shadows.scss
@@ -0,0 +1,138 @@
+// This file has been autogenerated by grunt task lessToSass. Any changes will be overwritten.
+
+@mixin shadow-z-1(){
+  box-shadow:
+    0 1px 6px 0 rgba(0, 0, 0, 0.12),
+    0 1px  6px 0 rgba(0, 0, 0, 0.12);
+}
+
+@mixin shadow-z-1-hover(){
+  box-shadow:
+    0 5px 11px 0 rgba(0, 0, 0, 0.18),
+    0 4px 15px 0 rgba(0, 0, 0, 0.15);
+}
+
+@mixin shadow-z-2(){
+  box-shadow:
+    0 8px 17px 0 rgba(0, 0, 0, 0.2),
+    0 6px 20px 0 rgba(0, 0, 0, 0.19);
+}
+
+@mixin shadow-z-3(){
+  box-shadow:
+    0 12px 15px 0 rgba(0, 0, 0, 0.24),
+    0 17px 50px 0 rgba(0, 0, 0, 0.19);
+}
+
+@mixin shadow-z-4(){
+  box-shadow:
+    0 16px 28px 0 rgba(0, 0, 0, 0.22),
+    0 25px 55px 0 rgba(0, 0, 0, 0.21);
+}
+
+@mixin shadow-z-5(){
+  box-shadow:
+    0 27px 24px 0 rgba(0, 0, 0, 0.2),
+    0 40px 77px 0 rgba(0, 0, 0, 0.22);
+}
+
+
+/* Shadows (from mdl http://www.getmdl.io/) */
+
+// Focus shadow mixin.
+@mixin big-shadow(){
+  box-shadow: 0 0 8px rgba(0, 0, 0,.18),
+  0 8px 16px rgba(0, 0, 0,.36);
+}
+
+@mixin button-shadow-color($color){
+    box-shadow: 0 14px 26px -12px rgba($color, $mdb-shadow-key-penumbra-opacity * 3),
+    0  4px 23px 0px rgba(0,0,0, $mdb-shadow-ambient-shadow-opacity),
+    0  8px 10px -5px rgba($color, $mdb-shadow-key-umbra-opacity);
+}
+
+@mixin shadow-2dp(){
+  box-shadow: 0 2px 2px 0 rgba(0, 0, 0, $mdb-shadow-key-penumbra-opacity),
+  0 3px 1px -2px rgba(0, 0, 0, $mdb-shadow-key-umbra-opacity),
+  0 1px 5px 0 rgba(0, 0, 0, $mdb-shadow-ambient-shadow-opacity);
+}
+@mixin shadow-2dp-color($color){
+  box-shadow: 0 2px 2px 0 rgba($color, $mdb-shadow-key-penumbra-opacity),
+  0 3px 1px -2px rgba($color, $mdb-shadow-key-umbra-opacity),
+  0 1px 5px 0 rgba($color, $mdb-shadow-ambient-shadow-opacity);
+}
+
+@mixin shadow-3dp(){
+  box-shadow: 0 3px 4px 0 rgba(0, 0, 0, $mdb-shadow-key-penumbra-opacity),
+  0 3px 3px -2px rgba(0, 0, 0, $mdb-shadow-key-umbra-opacity),
+  0 1px 8px 0 rgba(0, 0, 0, $mdb-shadow-ambient-shadow-opacity);
+}
+@mixin shadow-4dp(){
+  box-shadow: 0 4px 5px 0 rgba(0, 0, 0, $mdb-shadow-key-penumbra-opacity),
+  0 1px 10px 0 rgba(0, 0, 0, $mdb-shadow-ambient-shadow-opacity),
+  0 2px 4px -1px rgba(0, 0, 0, $mdb-shadow-key-umbra-opacity);
+}
+@mixin shadow-4dp-color($color){
+  box-shadow: 0 4px 5px 0 rgba($color, $mdb-shadow-key-penumbra-opacity),
+  0 1px 10px 0 rgba($color, $mdb-shadow-ambient-shadow-opacity),
+  0 2px 4px -1px rgba($color, $mdb-shadow-key-umbra-opacity);
+}
+@mixin shadow-6dp(){
+  box-shadow: 0 6px 10px 0 rgba(0, 0, 0, $mdb-shadow-key-penumbra-opacity),
+  0 1px 18px 0 rgba(0, 0, 0, $mdb-shadow-ambient-shadow-opacity),
+  0 3px 5px -1px rgba(0, 0, 0, $mdb-shadow-key-umbra-opacity);
+}
+@mixin shadow-8dp(){
+  box-shadow: 0 8px 10px 1px rgba(0, 0, 0, $mdb-shadow-key-penumbra-opacity),
+  0 3px 14px 2px rgba(0, 0, 0, $mdb-shadow-ambient-shadow-opacity),
+  0 5px 5px -3px rgba(0, 0, 0, $mdb-shadow-key-umbra-opacity);
+}
+@mixin shadow-8dp-color($color){
+  box-shadow: 0 8px 10px 1px rgba($color, $mdb-shadow-key-penumbra-opacity),
+  0 3px 14px 2px rgba(0, 0, 0, $mdb-shadow-ambient-shadow-opacity),
+  0 5px 5px -3px rgba($color, $mdb-shadow-key-umbra-opacity);
+}
+
+@mixin shadow-16dp(){
+  box-shadow: 0 16px 24px 2px rgba(0, 0, 0, $mdb-shadow-key-penumbra-opacity),
+  0  6px 30px 5px rgba(0, 0, 0, $mdb-shadow-ambient-shadow-opacity),
+  0  8px 10px -5px rgba(0, 0, 0, $mdb-shadow-key-umbra-opacity);
+}
+
+@mixin shadow-16dp-color($color){
+  box-shadow: 0 16px 24px 2px rgba($color, $mdb-shadow-key-penumbra-opacity),
+  0  6px 30px 5px rgba(0, 0, 0, $mdb-shadow-ambient-shadow-opacity),
+  0  8px 10px -5px rgba($color, $mdb-shadow-key-umbra-opacity);
+}
+
+@mixin shadow-24dp(){
+  box-shadow: 0  9px 46px  8px rgba(0, 0, 0, $mdb-shadow-key-penumbra-opacity),
+  0 11px 15px -7px rgba(0, 0, 0, $mdb-shadow-ambient-shadow-opacity),
+  0 24px 38px  3px rgba(0, 0, 0, $mdb-shadow-key-umbra-opacity);
+}
+
+@mixin shadow-big(){
+    box-shadow: 0 10px 30px -12px rgba(0, 0, 0, $mdb-shadow-key-penumbra-opacity * 3),
+    0  4px 25px 0px rgba(0, 0, 0, $mdb-shadow-ambient-shadow-opacity),
+    0  8px 10px -5px rgba(0, 0, 0, $mdb-shadow-key-umbra-opacity);
+}
+
+@mixin shadow-big-navbar(){
+    box-shadow: 0 10px 20px -12px rgba(0, 0, 0, $mdb-shadow-key-penumbra-opacity * 3),
+    0  3px 20px 0px rgba(0, 0, 0, $mdb-shadow-ambient-shadow-opacity),
+    0  8px 10px -5px rgba(0, 0, 0, $mdb-shadow-key-umbra-opacity);
+}
+
+@mixin shadow-big-color($color){
+    box-shadow: 0 12px 20px -10px rgba($color, $mdb-shadow-key-penumbra-opacity * 2),
+    0  4px 20px 0px rgba(0,0,0, $mdb-shadow-ambient-shadow-opacity),
+    0  7px 8px -5px rgba($color, $mdb-shadow-key-umbra-opacity);
+
+}
+
+// shadow backup for Sketch/Photoshop
+// @mixin shadow-big-color($color){
+//     box-shadow: 0 16px 38px -12px rgba($color, $mdb-shadow-key-penumbra-opacity * 4),
+//     0  4px 25px 0px rgba($color, $mdb-shadow-ambient-shadow-opacity),
+//     0  8px 10px -5px rgba($color, $mdb-shadow-key-umbra-opacity);
+// }
diff --git a/ACSmI/Billing/app/assets/stylesheets/md/_sidebar-and-main-panel.scss b/ACSmI/Billing/app/assets/stylesheets/md/_sidebar-and-main-panel.scss
new file mode 100644
index 0000000000000000000000000000000000000000..d4944ea085de82d99e3050f5d4e9dee7ac231e6f
--- /dev/null
+++ b/ACSmI/Billing/app/assets/stylesheets/md/_sidebar-and-main-panel.scss
@@ -0,0 +1,288 @@
+ .wrapper{
+    position: relative;
+    top: 0;
+    height: 100vh;
+}
+.bootstrap-navbar {
+    position: absolute;
+    top: 0;
+    bottom: 0;
+    left: 0;
+    width: 260px;
+    display: block;
+    z-index: 1;
+    color: #fff;
+    font-weight: 200;
+    background-size: cover;
+    background-position: center center;
+}
+.sidebar,
+.off-canvas-sidebar{
+    position: fixed;
+    top: 0;
+    bottom: 0;
+    left: 0;
+    z-index: 1;
+    @include shadow-big();
+
+
+    .sidebar-wrapper{
+        position: relative;
+        height: calc(100vh - 75px);
+        overflow: auto;
+        width: 260px;
+        z-index: 4;
+        //background-color: $white-color;
+    }
+    .logo-img{
+        width: 100px;
+        display: inline-block;
+        max-height: 100px;
+        margin-left: 10px;
+        margin-right: 15px;
+
+        img{
+            width: 100px;
+            top: 16px;
+            position: absolute;
+        }
+    }
+
+    .logo-tim{
+        border-radius: 50%;
+        border: 1px solid #333;
+        display: block;
+        height: 61px;
+        width: 61px;
+        float: left;
+        overflow: hidden;
+
+        img{
+            width: 60px;
+            height: 60px;
+        }
+    }
+
+
+
+    .nav{
+        margin-top: 20px;
+
+        li{
+            > a{
+                margin: 10px 15px;
+                border-radius: $border-radius-base;
+                color: $black-color;
+                @extend .animation-transition-general;
+            }
+
+            &:hover > a{
+                background: rgba(200, 200, 200, 0.2);
+                color: $black-color;
+            }
+
+            &.active > a{
+                color: #FFFFFF;
+
+                i{
+                    color: #FFFFFF;
+                }
+            }
+        }
+
+        p{
+            margin: 0;
+            line-height: 30px;
+            font-size: 14px;
+            // font-weight: 600;
+            // text-transform: uppercase;
+        }
+
+        i{
+            font-size: 24px;
+            float: left;
+            margin-right: 15px;
+            line-height: 30px;
+            width: 30px;
+            text-align: center;
+            color: #a9afbb;
+        }
+    }
+
+    .sidebar-background{
+        position: absolute;
+        z-index: 1;
+        height: 100%;
+        width: 100%;
+        display: block;
+        top: 0;
+        left: 0;
+        background-size: cover;
+        background-position: center center;
+
+        &:after{
+            position: absolute;
+            z-index: 3;
+            width: 100%;
+            height: 100%;
+            content: "";
+            display: block;
+            background: #FFFFFF;
+            opacity: .93;
+        }
+    }
+
+    .logo{
+        position: relative;
+        padding: $padding-base $padding-base;
+        z-index: 4;
+
+        &:after{
+            content: '';
+            position: absolute;
+            bottom: 0;
+            right: 10%;
+            height: 1px;
+            width: 80%;
+            background-color: rgba(180,180,180, .3);
+
+        }
+
+        p{
+            float: left;
+            font-size: 20px;
+            margin: 10px 10px;
+            color: $white-color;
+            line-height: 20px;
+            font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+        }
+
+        .simple-text{
+            text-transform: uppercase;
+            padding: $padding-small-vertical $padding-zero;
+            display: block;
+            font-size: $font-size-large;
+            color: $black-color;
+            text-align: left;
+            font-weight: $font-weight-default;
+            line-height: 30px;
+        }
+    }
+
+    .logo-tim{
+        border-radius: 50%;
+        border: 1px solid #333;
+        display: block;
+        height: 61px;
+        width: 61px;
+        float: left;
+        overflow: hidden;
+
+        img{
+            width: 60px;
+            height: 60px;
+        }
+    }
+
+    &:after,
+    &:before{
+        display: block;
+        content: "";
+        position: absolute;
+        width: 100%;
+        height: 100%;
+        top: 0;
+        left: 0;
+        z-index: 2;
+    }
+
+    &:before{
+        opacity: .33;
+        // background: #000000;
+    }
+
+    &:after{
+    //    @include set-background-color-button($font-background-light-grey, $background-lighter-grey);
+       z-index: 3;
+       opacity: 1;
+    }
+
+    &[data-image]:after,
+    &.has-image:after{
+        opacity: .77;
+    }
+
+    &[data-color="blue"]{
+        @include set-background-color-button($brand-info);
+    }
+    &[data-color="green"]{
+        @include set-background-color-button($brand-success);
+    }
+    &[data-color="orange"]{
+        @include set-background-color-button($brand-warning);
+    }
+    &[data-color="red"]{
+        @include set-background-color-button($brand-danger);
+    }
+    &[data-color="purple"]{
+        @include set-background-color-button($brand-primary);
+    }
+    &[data-color="primary"]{
+        @include set-background-color-button($my-theme-primary);
+    }
+}
+
+.off-canvas-sidebar{
+    .nav {
+        > li > a,
+        > li > a:hover{
+            color: $white-color;
+        }
+
+        > li > a:focus{
+            background: rgba(200, 200, 200, 0.2);
+        }
+    }
+}
+
+
+.main-panel{
+    //background: rgba(203,203,210,.15);
+    position: relative;
+    // z-index: 2;
+    float: right;
+    min-height: 100%;
+    width: $sidebar-width;
+
+    .main-content{
+        margin-top: 70px;
+        padding: 30px 15px;
+        min-height: calc(100% - 123px);
+    }
+    div{
+        .footer{
+            border-top: 1px solid #e7e7e7;
+        }
+    }
+    > .navbar{
+        margin-bottom: 0;
+    }
+}
+.bootstrap-navbar .nav{
+    margin-top: 20px;
+    float: none;
+}
+.main-panel{
+    position: relative;
+    height: 100%;
+}
+.sidebar,
+.main-panel{
+    -webkit-transition-property: top,bottom,width;
+    transition-property: top,bottom,width;
+    -webkit-transition-duration: .2s,.2s,.35s;
+    transition-duration: .2s,.2s,.35s;
+    -webkit-transition-timing-function: linear,linear,ease;
+    transition-timing-function: linear,linear,ease;
+    -webkit-overflow-scrolling: touch;
+}
diff --git a/ACSmI/Billing/app/assets/stylesheets/md/_tables.scss b/ACSmI/Billing/app/assets/stylesheets/md/_tables.scss
new file mode 100644
index 0000000000000000000000000000000000000000..fbe5b40f26eba5eea47efc8c7fffaca524f2f634
--- /dev/null
+++ b/ACSmI/Billing/app/assets/stylesheets/md/_tables.scss
@@ -0,0 +1,45 @@
+.table{
+   > thead > tr > th{
+       border-bottom-width: 1px;
+       font-size: $font-size-h6;
+       font-weight: $font-weight-light;
+   }
+
+   .radio,
+   .checkbox{
+       margin-top: 0;
+       margin-bottom: 0;
+       margin-left: 10px;
+       padding: 0;
+       width: 15px;
+
+       .icons{
+           position: relative;
+       }
+   }
+   > thead > tr > th,
+   > tbody > tr > th,
+   > tfoot > tr > th,
+   > thead > tr > td,
+   > tbody > tr > td,
+   > tfoot > tr > td{
+       padding: 12px 8px;
+       vertical-align: middle;
+   }
+
+   > thead > tr > th{
+       padding-bottom: 4px;
+   }
+
+   .td-actions{
+        display: flex;
+
+        .btn{
+           margin: 0px;
+           padding: 5px;
+        }
+    }
+    > tbody > tr{
+        position: relative;
+    }
+}
diff --git a/ACSmI/Billing/app/assets/stylesheets/md/_tabs.scss b/ACSmI/Billing/app/assets/stylesheets/md/_tabs.scss
new file mode 100644
index 0000000000000000000000000000000000000000..2d1e46067d80bd4463b1683b4abdf47b0d414541
--- /dev/null
+++ b/ACSmI/Billing/app/assets/stylesheets/md/_tabs.scss
@@ -0,0 +1,53 @@
+// This file has been autogenerated by grunt task lessToSass. Any changes will be overwritten.
+
+.nav-tabs {
+    background: $brand-primary;
+    border: 0;
+    border-radius: $border-radius-base;
+    padding: 0 $padding-base;
+
+    > li {
+        > a {
+            color: #FFFFFF;
+            border: 0;
+            margin: 0;
+
+            border-radius: $border-radius-base;
+
+            line-height: $mdb-btn-font-size-base * 2;
+            text-transform: uppercase;
+            font-size: $mdb-btn-font-size-base;
+
+            &:hover {
+                background-color: transparent;
+                border: 0;
+            }
+        }
+        & > a,
+        & > a:hover,
+        & > a:focus {
+            background-color: transparent;
+            border: 0 !important;
+            color: #FFFFFF !important;
+            font-weight: $font-weight-bold;
+        }
+        &.disabled > a,
+        &.disabled > a:hover {
+            color: rgba(255,255,255,0.5);
+        }
+
+        .material-icons{
+            margin: -1px 5px 0 0;
+        }
+    }
+
+    >li.active{
+        & > a,
+        & > a:hover,
+        & > a:focus {
+            background-color: rgba(255,255,255, .2);
+            transition: background-color .1s .2s;
+        }
+    }
+
+}
diff --git a/ACSmI/Billing/app/assets/stylesheets/md/_togglebutton.scss b/ACSmI/Billing/app/assets/stylesheets/md/_togglebutton.scss
new file mode 100644
index 0000000000000000000000000000000000000000..9e676907c5dcb07042d1fc65519524225168af6f
--- /dev/null
+++ b/ACSmI/Billing/app/assets/stylesheets/md/_togglebutton.scss
@@ -0,0 +1,87 @@
+// This file has been autogenerated by grunt task lessToSass. Any changes will be overwritten.
+
+.togglebutton {
+  vertical-align: middle;
+  &, label, input, .toggle {
+    user-select: none;
+  }
+  label {
+    cursor: pointer;
+    color: $mdb-toggle-label-color;
+    @include mdb-label-color-toggle-focus();
+
+    // Hide original checkbox
+    input[type=checkbox] {
+      opacity: 0;
+      width: 0;
+      height: 0;
+    }
+
+    .toggle {
+      text-align: left; // Issue #737 horizontal form
+      margin-left: 5px;
+    }
+    // Switch bg off and disabled
+    .toggle,
+    input[type=checkbox][disabled] + .toggle {
+      content: "";
+      display: inline-block;
+      width: 30px;
+      height: 15px;
+      background-color: rgba(80, 80, 80, 0.7);
+      border-radius: 15px;
+      margin-right: 15px;
+      transition: background 0.3s ease;
+      vertical-align: middle;
+    }
+    // Handle off
+    .toggle:after {
+      content: "";
+      display: inline-block;
+      width: 20px;
+      height: 20px;
+      background-color: #FFFFFF;
+      border-radius: 20px;
+      position: relative;
+      box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.4);
+      left: -5px;
+      top: -3px;
+      border: 1px solid $mdb-checkbox-border-color;
+      transition: left 0.3s ease, background 0.3s ease, box-shadow 0.1s ease;
+    }
+    input[type=checkbox] {
+      // Handle disabled
+      &[disabled] {
+        & + .toggle:after,
+        &:checked + .toggle:after {
+          background-color: #BDBDBD;
+        }
+      }
+
+      & + .toggle:active:after,
+      &[disabled] + .toggle:active:after {
+        box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.4), 0 0 0 15px rgba(0, 0, 0, 0.1);
+      }
+
+      // Ripple off and disabled
+      &:checked + .toggle:after {
+        left: 15px;
+      }
+    }
+
+    // set bg when checked
+    input[type=checkbox]:checked {
+      + .toggle {
+        background-color: rgba($brand-primary, (70/100)); // Switch bg on
+      }
+
+      + .toggle:after {
+        border-color: $brand-primary; // Handle on
+      }
+
+      + .toggle:active:after {
+        box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.4), 0 0 0 15px rgba($brand-primary, (10/100)); // Ripple on
+      }
+    }
+  }
+}
diff --git a/ACSmI/Billing/app/assets/stylesheets/md/_typography.scss b/ACSmI/Billing/app/assets/stylesheets/md/_typography.scss
new file mode 100644
index 0000000000000000000000000000000000000000..c821020e1a29712ccedd49ce8e127929953c67e5
--- /dev/null
+++ b/ACSmI/Billing/app/assets/stylesheets/md/_typography.scss
@@ -0,0 +1,75 @@
+h1, .h1 {
+    font-size: $font-size-h1;
+    line-height: 1.15em;
+}
+h2, .h2{
+    font-size: $font-size-h2;
+}
+h3, .h3{
+    font-size: $font-size-h3;
+    line-height: 1.4em;
+    margin: 20px 0 10px;
+}
+h4, .h4{
+    font-size: $font-size-h4;
+    line-height: 1.4em;
+}
+h5, .h5 {
+    font-size: $font-size-h5;
+    line-height: 1.4em;
+    margin-bottom: 15px;
+}
+h6, .h6{
+    font-size: $font-size-h6;
+    text-transform: uppercase;
+    font-weight: $font-weight-bold;
+}
+
+/*.title,
+.card-title,
+.info-title,
+.footer-brand,
+.footer-big h5,
+.footer-big h4,
+.media .media-heading{
+    font-weight: $font-weight-extra-bold;
+    font-family: $font-family-serif;
+
+    &,
+    a{
+        color: $black-color;
+        text-decoration: none;
+    }
+}*/
+
+h2.title{
+    margin-bottom: $margin-base * 2;
+}
+
+.description,
+.card-description,
+.footer-big p{
+    color: $gray-light;
+}
+
+.text-warning {
+  color: $brand-warning;
+}
+.text-primary {
+  color: $brand-primary;
+}
+.text-danger {
+  color: $brand-danger;
+}
+.text-success {
+  color: $brand-success;
+}
+.text-info {
+  color: $brand-info;
+}
+.text-rose{
+    color: $brand-rose;
+}
+.text-gray{
+    color: $gray-color;
+}
diff --git a/ACSmI/Billing/app/assets/stylesheets/md/_variables.scss b/ACSmI/Billing/app/assets/stylesheets/md/_variables.scss
new file mode 100644
index 0000000000000000000000000000000000000000..61da5697bb675d4742181bd6d2184d1718e07176
--- /dev/null
+++ b/ACSmI/Billing/app/assets/stylesheets/md/_variables.scss
@@ -0,0 +1,1138 @@
+// This file has been autogenerated by grunt task lessToSass. Any changes will be overwritten.
+
+@import '_colors';
+
+//MY THEME - Antonio
+$my-theme-primary: #0277bc;
+$my-theme-primary-light: #58a5ef;
+$my-theme-primary-dark: #004c8b;
+$my-theme-accent: #d32f2f;
+$my-theme-accent-light: #ff6659;
+$my-theme-accent-dark: #9a0007;
+// create theme (use mat-dark-theme for themes with dark backgrounds)
+
+
+// Typography elements
+$mdb-font-family: 'Roboto', 'Helvetica', 'Arial', sans-serif !default;
+$mdb-text-color-light:  $white !default;
+$mdb-text-color-light-hex: $white !default; // for contrast function in inverse
+$mdb-text-color-primary: unquote("rgba(#{$rgb-black}, 0.87)") !default;
+$mdb-text-color-primary-hex: $black !default; // for contrast function in inverse
+$icon-color: rgba(0,0,0,0.5) !default;
+
+
+$mdb-label-color: unquote("rgba(#{$rgb-black}, 0.26)") !default;
+$mdb-label-color-toggle-focus: unquote("rgba(#{$rgb-black}, .54)") !default;
+
+
+//---
+// Converted bs variables
+
+// Bootstrap brand color customization
+$white-color: #FFFFFF !default;
+
+$white-transparent: rgba($white-color, .8);
+
+$gray-color:  #999999 !default;
+
+$brand-primary: $purple !default;
+$brand-success: $green !default;
+$brand-danger: $red !default;
+$brand-warning: $orange !default;
+$brand-info: $cyan !default;
+$brand-rose: $pink !default;
+
+$border-radius-base: 3px !default;
+$border-radius-small: 2px !default;
+$border-radius-large: 6px !default;
+$border-radius-huge: 10px !default;
+$border-radius-label: 12px !default;
+$border-radius-extreme: 30px !default;
+
+// Typography
+$font-family-sans-serif: 'Roboto', 'Helvetica', 'Arial', sans-serif !default;
+$font-family-serif: 'Roboto Slab', 'Times New Roman', serif !default;
+
+$headings-font-weight: 300 !default;
+
+$font-weight-light: 300 !default;
+$font-weight-default: 400 !default;
+$font-weight-bold:    500 !default;
+$font-weight-extra-bold: 700 !default;
+$font-weight-ultra-bold: 900 !default;
+
+$body-bg: #EEEEEE !default;
+//---
+
+// import bs variables for sass, first declared wins.
+$bootstrap-sass-asset-helper: false !default;
+//
+// Variables
+// --------------------------------------------------
+
+
+//== Colors
+//
+//## Gray and brand colors for use across Bootstrap.
+
+$gray-base:              #000 !default;
+$gray-darker:            lighten($gray-base, 13.5%) !default; // #222
+$gray-dark:              lighten($gray-base, 20%) !default;   // #333
+$gray:                   lighten($gray-base, 33.5%) !default; // #555
+$gray-light:             #999999 !default; // #999999
+$gray-lighter:           lighten($gray-base, 93.5%) !default; // #eee
+
+$brand-primary:         darken(#428bca, 6.5%) !default; // #337ab7
+$brand-success:         #5cb85c !default;
+$brand-info:            #5bc0de !default;
+$brand-warning:         #f0ad4e !default;
+$brand-danger:          #d9534f !default;
+
+$black-color:           #3C4858 !default;
+$black-input-color:     #555555 !default;
+
+
+//== Scaffolding
+//
+//## Settings for some of the most global styles.
+
+//** Background color for `<body>`.
+$body-bg:               #fff !default;
+//** Global text color on `<body>`.
+$text-color:            $gray-dark !default;
+
+//** Global textual link color.
+$link-color:            $brand-primary !default;
+//** Link hover color set via `darken()` function.
+$link-hover-color:      darken($link-color, 15%) !default;
+//** Link hover decoration.
+$link-hover-decoration: underline !default;
+
+
+//== Typography
+//
+//## Font, line-height, and color for body text, headings, and more.
+
+$font-family-sans-serif:  "Helvetica Neue", Helvetica, Arial, sans-serif !default;
+$font-family-serif:       Georgia, "Times New Roman", Times, serif !default;
+//** Default monospace fonts for `<code>`, `<kbd>`, and `<pre>`.
+$font-family-monospace:   Menlo, Monaco, Consolas, "Courier New", monospace !default;
+$font-family-base:        $font-family-sans-serif !default;
+
+$font-size-base:          14px !default;
+$font-size-large:         ceil(($font-size-base * 1.25)) !default; // ~18px
+$font-size-small:         ceil(($font-size-base * 0.85)) !default; // ~12px
+
+$font-size-h1:                 3.8em !default;
+$font-size-h2:                 2.6em !default;
+$font-size-h3:                 1.825em !default;
+$font-size-h4:                 1.3em !default;
+$font-size-h5:                 1.25em !default;
+$font-size-h6:                 1em !default;
+$font-paragraph:               16px !default;
+$font-size-navbar:             16px !default;
+$font-size-small:              12px !default;
+
+//** Unit-less `line-height` for use in components like buttons.
+$line-height-base:        1.428571429 !default; // 20/14
+//** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
+$line-height-computed:    floor(($font-size-base * $line-height-base)) !default; // ~20px
+
+//** By default, this inherits from the `<body>`.
+$headings-font-family:    inherit !default;
+$headings-font-weight:    500 !default;
+$headings-line-height:    1.1 !default;
+$headings-color:          inherit !default;
+
+
+//== Iconography
+//
+//## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower.
+
+//** Load fonts from this directory.
+
+// [converter] If $bootstrap-sass-asset-helper if used, provide path relative to the assets load path.
+// [converter] This is because some asset helpers, such as Sprockets, do not work with file-relative paths.
+$icon-font-path: if($bootstrap-sass-asset-helper, "bootstrap/", "../fonts/bootstrap/") !default;
+
+//** File name for all font files.
+$icon-font-name:          "glyphicons-halflings-regular" !default;
+//** Element ID within SVG icon file.
+$icon-font-svg-id:        "glyphicons_halflingsregular" !default;
+
+
+//== Components
+//
+//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).
+
+$padding-base:              15px !default;
+$margin-base:               15px !default;
+
+$padding-base-vertical:     6px !default;
+$padding-base-horizontal:   12px !default;
+
+$padding-large-vertical:    10px !default;
+$padding-large-horizontal:  16px !default;
+
+$padding-small-vertical:    5px !default;
+$padding-small-horizontal:  10px !default;
+
+$padding-xs-vertical:       1px !default;
+$padding-xs-horizontal:     5px !default;
+
+$line-height-large:         1.3333333 !default; // extra decimals for Win 8.1 Chrome
+$line-height-small:         1.5 !default;
+
+$border-radius-base:        4px !default;
+$border-radius-large:       6px !default;
+$border-radius-small:       3px !default;
+
+//** Global color for active items (e.g., navs or dropdowns).
+$component-active-color:    #fff !default;
+//** Global background color for active items (e.g., navs or dropdowns).
+$component-active-bg:       $brand-primary !default;
+
+//** Width of the `border` for generating carets that indicator dropdowns.
+$caret-width-base:          4px !default;
+//** Carets increase slightly in size for larger components.
+$caret-width-large:         5px !default;
+
+
+//== Tables
+//
+//## Customizes the `.table` component with basic values, each used across all table variations.
+
+//** Padding for `<th>`s and `<td>`s.
+$table-cell-padding:            8px !default;
+//** Padding for cells in `.table-condensed`.
+$table-condensed-cell-padding:  5px !default;
+
+//** Default background color used for all tables.
+$table-bg:                      transparent !default;
+//** Background color used for `.table-striped`.
+$table-bg-accent:               #f9f9f9 !default;
+//** Background color used for `.table-hover`.
+$table-bg-hover:                #f5f5f5 !default;
+$table-bg-active:               $table-bg-hover !default;
+
+//** Border color for table and cell borders.
+$table-border-color:            #ddd !default;
+
+
+//== Buttons
+//
+//## For each of Bootstrap's buttons, define text, background and border color.
+
+$btn-font-weight:                normal !default;
+
+$btn-default-color:              #333 !default;
+$btn-default-bg:                 #fff !default;
+$btn-default-border:             #ccc !default;
+
+$btn-primary-color:              #fff !default;
+$btn-primary-bg:                 $brand-primary !default;
+$btn-primary-border:             darken($btn-primary-bg, 5%) !default;
+
+$btn-success-color:              #fff !default;
+$btn-success-bg:                 $brand-success !default;
+$btn-success-border:             darken($btn-success-bg, 5%) !default;
+
+$btn-info-color:                 #fff !default;
+$btn-info-bg:                    $brand-info !default;
+$btn-info-border:                darken($btn-info-bg, 5%) !default;
+
+$btn-warning-color:              #fff !default;
+$btn-warning-bg:                 $brand-warning !default;
+$btn-warning-border:             darken($btn-warning-bg, 5%) !default;
+
+$btn-danger-color:               #fff !default;
+$btn-danger-bg:                  $brand-danger !default;
+$btn-danger-border:              darken($btn-danger-bg, 5%) !default;
+
+$btn-link-disabled-color:        $gray-light !default;
+
+// Allows for customizing button radius independently from global border radius
+$btn-border-radius-base:         $border-radius-base !default;
+$btn-border-radius-large:        $border-radius-large !default;
+$btn-border-radius-small:        $border-radius-small !default;
+
+
+//== Forms
+//
+//##
+
+//** `<input>` background color
+$input-bg:                       #fff !default;
+//** `<input disabled>` background color
+$input-bg-disabled:              $gray-lighter !default;
+
+//** Text color for `<input>`s
+$input-color:                    $gray !default;
+//** `<input>` border color
+$input-border:                   #ccc !default;
+
+// TODO: Rename `$input-border-radius` to `$input-border-radius-base` in v4
+//** Default `.form-control` border radius
+// This has no effect on `<select>`s in some browsers, due to the limited stylability of `<select>`s in CSS.
+$input-border-radius:            $border-radius-base !default;
+//** Large `.form-control` border radius
+$input-border-radius-large:      $border-radius-large !default;
+//** Small `.form-control` border radius
+$input-border-radius-small:      $border-radius-small !default;
+
+//** Border color for inputs on focus
+$input-border-focus:             #66afe9 !default;
+
+//** Placeholder text color
+$input-color-placeholder:        #999 !default;
+
+//** Default `.form-control` height
+$input-height-base:              ($line-height-computed + ($padding-base-vertical * 2) + 2) !default;
+//** Large `.form-control` height
+$input-height-large:             (ceil($font-size-large * $line-height-large) + ($padding-large-vertical * 2) + 2) !default;
+//** Small `.form-control` height
+$input-height-small:             (floor($font-size-small * $line-height-small) + ($padding-small-vertical * 2) + 2) !default;
+
+//** `.form-group` margin
+$form-group-margin-bottom:       15px !default;
+
+$legend-color:                   $gray-dark !default;
+$legend-border-color:            #e5e5e5 !default;
+
+//** Background color for textual input addons
+$input-group-addon-bg:           $gray-lighter !default;
+//** Border color for textual input addons
+$input-group-addon-border-color: $input-border !default;
+
+//** Disabled cursor for form controls and buttons.
+$cursor-disabled:                not-allowed !default;
+
+
+//== Dropdowns
+//
+//## Dropdown menu container and contents.
+
+//** Background for the dropdown menu.
+$dropdown-bg:                    #fff !default;
+//** Dropdown menu `border-color`.
+$dropdown-border:                rgba(0,0,0,.15) !default;
+//** Dropdown menu `border-color` **for IE8**.
+$dropdown-fallback-border:       #ccc !default;
+//** Divider color for between dropdown items.
+$dropdown-divider-bg:            #e5e5e5 !default;
+
+//** Dropdown link text color.
+$dropdown-link-color:            $gray-dark !default;
+//** Hover color for dropdown links.
+$dropdown-link-hover-color:      darken($gray-dark, 5%) !default;
+//** Hover background for dropdown links.
+$dropdown-link-hover-bg:         #f5f5f5 !default;
+
+//** Active dropdown menu item text color.
+$dropdown-link-active-color:     $component-active-color !default;
+//** Active dropdown menu item background color.
+$dropdown-link-active-bg:        $component-active-bg !default;
+
+//** Disabled dropdown menu item background color.
+$dropdown-link-disabled-color:   $gray-light !default;
+
+//** Text color for headers within dropdown menus.
+$dropdown-header-color:          $gray-light !default;
+
+//** Deprecated `$dropdown-caret-color` as of v3.1.0
+$dropdown-caret-color:           #000 !default;
+
+
+//-- Z-index master list
+//
+// Warning: Avoid customizing these values. They're used for a bird's eye view
+// of components dependent on the z-axis and are designed to all work together.
+//
+// Note: These variables are not generated into the Customizer.
+
+$zindex-navbar:            1000 !default;
+$zindex-dropdown:          1000 !default;
+$zindex-popover:           1060 !default;
+$zindex-tooltip:           1070 !default;
+$zindex-navbar-fixed:      1030 !default;
+$zindex-modal-background:  1040 !default;
+$zindex-modal:             1050 !default;
+
+
+//== Media queries breakpoints
+//
+//## Define the breakpoints at which your layout will change, adapting to different screen sizes.
+
+// Extra small screen / phone
+//** Deprecated `$screen-xs` as of v3.0.1
+$screen-xs:                  480px !default;
+//** Deprecated `$screen-xs-min` as of v3.2.0
+$screen-xs-min:              $screen-xs !default;
+//** Deprecated `$screen-phone` as of v3.0.1
+$screen-phone:               $screen-xs-min !default;
+
+// Small screen / tablet
+//** Deprecated `$screen-sm` as of v3.0.1
+$screen-sm:                  768px !default;
+$screen-sm-min:              $screen-sm !default;
+//** Deprecated `$screen-tablet` as of v3.0.1
+$screen-tablet:              $screen-sm-min !default;
+
+// Medium screen / desktop
+//** Deprecated `$screen-md` as of v3.0.1
+$screen-md:                  992px !default;
+$screen-md-min:              $screen-md !default;
+//** Deprecated `$screen-desktop` as of v3.0.1
+$screen-desktop:             $screen-md-min !default;
+
+// Large screen / wide desktop
+//** Deprecated `$screen-lg` as of v3.0.1
+$screen-lg:                  1200px !default;
+$screen-lg-min:              $screen-lg !default;
+//** Deprecated `$screen-lg-desktop` as of v3.0.1
+$screen-lg-desktop:          $screen-lg-min !default;
+
+// So media queries don't overlap when required, provide a maximum
+$screen-xs-max:              ($screen-sm-min - 1) !default;
+$screen-sm-max:              ($screen-md-min - 1) !default;
+$screen-md-max:              ($screen-lg-min - 1) !default;
+
+
+//== Grid system
+//
+//## Define your custom responsive grid.
+
+//** Number of columns in the grid.
+$grid-columns:              12 !default;
+//** Padding between columns. Gets divided in half for the left and right.
+$grid-gutter-width:         30px !default;
+// Navbar collapse
+//** Point at which the navbar becomes uncollapsed.
+$grid-float-breakpoint:     $screen-sm-min !default;
+//** Point at which the navbar begins collapsing.
+$grid-float-breakpoint-max: ($grid-float-breakpoint - 1) !default;
+
+
+//== Container sizes
+//
+//## Define the maximum width of `.container` for different screen sizes.
+
+// Small screen / tablet
+$container-tablet:             (720px + $grid-gutter-width) !default;
+//** For `$screen-sm-min` and up.
+$container-sm:                 $container-tablet !default;
+
+// Medium screen / desktop
+$container-desktop:            (940px + $grid-gutter-width) !default;
+//** For `$screen-md-min` and up.
+$container-md:                 $container-desktop !default;
+
+// Large screen / wide desktop
+$container-large-desktop:      (1140px + $grid-gutter-width) !default;
+//** For `$screen-lg-min` and up.
+$container-lg:                 $container-large-desktop !default;
+
+
+//== Navbar
+//
+//##
+
+// Basics of a navbar
+$navbar-height:                    50px !default;
+$navbar-margin-bottom:             $line-height-computed !default;
+$navbar-border-radius:             $border-radius-base !default;
+$navbar-padding-horizontal:        floor(($grid-gutter-width / 2)) !default;
+$navbar-padding-vertical:          (($navbar-height - $line-height-computed) / 2) !default;
+$navbar-collapse-max-height:       340px !default;
+
+$navbar-default-color:             #777 !default;
+$navbar-default-bg:                #f8f8f8 !default;
+$navbar-default-border:            darken($navbar-default-bg, 6.5%) !default;
+
+// Navbar links
+$navbar-default-link-color:                #777 !default;
+$navbar-default-link-hover-color:          #333 !default;
+$navbar-default-link-hover-bg:             transparent !default;
+$navbar-default-link-active-color:         #555 !default;
+$navbar-default-link-active-bg:            darken($navbar-default-bg, 6.5%) !default;
+$navbar-default-link-disabled-color:       #ccc !default;
+$navbar-default-link-disabled-bg:          transparent !default;
+
+// Navbar brand label
+$navbar-default-brand-color:               $navbar-default-link-color !default;
+$navbar-default-brand-hover-color:         darken($navbar-default-brand-color, 10%) !default;
+$navbar-default-brand-hover-bg:            transparent !default;
+
+// Navbar toggle
+$navbar-default-toggle-hover-bg:           #ddd !default;
+$navbar-default-toggle-icon-bar-bg:        #888 !default;
+$navbar-default-toggle-border-color:       #ddd !default;
+
+
+//=== Inverted navbar
+// Reset inverted navbar basics
+$navbar-inverse-color:                      lighten($gray-light, 15%) !default;
+$navbar-inverse-bg:                         #222 !default;
+$navbar-inverse-border:                     darken($navbar-inverse-bg, 10%) !default;
+
+// Inverted navbar links
+$navbar-inverse-link-color:                 lighten($gray-light, 15%) !default;
+$navbar-inverse-link-hover-color:           #fff !default;
+$navbar-inverse-link-hover-bg:              transparent !default;
+$navbar-inverse-link-active-color:          $navbar-inverse-link-hover-color !default;
+$navbar-inverse-link-active-bg:             darken($navbar-inverse-bg, 10%) !default;
+$navbar-inverse-link-disabled-color:        #444 !default;
+$navbar-inverse-link-disabled-bg:           transparent !default;
+
+// Inverted navbar brand label
+$navbar-inverse-brand-color:                $navbar-inverse-link-color !default;
+$navbar-inverse-brand-hover-color:          #fff !default;
+$navbar-inverse-brand-hover-bg:             transparent !default;
+
+// Inverted navbar toggle
+$navbar-inverse-toggle-hover-bg:            #333 !default;
+$navbar-inverse-toggle-icon-bar-bg:         #fff !default;
+$navbar-inverse-toggle-border-color:        #333 !default;
+
+
+//== Navs
+//
+//##
+
+//=== Shared nav styles
+$nav-link-padding:                          10px 15px !default;
+$nav-link-hover-bg:                         $gray-lighter !default;
+
+$nav-disabled-link-color:                   $gray-light !default;
+$nav-disabled-link-hover-color:             $gray-light !default;
+
+//== Tabs
+$nav-tabs-border-color:                     #ddd !default;
+
+$nav-tabs-link-hover-border-color:          $gray-lighter !default;
+
+$nav-tabs-active-link-hover-bg:             $body-bg !default;
+$nav-tabs-active-link-hover-color:          $gray !default;
+$nav-tabs-active-link-hover-border-color:   #ddd !default;
+
+$nav-tabs-justified-link-border-color:            #ddd !default;
+$nav-tabs-justified-active-link-border-color:     $body-bg !default;
+
+//== Pills
+$nav-pills-border-radius:                   $border-radius-base !default;
+$nav-pills-active-link-hover-bg:            $component-active-bg !default;
+$nav-pills-active-link-hover-color:         $component-active-color !default;
+
+
+//== Pagination
+//
+//##
+
+$pagination-color:                     $link-color !default;
+$pagination-bg:                        #fff !default;
+$pagination-border:                    #ddd !default;
+
+$pagination-hover-color:               $link-hover-color !default;
+$pagination-hover-bg:                  $gray-lighter !default;
+$pagination-hover-border:              #ddd !default;
+
+$pagination-active-color:              #fff !default;
+$pagination-active-bg:                 $brand-primary !default;
+$pagination-active-border:             $brand-primary !default;
+
+$pagination-disabled-color:            $gray-light !default;
+$pagination-disabled-bg:               #fff !default;
+$pagination-disabled-border:           #ddd !default;
+
+
+//== Pager
+//
+//##
+
+$pager-bg:                             $pagination-bg !default;
+$pager-border:                         $pagination-border !default;
+$pager-border-radius:                  15px !default;
+
+$pager-hover-bg:                       $pagination-hover-bg !default;
+
+$pager-active-bg:                      $pagination-active-bg !default;
+$pager-active-color:                   $pagination-active-color !default;
+
+$pager-disabled-color:                 $pagination-disabled-color !default;
+
+
+//== Jumbotron
+//
+//##
+
+$jumbotron-padding:              30px !default;
+$jumbotron-color:                inherit !default;
+$jumbotron-bg:                   $gray-lighter !default;
+$jumbotron-heading-color:        inherit !default;
+$jumbotron-font-size:            ceil(($font-size-base * 1.5)) !default;
+$jumbotron-heading-font-size:    ceil(($font-size-base * 4.5)) !default;
+
+
+//== Form states and alerts
+//
+//## Define colors for form feedback states and, by default, alerts.
+
+$state-success-text:             #3c763d !default;
+$state-success-bg:               #dff0d8 !default;
+$state-success-border:           darken(adjust-hue($state-success-bg, -10), 5%) !default;
+
+$state-info-text:                #31708f !default;
+$state-info-bg:                  #d9edf7 !default;
+$state-info-border:              darken(adjust-hue($state-info-bg, -10), 7%) !default;
+
+$state-warning-text:             #8a6d3b !default;
+$state-warning-bg:               #fcf8e3 !default;
+$state-warning-border:           darken(adjust-hue($state-warning-bg, -10), 5%) !default;
+
+$state-danger-text:              #a94442 !default;
+$state-danger-bg:                #f2dede !default;
+$state-danger-border:            darken(adjust-hue($state-danger-bg, -10), 5%) !default;
+
+
+//== Tooltips
+//
+//##
+
+//** Tooltip max width
+$tooltip-max-width:           200px !default;
+//** Tooltip text color
+$tooltip-color:               #fff !default;
+//** Tooltip background color
+$tooltip-bg:                  #000 !default;
+$tooltip-opacity:             .9 !default;
+
+//** Tooltip arrow width
+$tooltip-arrow-width:         5px !default;
+//** Tooltip arrow color
+$tooltip-arrow-color:         $tooltip-bg !default;
+
+
+//== Popovers
+//
+//##
+
+//** Popover body background color
+$popover-bg:                          #fff !default;
+//** Popover maximum width
+$popover-max-width:                   276px !default;
+//** Popover border color
+$popover-border-color:                rgba(0,0,0,.2) !default;
+//** Popover fallback border color
+$popover-fallback-border-color:       #ccc !default;
+
+//** Popover title background color
+$popover-title-bg:                    darken($popover-bg, 3%) !default;
+
+//** Popover arrow width
+$popover-arrow-width:                 10px !default;
+//** Popover arrow color
+$popover-arrow-color:                 $popover-bg !default;
+
+//** Popover outer arrow width
+$popover-arrow-outer-width:           ($popover-arrow-width + 1) !default;
+//** Popover outer arrow color
+$popover-arrow-outer-color:           fade_in($popover-border-color, 0.05) !default;
+//** Popover outer arrow fallback color
+$popover-arrow-outer-fallback-color:  darken($popover-fallback-border-color, 20%) !default;
+
+
+//== Labels
+//
+//##
+
+//** Default label background color
+$label-default-bg:            $gray-light !default;
+//** Primary label background color
+$label-primary-bg:            $brand-primary !default;
+//** Success label background color
+$label-success-bg:            $brand-success !default;
+//** Info label background color
+$label-info-bg:               $brand-info !default;
+//** Warning label background color
+$label-warning-bg:            $brand-warning !default;
+//** Danger label background color
+$label-danger-bg:             $brand-danger !default;
+
+//** Default label text color
+$label-color:                 #fff !default;
+//** Default text color of a linked label
+$label-link-hover-color:      #fff !default;
+
+
+//== Modals
+//
+//##
+
+//** Padding applied to the modal body
+$modal-inner-padding:         15px !default;
+
+//** Padding applied to the modal title
+$modal-title-padding:         15px !default;
+//** Modal title line-height
+$modal-title-line-height:     $line-height-base !default;
+
+//** Background color of modal content area
+$modal-content-bg:                             #fff !default;
+//** Modal content border color
+$modal-content-border-color:                   rgba(0,0,0,.2) !default;
+//** Modal content border color **for IE8**
+$modal-content-fallback-border-color:          #999 !default;
+
+//** Modal backdrop background color
+$modal-backdrop-bg:           #000 !default;
+//** Modal backdrop opacity
+$modal-backdrop-opacity:      .5 !default;
+//** Modal header border color
+$modal-header-border-color:   #e5e5e5 !default;
+//** Modal footer border color
+$modal-footer-border-color:   $modal-header-border-color !default;
+
+$modal-lg:                    900px !default;
+$modal-md:                    600px !default;
+$modal-sm:                    300px !default;
+
+
+//== Alerts
+//
+//## Define alert colors, border radius, and padding.
+
+$alert-padding:               15px !default;
+$alert-border-radius:         $border-radius-base !default;
+$alert-link-font-weight:      bold !default;
+
+$alert-success-bg:            $state-success-bg !default;
+$alert-success-text:          $state-success-text !default;
+$alert-success-border:        $state-success-border !default;
+
+$alert-info-bg:               $state-info-bg !default;
+$alert-info-text:             $state-info-text !default;
+$alert-info-border:           $state-info-border !default;
+
+$alert-warning-bg:            $state-warning-bg !default;
+$alert-warning-text:          $state-warning-text !default;
+$alert-warning-border:        $state-warning-border !default;
+
+$alert-danger-bg:             $state-danger-bg !default;
+$alert-danger-text:           $state-danger-text !default;
+$alert-danger-border:         $state-danger-border !default;
+
+
+//== Progress bars
+//
+//##
+
+//** Background color of the whole progress component
+$progress-bg:                 #f5f5f5 !default;
+//** Progress bar text color
+$progress-bar-color:          #fff !default;
+//** Variable for setting rounded corners on progress bar.
+$progress-border-radius:      $border-radius-base !default;
+
+//** Default progress bar color
+$progress-bar-bg:             $brand-primary !default;
+//** Success progress bar color
+$progress-bar-success-bg:     $brand-success !default;
+//** Warning progress bar color
+$progress-bar-warning-bg:     $brand-warning !default;
+//** Danger progress bar color
+$progress-bar-danger-bg:      $brand-danger !default;
+//** Info progress bar color
+$progress-bar-info-bg:        $brand-info !default;
+
+
+//== List group
+//
+//##
+
+//** Background color on `.list-group-item`
+$list-group-bg:                 #fff !default;
+//** `.list-group-item` border color
+$list-group-border:             #ddd !default;
+//** List group border radius
+$list-group-border-radius:      $border-radius-base !default;
+
+//** Background color of single list items on hover
+$list-group-hover-bg:           #f5f5f5 !default;
+//** Text color of active list items
+$list-group-active-color:       $component-active-color !default;
+//** Background color of active list items
+$list-group-active-bg:          $component-active-bg !default;
+//** Border color of active list elements
+$list-group-active-border:      $list-group-active-bg !default;
+//** Text color for content within active list items
+$list-group-active-text-color:  lighten($list-group-active-bg, 40%) !default;
+
+//** Text color of disabled list items
+$list-group-disabled-color:      $gray-light !default;
+//** Background color of disabled list items
+$list-group-disabled-bg:         $gray-lighter !default;
+//** Text color for content within disabled list items
+$list-group-disabled-text-color: $list-group-disabled-color !default;
+
+$list-group-link-color:         #555 !default;
+$list-group-link-hover-color:   $list-group-link-color !default;
+$list-group-link-heading-color: #333 !default;
+
+
+//== Panels
+//
+//##
+
+$panel-bg:                    #fff !default;
+$panel-body-padding:          15px !default;
+$panel-heading-padding:       10px 15px !default;
+$panel-footer-padding:        $panel-heading-padding !default;
+$panel-border-radius:         $border-radius-base !default;
+
+//** Border color for elements within panels
+$panel-inner-border:          #ddd !default;
+$panel-footer-bg:             #f5f5f5 !default;
+
+$panel-default-text:          $gray-dark !default;
+$panel-default-border:        #ddd !default;
+$panel-default-heading-bg:    #f5f5f5 !default;
+
+$panel-primary-text:          #fff !default;
+$panel-primary-border:        $brand-primary !default;
+$panel-primary-heading-bg:    $brand-primary !default;
+
+$panel-success-text:          $state-success-text !default;
+$panel-success-border:        $state-success-border !default;
+$panel-success-heading-bg:    $state-success-bg !default;
+
+$panel-info-text:             $state-info-text !default;
+$panel-info-border:           $state-info-border !default;
+$panel-info-heading-bg:       $state-info-bg !default;
+
+$panel-warning-text:          $state-warning-text !default;
+$panel-warning-border:        $state-warning-border !default;
+$panel-warning-heading-bg:    $state-warning-bg !default;
+
+$panel-danger-text:           $state-danger-text !default;
+$panel-danger-border:         $state-danger-border !default;
+$panel-danger-heading-bg:     $state-danger-bg !default;
+
+
+//== Thumbnails
+//
+//##
+
+//** Padding around the thumbnail image
+$thumbnail-padding:           4px !default;
+//** Thumbnail background color
+$thumbnail-bg:                $body-bg !default;
+//** Thumbnail border color
+$thumbnail-border:            #ddd !default;
+//** Thumbnail border radius
+$thumbnail-border-radius:     $border-radius-base !default;
+
+//** Custom text color for thumbnail captions
+$thumbnail-caption-color:     $text-color !default;
+//** Padding around the thumbnail caption
+$thumbnail-caption-padding:   9px !default;
+
+
+//== Wells
+//
+//##
+
+$well-bg:                     #f5f5f5 !default;
+$well-border:                 darken($well-bg, 7%) !default;
+
+
+//== Badges
+//
+//##
+
+$badge-color:                 #fff !default;
+//** Linked badge text color on hover
+$badge-link-hover-color:      #fff !default;
+$badge-bg:                    $gray-light !default;
+
+//** Badge text color in active nav link
+$badge-active-color:          $link-color !default;
+//** Badge background color in active nav link
+$badge-active-bg:             #fff !default;
+
+$badge-font-weight:           bold !default;
+$badge-line-height:           1 !default;
+$badge-border-radius:         10px !default;
+
+
+//== Breadcrumbs
+//
+//##
+
+$breadcrumb-padding-vertical:   8px !default;
+$breadcrumb-padding-horizontal: 15px !default;
+//** Breadcrumb background color
+$breadcrumb-bg:                 #f5f5f5 !default;
+//** Breadcrumb text color
+$breadcrumb-color:              #ccc !default;
+//** Text color of current page in the breadcrumb
+$breadcrumb-active-color:       $gray-light !default;
+//** Textual separator for between breadcrumb elements
+$breadcrumb-separator:          "/" !default;
+
+
+//== Carousel
+//
+//##
+
+$carousel-text-shadow:                        0 1px 2px rgba(0,0,0,.6) !default;
+
+$carousel-control-color:                      #fff !default;
+$carousel-control-width:                      15% !default;
+$carousel-control-opacity:                    .5 !default;
+$carousel-control-font-size:                  20px !default;
+
+$carousel-indicator-active-bg:                #fff !default;
+$carousel-indicator-border-color:             #fff !default;
+
+$carousel-caption-color:                      #fff !default;
+
+
+//== Close
+//
+//##
+
+$close-font-weight:           bold !default;
+$close-color:                 #000 !default;
+$close-text-shadow:           0 1px 0 #fff !default;
+
+
+//== Code
+//
+//##
+
+$code-color:                  #c7254e !default;
+$code-bg:                     #f9f2f4 !default;
+
+$kbd-color:                   #fff !default;
+$kbd-bg:                      #333 !default;
+
+$pre-bg:                      #f5f5f5 !default;
+$pre-color:                   $gray-dark !default;
+$pre-border-color:            #ccc !default;
+$pre-scrollable-max-height:   340px !default;
+
+
+//== Type
+//
+//##
+
+//** Horizontal offset for forms and lists.
+$component-offset-horizontal: 180px !default;
+//** Text muted color
+$text-muted:                  $gray-light !default;
+//** Abbreviations and acronyms border color
+$abbr-border-color:           $gray-light !default;
+//** Headings small color
+$headings-small-color:        $gray-light !default;
+//** Blockquote small color
+$blockquote-small-color:      $gray-light !default;
+//** Blockquote font size
+$blockquote-font-size:        ($font-size-base * 1.25) !default;
+//** Blockquote border color
+$blockquote-border-color:     $gray-lighter !default;
+//** Page header border color
+$page-header-border-color:    $gray-lighter !default;
+//** Width of horizontal description list titles
+$dl-horizontal-offset:        $component-offset-horizontal !default;
+//** Point at which .dl-horizontal becomes horizontal
+$dl-horizontal-breakpoint:    $grid-float-breakpoint !default;
+//** Horizontal line color.
+$hr-border:                   $gray-lighter !default;
+
+
+// Bootstrap Material Design variables start with mdb-
+$mdb-brand-inverse: $indigo !default;
+
+
+/* ANIMATION */
+$mdb-animation-curve-fast-out-slow-in: cubic-bezier(0.4, 0, 0.2, 1) !default;
+$mdb-animation-curve-linear-out-slow-in: cubic-bezier(0, 0, 0.2, 1) !default;
+$mdb-animation-curve-fast-out-linear-in: cubic-bezier(0.4, 0, 1, 1) !default;
+$mdb-animation-curve-default: $mdb-animation-curve-fast-out-slow-in !default;
+
+
+//---
+// FIXME: Similar but not quite the same as Bootstrap variables
+// FIXME: these need to either a) be converted to $mdb- or b) converted to bs variables
+$contrast-factor: 40% !default;
+//---
+
+
+
+
+// --------------------
+// inputs
+$mdb-input-placeholder-color: #AAAAAA !default;
+$mdb-input-underline-color: #D2D2D2 !default;
+$mdb-label-static-size-ratio: 75 / 100 !default;
+$mdb-help-block-size-ratio: 75 / 100 !default;
+
+$mdb-input-font-size-base: 14px !default;
+$mdb-input-font-size-large: ceil(($font-size-base * 1.25)) !default; // ~20px
+$mdb-input-font-size-small: ceil(($font-size-base * 0.75)) !default; // ~12px
+
+// FIXME: with #733 customization of bootstrap, consider how these could be based on the original bs customized variables
+//** Unit-less `line-height` for use in components like buttons.
+
+$mdb-input-line-height-base:        $line-height-base; //1.428571429 !default; // 20/14
+//** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
+$mdb-input-line-height-computed:    floor(($mdb-input-font-size-base * $mdb-input-line-height-base)) !default; // ~20px
+$mdb-input-line-height-large:         1.3333333 !default; // extra decimals for Win 8.1 Chrome
+$mdb-input-line-height-small:         1.5 !default;
+
+//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).
+$mdb-input-padding-base-vertical:     8px - 1px !default; // was 6.
+$mdb-input-padding-base-horizontal:   0 !default; // was 12.
+$mdb-label-as-placeholder-shim-base:  0 !default; // manual adjustment of label top when positioned as placeholder
+$mdb-label-top-margin-base:           16px !default;
+
+$mdb-input-padding-large-vertical:    10px - 1px !default; // 10
+$mdb-input-padding-large-horizontal:  0 !default;  // 16
+$mdb-label-as-placeholder-shim-large: -4px !default; // manual adjustment of label top when positioned as placeholder
+$mdb-label-top-margin-large:          16px !default;
+
+$mdb-input-padding-small-vertical:    4px - 1px !default; // 5
+$mdb-input-padding-small-horizontal:  0 !default; // 10
+$mdb-label-as-placeholder-shim-small: 8px !default; // manual adjustment of label top when positioned as placeholder
+$mdb-label-top-margin-small:          12px !default;
+
+$mdb-input-padding-xs-vertical:       2px !default; // 1
+$mdb-input-padding-xs-horizontal:     0 !default; // 5
+
+$mdb-input-border-radius-base:        0 !default;
+$mdb-input-border-radius-large:       0 !default;
+$mdb-input-border-radius-small:       0 !default;
+
+
+//** Default `.form-control` height
+$mdb-input-height-base:              ($mdb-input-line-height-computed + ($mdb-input-padding-base-vertical * 2) + 2) !default;
+//** Large `.form-control` height
+$mdb-input-height-large:             (ceil($mdb-input-font-size-large * $mdb-input-line-height-large) + ($mdb-input-padding-large-vertical * 2) + 2) !default;
+//** Small `.form-control` height
+$mdb-input-height-small:             (floor($mdb-input-font-size-small * $mdb-input-line-height-small) + ($mdb-input-padding-small-vertical * 2) + 2) !default;
+
+
+
+
+// Card
+$mdb-card-body-text: $mdb-text-color-primary !default;
+$mdb-card-body-background: #fff !default;
+$mdb-card-image-headline: #fff !default;
+
+$text-disabled: #a8a8a8 !default;
+$background-disabled: #eaeaea !default;
+
+// Checkboxes
+$mdb-checkbox-size: 20px !default;
+$mdb-checkbox-animation-ripple: 500ms !default;
+$mdb-checkbox-animation-check: 0.3s !default;
+$mdb-checkbox-checked-color: $brand-primary !default;
+
+$mdb-checkbox-label-color: $mdb-label-color !default;
+$mdb-checkbox-border-color: $mdb-label-color-toggle-focus !default;
+
+// Popovers and Popups
+$mdb-popover-background: rgba(101, 101, 101, 0.9) !default;
+$mdb-popover-color: #ececec !default;
+
+// Dropdown Menu
+$mdb-dropdown-font-size: 13px !default;
+
+// Toggle
+$mdb-toggle-label-color: $mdb-label-color !default;
+
+// Radio:
+$mdb-radio-label-color: $mdb-label-color !default;
+$mdb-radio-color-off: $mdb-label-color-toggle-focus !default;
+$mdb-radio-color-on: $brand-primary !default;
+
+// Buttons:
+$mdb-btn-font-size-base: 12px !default;
+$mdb-btn-font-size-lg: 14px !default;
+$mdb-btn-font-size-sm: 11px !default;
+$mdb-btn-font-size-xs: 10px !default;
+
+
+$mdb-btn-background-color: $body-bg; //transparent !default;
+$mdb-btn-background-color-text: $mdb-text-color-primary !default;
+
+
+$mdl-btn-border-radus: 2px !default;
+//$mdb-btn-primary-color: unquote("rgba(#{$rgb-grey-500}, 0.20)") !default;
+
+$mdb-btn-fab-size: 56px !default;
+$mdb-btn-fab-size-mini: 40px !default;
+$mdb-btn-fab-font-size: 24px !default;
+
+$mdb-btn-icon-size: 32px !default;
+$mdb-btn-icon-size-mini: 17px !default;
+
+/* SHADOWS */
+$mdb-shadow-key-umbra-opacity: 0.2 !default;
+$mdb-shadow-key-penumbra-opacity: 0.14 !default;
+$mdb-shadow-ambient-shadow-opacity: 0.12 !default;
+
+
+$fancy-shadow: 0 13px 39px -10px rgba(0, 0, 0, 0.65), 0 1px 25px 0px rgba(0, 0, 0, 0.15);
+
+
+$general-transition-time:  300ms !default;
+
+$slow-transition-time:           370ms !default;
+$fast-transition-time:           150ms !default;
+
+$transition-linear:                                   linear !default;
+$transition-bezier:         cubic-bezier(0.34, 1.61, 0.7, 1) !default;
+$transition-ease:           ease 0s;
+
+//variables for social
+$social-facebook: 			#3b5998;
+$social-twitter: 			#55acee;
+$social-pinterest: 			#cc2127;
+$social-google: 			#dd4b39;
+$social-linkedin: 			#0976b4;
+$social-dribbble: 			#ea4c89;
+$social-github: 			#333333;
+$social-youtube: 			#e52d27;
+$social-instagram: 		    #125688;
+$social-reddit: 			#ff4500;
+$social-tumblr: 			#35465c;
+$social-behance: 			#1769ff;
+
+$transparent-bg:             transparent !default;
+
+$background-light-grey:     #E8E7E3 !default;
+$background-lighter-grey:   #F0EFEB !default;
+$font-background-light-grey: #9C9B99 !default;
+$font-hover-background-light-grey: #5E5E5C !default;
+
+
+// variables from lbd
+
+$transition-ease-in:              ease-in !default;
+$transition-ease-out:             ease-out !default;
+$ultra-fast-transition-time:      60ms  !default;
+$navbar-padding-a:               10px 15px;
+$padding-zero:                   0px !default;
+$sidebar-width:               calc(100% - 260px) !default;
+$topbar-back:          topbar-back !default;
+$bottombar-back:       bottombar-back !default;
+$topbar-x:             topbar-x !default;
+$bottombar-x:          bottombar-x !default;
+$margin-bottom:                0 0 10px 0 !default;
+$margin-base-vertical:         15px !default;
+
+// Variables for datetimepicker //
+$padding-default-vertical:     10px !default;
+$medium-pale-bg:             #F1EAE0 !default;
+$pale-bg:                    #F9F7F3 !default;
diff --git a/ACSmI/Billing/app/assets/stylesheets/md/mixins/_chartist.scss b/ACSmI/Billing/app/assets/stylesheets/md/mixins/_chartist.scss
new file mode 100644
index 0000000000000000000000000000000000000000..df8f8b09349f9d58bf217e9c859653813e17d4bb
--- /dev/null
+++ b/ACSmI/Billing/app/assets/stylesheets/md/mixins/_chartist.scss
@@ -0,0 +1,89 @@
+// Scales for responsive SVG containers
+$ct-scales: ((1), (15/16), (8/9), (5/6), (4/5), (3/4), (2/3), (5/8), (1/1.618), (3/5), (9/16), (8/15), (1/2), (2/5), (3/8), (1/3), (1/4)) !default;
+$ct-scales-names: (ct-square, ct-minor-second, ct-major-second, ct-minor-third, ct-major-third, ct-perfect-fourth, ct-perfect-fifth, ct-minor-sixth, ct-golden-section, ct-major-sixth, ct-minor-seventh, ct-major-seventh, ct-octave, ct-major-tenth, ct-major-eleventh, ct-major-twelfth, ct-double-octave) !default;
+
+// Class names to be used when generating CSS
+$ct-class-chart: ct-chart !default;
+$ct-class-chart-line: ct-chart-line !default;
+$ct-class-chart-bar: ct-chart-bar !default;
+$ct-class-horizontal-bars: ct-horizontal-bars !default;
+$ct-class-chart-pie: ct-chart-pie !default;
+$ct-class-chart-donut: ct-chart-donut !default;
+$ct-class-label: ct-label !default;
+$ct-class-series: ct-series !default;
+$ct-class-line: ct-line !default;
+$ct-class-point: ct-point !default;
+$ct-class-area: ct-area !default;
+$ct-class-bar: ct-bar !default;
+$ct-class-slice-pie: ct-slice-pie !default;
+$ct-class-slice-donut: ct-slice-donut !default;
+$ct-class-grid: ct-grid !default;
+$ct-class-vertical: ct-vertical !default;
+$ct-class-horizontal: ct-horizontal !default;
+$ct-class-start: ct-start !default;
+$ct-class-end: ct-end !default;
+
+// Container ratio
+$ct-container-ratio: (1/1.618) !default;
+
+// Text styles for labels
+$ct-text-color: rgba(0, 0, 0, 0.4) !default;
+$ct-text-size: 1.3rem !default;
+$ct-text-align: flex-start !default;
+$ct-text-justify: flex-start !default;
+$ct-text-line-height: 1;
+
+.ct-big-chart-white{
+    $ct-grid-color: rgba(250, 250, 250, 0.7) !default;
+}
+// Grid styles
+$ct-grid-color: rgba(0, 0, 0, 0.2) !default;
+$ct-grid-dasharray: 2px !default;
+$ct-grid-width: 1px !default;
+
+// Line chart properties
+$ct-line-width: 3px !default;
+$ct-line-dasharray: false !default;
+$ct-point-size: 8px !default;
+// Line chart point, can be either round or square
+$ct-point-shape: round !default;
+// Area fill transparency between 0 and 1
+$ct-area-opacity: 0.8 !default;
+
+// Bar chart bar width
+$ct-bar-width: 10px !default;
+
+// Donut width (If donut width is to big it can cause issues where the shape gets distorted)
+$ct-donut-width: 60px !default;
+
+// If set to true it will include the default classes and generate CSS output. If you're planning to use the mixins you
+// should set this property to false
+$ct-include-classes: true !default;
+
+// If this is set to true the CSS will contain colored series. You can extend or change the color with the
+// properties below
+$ct-include-colored-series: $ct-include-classes !default;
+
+// If set to true this will include all responsive container variations using the scales defined at the top of the script
+$ct-include-alternative-responsive-containers: $ct-include-classes !default;
+
+// Series names and colors. This can be extended or customized as desired. Just add more series and colors.
+$ct-series-names: (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) !default;
+$ct-series-colors: (
+
+  $brand-info,
+  $brand-danger,
+  $brand-warning,
+  $brand-primary,
+  $brand-success,
+  $font-background-light-grey,
+  $gray-color,
+  $social-google,
+  $social-tumblr,
+  $social-youtube,
+  $social-twitter,
+  $social-pinterest,
+  $social-behance,
+  #6188e2,
+  #a748ca
+) !default;
diff --git a/ACSmI/Billing/app/assets/stylesheets/md/mixins/_transparency.scss b/ACSmI/Billing/app/assets/stylesheets/md/mixins/_transparency.scss
new file mode 100644
index 0000000000000000000000000000000000000000..da32b745dce6e1fe55d96c89280ead9619da1c5d
--- /dev/null
+++ b/ACSmI/Billing/app/assets/stylesheets/md/mixins/_transparency.scss
@@ -0,0 +1,20 @@
+// Opacity
+
+@mixin opacity($opacity) {
+  opacity: $opacity;
+  // IE8 filter
+  $opacity-ie: ($opacity * 100);
+  filter: #{alpha(opacity=$opacity-ie)};
+}
+
+@mixin black-filter($opacity){
+    top: 0;
+    left: 0;
+    height: 100%;
+    width: 100%;
+    position: absolute;
+    background-color: rgba(17,17,17,$opacity);
+    display: block;
+    content: "";
+    z-index: 1; 
+}
\ No newline at end of file
diff --git a/ACSmI/Billing/app/assets/stylesheets/md/mixins/_vendor-prefixes.scss b/ACSmI/Billing/app/assets/stylesheets/md/mixins/_vendor-prefixes.scss
new file mode 100644
index 0000000000000000000000000000000000000000..78805ef22288f758d46f66d960ef2104db607035
--- /dev/null
+++ b/ACSmI/Billing/app/assets/stylesheets/md/mixins/_vendor-prefixes.scss
@@ -0,0 +1,185 @@
+// User select
+// For selecting text on the page
+
+@mixin user-select($select) {
+  -webkit-user-select: $select;
+     -moz-user-select: $select;
+      -ms-user-select: $select; // IE10+
+          user-select: $select;
+}
+
+@mixin box-shadow($shadow...) {
+  -webkit-box-shadow: $shadow; // iOS <4.3 & Android <4.1
+          box-shadow: $shadow;
+}
+
+// Box sizing
+@mixin box-sizing($boxmodel) {
+  -webkit-box-sizing: $boxmodel;
+     -moz-box-sizing: $boxmodel;
+          box-sizing: $boxmodel;
+}
+
+
+@mixin transition($time, $type){
+    -webkit-transition: all $time $type;
+    -moz-transition: all $time $type;
+    -o-transition: all $time $type;
+    -ms-transition: all $time $type;
+    transition: all $time $type;
+}
+
+@mixin transform-scale($value){
+     -webkit-transform: scale($value);
+        -moz-transform: scale($value);
+        -o-transform: scale($value);
+        -ms-transform: scale($value);
+        transform: scale($value);
+}
+
+@mixin transform-translate-x($value){
+     -webkit-transform:  translate3d($value, 0, 0);
+        -moz-transform: translate3d($value, 0, 0);
+        -o-transform: translate3d($value, 0, 0);
+        -ms-transform: translate3d($value, 0, 0);
+        transform: translate3d($value, 0, 0);
+}
+
+@mixin transform-origin($coordinates){
+      -webkit-transform-origin: $coordinates;
+        -moz-transform-origin: $coordinates;
+        -o-transform-origin: $coordinates;
+        -ms-transform-origin: $coordinates;
+        transform-origin: $coordinates;
+}
+
+@mixin set-background-color-button ($color){
+    .nav{
+        li.active a{
+            background-color: $color;
+            @include shadow-big-color($color);
+        }
+    }
+}
+
+@mixin radial-gradient($extern-color, $center-color){
+    background: $extern-color;
+    background: -moz-radial-gradient(center, ellipse cover, $center-color 0%, $extern-color 100%); /* FF3.6+ */
+    background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%,$center-color), color-stop(100%,$extern-color)); /* Chrome,Safari4+ */
+    background: -webkit-radial-gradient(center, ellipse cover, $center-color 0%,$extern-color 100%); /* Chrome10+,Safari5.1+ */
+    background: -o-radial-gradient(center, ellipse cover, $center-color 0%,$extern-color 100%); /* Opera 12+ */
+    background: -ms-radial-gradient(center, ellipse cover, $center-color 0%,$extern-color 100%); /* IE10+ */
+    background: radial-gradient(ellipse at center, $center-color 0%,$extern-color 100%); /* W3C */
+    background-size: 550% 450%;
+}
+
+@mixin vertical-align {
+  position: relative;
+  top: 50%;
+  -webkit-transform: translateY(-50%);
+  -ms-transform: translateY(-50%);
+  transform: translateY(-50%);
+}
+
+@mixin rotate-180(){
+    filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
+    -webkit-transform: rotate(180deg);
+    -ms-transform: rotate(180deg);
+    transform: rotate(180deg);
+}
+
+@mixin bar-animation($type){
+     -webkit-animation: $type 500ms linear 0s;
+     -moz-animation: $type 500ms linear 0s;
+     animation: $type 500ms 0s;
+     -webkit-animation-fill-mode: forwards;
+     -moz-animation-fill-mode: forwards;
+     animation-fill-mode: forwards;
+}
+
+@mixin topbar-x-rotation(){
+    @keyframes topbar-x {
+      0% {top: 0px; transform: rotate(0deg); }
+      45% {top: 6px; transform: rotate(145deg); }
+      75% {transform: rotate(130deg); }
+      100% {transform: rotate(135deg); }
+    }
+    @-webkit-keyframes topbar-x {
+      0% {top: 0px; -webkit-transform: rotate(0deg); }
+      45% {top: 6px; -webkit-transform: rotate(145deg); }
+      75% {-webkit-transform: rotate(130deg); }
+      100% { -webkit-transform: rotate(135deg); }
+    }
+    @-moz-keyframes topbar-x {
+      0% {top: 0px; -moz-transform: rotate(0deg); }
+      45% {top: 6px; -moz-transform: rotate(145deg); }
+      75% {-moz-transform: rotate(130deg); }
+      100% { -moz-transform: rotate(135deg); }
+    }
+}
+
+@mixin topbar-back-rotation(){
+    @keyframes topbar-back {
+      0% { top: 6px; transform: rotate(135deg); }
+      45% { transform: rotate(-10deg); }
+      75% { transform: rotate(5deg); }
+      100% { top: 0px; transform: rotate(0); }
+    }
+
+    @-webkit-keyframes topbar-back {
+      0% { top: 6px; -webkit-transform: rotate(135deg); }
+      45% { -webkit-transform: rotate(-10deg); }
+      75% { -webkit-transform: rotate(5deg); }
+      100% { top: 0px; -webkit-transform: rotate(0); }
+    }
+
+    @-moz-keyframes topbar-back {
+      0% { top: 6px; -moz-transform: rotate(135deg); }
+      45% { -moz-transform: rotate(-10deg); }
+      75% { -moz-transform: rotate(5deg); }
+      100% { top: 0px; -moz-transform: rotate(0); }
+    }
+}
+
+@mixin bottombar-x-rotation(){
+    @keyframes bottombar-x {
+      0% {bottom: 0px; transform: rotate(0deg);}
+      45% {bottom: 6px; transform: rotate(-145deg);}
+      75% {transform: rotate(-130deg);}
+      100% {transform: rotate(-135deg);}
+    }
+    @-webkit-keyframes bottombar-x {
+      0% {bottom: 0px; -webkit-transform: rotate(0deg);}
+      45% {bottom: 6px; -webkit-transform: rotate(-145deg);}
+      75% {-webkit-transform: rotate(-130deg);}
+      100% {-webkit-transform: rotate(-135deg);}
+    }
+    @-moz-keyframes bottombar-x {
+      0% {bottom: 0px; -moz-transform: rotate(0deg);}
+      45% {bottom: 6px; -moz-transform: rotate(-145deg);}
+      75% {-moz-transform: rotate(-130deg);}
+      100% {-moz-transform: rotate(-135deg);}
+    }
+}
+
+@mixin bottombar-back-rotation{
+    @keyframes bottombar-back {
+      0% { bottom: 6px;transform: rotate(-135deg);}
+      45% { transform: rotate(10deg);}
+      75% { transform: rotate(-5deg);}
+      100% { bottom: 0px;transform: rotate(0);}
+    }
+    @-webkit-keyframes bottombar-back {
+      0% {bottom: 6px;-webkit-transform: rotate(-135deg);}
+      45% {-webkit-transform: rotate(10deg);}
+      75% {-webkit-transform: rotate(-5deg);}
+      100% {bottom: 0px;-webkit-transform: rotate(0);}
+    }
+    @-moz-keyframes bottombar-back {
+      0% {bottom: 6px;-moz-transform: rotate(-135deg);}
+      45% {-moz-transform: rotate(10deg);}
+      75% {-moz-transform: rotate(-5deg);}
+      100% {bottom: 0px;-moz-transform: rotate(0);}
+    }
+
+}
diff --git a/ACSmI/Billing/app/assets/stylesheets/md/plugins/_animate.scss b/ACSmI/Billing/app/assets/stylesheets/md/plugins/_animate.scss
new file mode 100644
index 0000000000000000000000000000000000000000..387d1521ff7af4e947e263d12bb9901345a73d3f
--- /dev/null
+++ b/ACSmI/Billing/app/assets/stylesheets/md/plugins/_animate.scss
@@ -0,0 +1,227 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+// This file was modified by Creative Tim to keep only the animation that we need for Bootstrap Notify
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+@charset "UTF-8";
+
+/*!
+Animate.css - http://daneden.me/animate
+Licensed under the MIT license - http://opensource.org/licenses/MIT
+
+Copyright (c) 2015 Daniel Eden
+*/
+
+.animated {
+  -webkit-animation-duration: 1s;
+  animation-duration: 1s;
+  -webkit-animation-fill-mode: both;
+  animation-fill-mode: both;
+}
+
+.animated.infinite {
+  -webkit-animation-iteration-count: infinite;
+  animation-iteration-count: infinite;
+}
+
+.animated.hinge {
+  -webkit-animation-duration: 2s;
+  animation-duration: 2s;
+}
+
+.animated.bounceIn,
+.animated.bounceOut {
+  -webkit-animation-duration: .75s;
+  animation-duration: .75s;
+}
+
+.animated.flipOutX,
+.animated.flipOutY {
+  -webkit-animation-duration: .75s;
+  animation-duration: .75s;
+}
+
+@-webkit-keyframes shake {
+  from, to {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+
+  10%, 30%, 50%, 70%, 90% {
+    -webkit-transform: translate3d(-10px, 0, 0);
+    transform: translate3d(-10px, 0, 0);
+  }
+
+  20%, 40%, 60%, 80% {
+    -webkit-transform: translate3d(10px, 0, 0);
+    transform: translate3d(10px, 0, 0);
+  }
+}
+
+@keyframes shake {
+  from, to {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+
+  10%, 30%, 50%, 70%, 90% {
+    -webkit-transform: translate3d(-10px, 0, 0);
+    transform: translate3d(-10px, 0, 0);
+  }
+
+  20%, 40%, 60%, 80% {
+    -webkit-transform: translate3d(10px, 0, 0);
+    transform: translate3d(10px, 0, 0);
+  }
+}
+
+.shake {
+  -webkit-animation-name: shake;
+  animation-name: shake;
+}
+
+
+
+@-webkit-keyframes fadeInDown {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -100%, 0);
+    transform: translate3d(0, -100%, 0);
+  }
+
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@keyframes fadeInDown {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -100%, 0);
+    transform: translate3d(0, -100%, 0);
+  }
+
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+.fadeInDown {
+  -webkit-animation-name: fadeInDown;
+  animation-name: fadeInDown;
+}
+
+
+@-webkit-keyframes fadeOut {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    opacity: 0;
+  }
+}
+
+@keyframes fadeOut {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    opacity: 0;
+  }
+}
+
+.fadeOut {
+  -webkit-animation-name: fadeOut;
+  animation-name: fadeOut;
+}
+
+@-webkit-keyframes fadeOutDown {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 100%, 0);
+    transform: translate3d(0, 100%, 0);
+  }
+}
+
+@keyframes fadeOutDown {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 100%, 0);
+    transform: translate3d(0, 100%, 0);
+  }
+}
+
+.fadeOutDown {
+  -webkit-animation-name: fadeOutDown;
+  animation-name: fadeOutDown;
+}
+
+@-webkit-keyframes fadeOutUp {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -100%, 0);
+    transform: translate3d(0, -100%, 0);
+  }
+}
+
+@keyframes fadeOutUp {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -100%, 0);
+    transform: translate3d(0, -100%, 0);
+  }
+}
+
+.fadeOutUp {
+  -webkit-animation-name: fadeOutUp;
+  animation-name: fadeOutUp;
+}
diff --git a/ACSmI/Billing/app/assets/stylesheets/md/plugins/_plugin-nouislider.scss b/ACSmI/Billing/app/assets/stylesheets/md/plugins/_plugin-nouislider.scss
new file mode 100644
index 0000000000000000000000000000000000000000..49204fa47c39ff0233a2b507c952fb2f21b8c8d7
--- /dev/null
+++ b/ACSmI/Billing/app/assets/stylesheets/md/plugins/_plugin-nouislider.scss
@@ -0,0 +1,161 @@
+// This file has been autogenerated by grunt task lessToSass. Any changes will be overwritten.
+
+.noUi-target,
+.noUi-target * {
+    -webkit-touch-callout: none;
+    -ms-touch-action: none;
+    user-select: none;
+    box-sizing: border-box;
+}
+.noUi-base {
+    width: 100%;
+    height: 100%;
+    position: relative;
+}
+.noUi-origin {
+    position: absolute;
+    right: 0;
+    top: 0;
+    left: 0;
+    bottom: 0;
+}
+.noUi-handle {
+    position: relative;
+    z-index: 1;
+    box-sizing: border-box;
+}
+.noUi-stacking .noUi-handle {
+    z-index: 10;
+}
+//.noUi-stacking + .noUi-origin {
+//    *z-index: -1;
+//} WARNING: Property with star prefix found. Checks for the star property hack (targets IE6/7) (star-property-hack) Browsers: All
+.noUi-state-tap .noUi-origin {
+    transition: left 0.3s, top 0.3s;
+}
+.noUi-state-drag * {
+    cursor: inherit !important;
+}
+.noUi-horizontal {
+    height: 10px;
+}
+.noUi-handle {
+    box-sizing: border-box;
+    width: 14px;
+    height: 14px;
+    left: -10px;
+    top: -6px;
+    cursor: pointer;
+    border-radius: 100%;
+    transition: all 0.2s ease-out;
+    border: 1px solid;
+    background: $white-color;
+
+    @include shadow-2dp();
+}
+.noUi-vertical .noUi-handle {
+    margin-left: 5px;
+    cursor: ns-resize;
+}
+.noUi-horizontal.noUi-extended {
+    padding: 0 15px;
+}
+.noUi-horizontal.noUi-extended .noUi-origin  {
+    right: -15px;
+}
+.noUi-background {
+    height: 2px;
+    margin: 20px 0;
+}
+.noUi-origin {
+    margin: 0;
+    border-radius: 0;
+    height: 2px;
+    background: #c8c8c8;
+    &[style^="left: 0"] .noUi-handle {
+        background-color: #fff;
+        border: 2px solid #c8c8c8;
+        &.noUi-active {
+            border-width: 1px;
+        }
+    }
+}
+.noUi-target {
+    border-radius: $border-radius-base;
+}
+.noUi-horizontal {
+    height: 2px;
+    margin: 15px 0;
+}
+.noUi-vertical {
+    height: 100%;
+    width: 2px;
+    margin: 0 15px;
+    display: inline-block;
+}
+.noUi-handle.noUi-active {
+    transform: scale3d(2, 2, 1);
+}
+[disabled].noUi-slider{
+    opacity: 0.5;
+}
+[disabled] .noUi-handle {
+    cursor: not-allowed;
+}
+
+.slider {
+    background: #c8c8c8;
+}
+
+.slider {
+
+    &.noUi-connect{
+        background-color: $brand-primary;
+    }
+
+    .noUi-handle{
+        border-color: $brand-primary;
+    }
+
+    &.slider-info{
+        & .noUi-connect,
+        &.noUi-connect{
+            background-color: $brand-info;
+        }
+
+        .noUi-handle{
+            border-color: $brand-info;
+        }
+    }
+    &.slider-success{
+        & .noUi-connect,
+        &.noUi-connect{
+            background-color: $brand-success;
+        }
+
+        .noUi-handle{
+            border-color: $brand-success;
+        }
+    }
+    &.slider-warning{
+        & .noUi-connect,
+        &.noUi-connect{
+            background-color: $brand-warning;
+        }
+
+        .noUi-handle{
+            border-color: $brand-warning;
+        }
+    }
+    &.slider-danger{
+        & .noUi-connect,
+        &.noUi-connect{
+            background-color: $brand-danger;
+        }
+
+        .noUi-handle{
+            border-color: $brand-danger;
+        }
+    }
+
+}
diff --git a/ACSmI/Billing/app/assets/stylesheets/progress-bar.css b/ACSmI/Billing/app/assets/stylesheets/progress-bar.css
new file mode 100644
index 0000000000000000000000000000000000000000..fc703429a212cf2c1b17974a482865700c931f7d
--- /dev/null
+++ b/ACSmI/Billing/app/assets/stylesheets/progress-bar.css
@@ -0,0 +1,107 @@
+.track-progress {
+    margin: 0;
+    padding: 0;
+    overflow: hidden;
+}
+
+.track-progress li {
+    list-style-type: none;
+    display: inline-block;
+
+    position: relative;
+    margin: 0 0 0 -4px;
+    padding: 0;
+
+    text-align: center;
+    line-height: 30px;
+    height: 30px;
+
+    background-color: #f0f0f0;
+}
+
+.track-progress li > span {
+    display: block;
+    width: auto;
+    padding-left: 25px;
+    padding-right: 15px;
+    color: #999;
+    font-weight: bold;
+    text-transform: uppercase;
+}
+
+.track-progress li > span {
+    color: #FFFFFF;
+}
+
+.track-progress li.completed > span {
+    background-color: #5AC700;
+}
+
+.track-progress li.completed_own > span {
+    background-color: #5AC700;
+}
+
+.track-progress li.current > span {
+    background-color: #0277bc;
+}
+
+.track-progress li.failed > span {
+    background-color: #DA0010;
+}
+
+.track-progress li.waiting > span {
+    background-color: grey;
+}
+
+.track-progress li > span:after,
+.track-progress li > span:before {
+    content: "";
+    display: block;
+    width: 0px;
+    height: 0px;
+
+    position: absolute;
+    top: 0;
+    left: 0;
+
+    border: solid transparent;
+    border-left-color: #f0f0f0;
+    border-width: 15px;
+}
+
+.track-progress li > span:after {
+    top: -5px;
+    z-index: 1;
+    border-left-color: white;
+    border-width: 20px;
+}
+
+.track-progress li > span:before {
+    z-index: 2;
+}
+
+.track-progress li.completed + li > span:before {
+    border-left-color: #5AC700;
+}
+
+.track-progress li.completed_own + li > span:before {
+    border-left-color: #5AC700;
+}
+
+.track-progress li.current + li > span:before {
+    border-left-color: #0277bc;
+}
+
+.track-progress li.failed + li > span:before {
+    border-left-color: #DA0010;
+}
+
+.track-progress li.waiting + li > span:before {
+    border-left-color: grey;
+}
+
+.track-progress li:first-child > span:after,
+.track-progress li:first-child > span:before {
+    display: none;
+}
+
diff --git a/ACSmI/Billing/app/assets/stylesheets/success.scss b/ACSmI/Billing/app/assets/stylesheets/success.scss
new file mode 100644
index 0000000000000000000000000000000000000000..ef96ad159dd1c14f2e752369d279c9037b818386
--- /dev/null
+++ b/ACSmI/Billing/app/assets/stylesheets/success.scss
@@ -0,0 +1,26 @@
+.contract-ready-container {
+  width: 100%;
+  text-align: center;
+
+  .contract-ready-body {
+    width: 100%;
+    display: inline-block;
+    border: 1px solid lightgray;
+    border-radius:5px;
+  }
+
+  .contract-ready-ok {
+    color: #2b542c;
+    font-size: 40px;
+    padding-top: 20px;
+
+    h3 {
+      display: inline-block;
+      vertical-align: middle;
+    }
+  }
+
+  i.ok-icon {
+    vertical-align: middle;
+  }
+}
\ No newline at end of file
diff --git a/ACSmI/Billing/app/assets/stylesheets/user_sessions.scss b/ACSmI/Billing/app/assets/stylesheets/user_sessions.scss
new file mode 100644
index 0000000000000000000000000000000000000000..1d3eacb43cc632263fbe0e45f755d1b076585822
--- /dev/null
+++ b/ACSmI/Billing/app/assets/stylesheets/user_sessions.scss
@@ -0,0 +1,3 @@
+// Place all the styles related to the user_sessions controller here.
+// They will automatically be included in application.css.
+// You can use Sass (SCSS) here: http://sass-lang.com/
diff --git a/ACSmI/Billing/app/assets/stylesheets/users.scss b/ACSmI/Billing/app/assets/stylesheets/users.scss
new file mode 100644
index 0000000000000000000000000000000000000000..1efc835ccd15adaf355c0501d7237d13529771e1
--- /dev/null
+++ b/ACSmI/Billing/app/assets/stylesheets/users.scss
@@ -0,0 +1,3 @@
+// Place all the styles related to the users controller here.
+// They will automatically be included in application.css.
+// You can use Sass (SCSS) here: http://sass-lang.com/
diff --git a/ACSmI/Billing/app/assets/stylesheets/welcome.scss b/ACSmI/Billing/app/assets/stylesheets/welcome.scss
new file mode 100644
index 0000000000000000000000000000000000000000..22d327ebe9243011aaf2a70bdcbfa0dcf775432e
--- /dev/null
+++ b/ACSmI/Billing/app/assets/stylesheets/welcome.scss
@@ -0,0 +1,36 @@
+.tryout-acsmi {
+  margin-right: 15px;
+  margin-left: 15px;
+
+  a {
+    color: black;
+  }
+
+  a:hover {
+    text-decoration: none;
+    color: black;
+  }
+
+  .panel-heading {
+    border-bottom: 1px solid lightgray;
+  }
+
+  input#resource_id {
+    height: 34px;
+    border-width: 1px;
+    padding-top: 6px;
+    padding-bottom: 6px;
+    margin-bottom: 0px;
+    margin-top: 6px;
+  }
+
+  .panel-body {
+    padding-bottom: 0px;
+  }
+}
+
+
+
+
+
+
diff --git a/ACSmI/Billing/app/channels/application_cable/channel.rb b/ACSmI/Billing/app/channels/application_cable/channel.rb
new file mode 100644
index 0000000000000000000000000000000000000000..d67269728300b9dac6a4a0db443ece02d7b6c513
--- /dev/null
+++ b/ACSmI/Billing/app/channels/application_cable/channel.rb
@@ -0,0 +1,4 @@
+module ApplicationCable
+  class Channel < ActionCable::Channel::Base
+  end
+end
diff --git a/ACSmI/Billing/app/channels/application_cable/connection.rb b/ACSmI/Billing/app/channels/application_cable/connection.rb
new file mode 100644
index 0000000000000000000000000000000000000000..0ff5442f476f98d578f77221b57164cffcf08de0
--- /dev/null
+++ b/ACSmI/Billing/app/channels/application_cable/connection.rb
@@ -0,0 +1,4 @@
+module ApplicationCable
+  class Connection < ActionCable::Connection::Base
+  end
+end
diff --git a/ACSmI/Billing/app/controllers/api/usage_records_controller.rb b/ACSmI/Billing/app/controllers/api/usage_records_controller.rb
new file mode 100644
index 0000000000000000000000000000000000000000..187648ac77480cd5d1787c5735f7415492719969
--- /dev/null
+++ b/ACSmI/Billing/app/controllers/api/usage_records_controller.rb
@@ -0,0 +1,101 @@
+class Api::UsageRecordsController < ApplicationController
+  skip_before_action :verify_authenticity_token
+  before_action :check_user 
+
+  include Exceptions
+
+  def created_contract
+    create_report_for(create_contract_params)
+  end
+
+  def cancelled_contract
+    create_report_for(cancel_contract_params)
+  end
+
+  def create
+    contract = fetch_contract
+    if contract.nil?
+      state = { error: "`Contract` with given id wasn't found" }
+      status = 404
+    elsif @user.try(:admin)
+      user = User.find(contract.user_id)
+      usage_data = usage_record_params.merge(date: Date.today,
+                                             user: user,
+                                             additional_info: params[:additional_info])
+      usage_record = UsageReportService.call({ user: user }, usage_data)
+      state = { usage_record: usage_record.to_json }
+      status = :ok
+    else
+      state = { error: 'Unauthorized' }
+      status = 401
+    end
+    render json: state, status: status
+  rescue UsageReporterException => e
+    render json: { error: e.reason }, status: 422
+  rescue  => e
+    render json: { error: e.message }, status: 422
+  end
+
+  private
+
+  def usage_record_params 
+    params.require(:usage_record).permit(:contract_id, :usage_type, :cost)
+  end
+
+  def create_report_for(option)
+    if @user.try(:admin)
+      report_data = PreparingUsageReportData::Service.call(option)
+      UsageReportService.call(report_data[:user], report_data[:usage_data])
+      state = 'done'
+    else
+      state = 'credentials error'
+    end
+    render json: {state: state }, status: :ok
+  rescue UsageReporterException => e
+    render json: { state: e.reason }, status: :ok
+  end
+
+  def create_contract_params
+    {acsmi_creds: acsmi_creds, contracting_resource: contracting_resource, usage_type: 'contract_creation',
+     contracting_creds: contracting_creds, cost: contracting_pricing_data[:creation_cost], platform_id: contracting_creds[:platform_id], user: @user}
+  end
+
+  def cancel_contract_params
+    {usage_type: 'contract_cancel', contract_id: contracting_cancellation_data[:contract_id],
+     cost: contracting_cancellation_data[:cancel_penalty_cost], user: @user, acsmi_email: contracting_cancellation_data[:email]}
+  end
+
+  def check_user
+    user_session = UserSession.new(email: user_params[:email], password: user_params[:password])
+    @user = user_session.user if user_session.save
+  end
+
+  def user_params
+    params.require(:user).permit(:email, :password)
+  end
+ 
+  def acsmi_creds
+    params.require(:acsmi_creds).permit(:email, :crypted_password, :password_salt, :full_name, :organization, :address)
+  end
+
+  def contracting_creds
+    params.require(:contracting_creds).permit(:email, :password, :platform_id)
+  end
+
+  def contracting_resource
+    params.require(:contracting_resource).permit(:contract_id, :service_id, :service_name, :resource_id, :resource_name, :contracting_method)
+  end
+
+  def contracting_pricing_data
+    params.require(:contracting_pricing_data).permit(:creation_cost)
+  end
+
+  def contracting_cancellation_data
+    params.require(:cancellation_data).permit(:contract_id, :email, :cancel_penalty_cost)
+  end
+
+  def fetch_contract
+    Contract.find_by(global_id: params[:contract_id])
+  end
+
+end
diff --git a/ACSmI/Billing/app/controllers/application_controller.rb b/ACSmI/Billing/app/controllers/application_controller.rb
new file mode 100644
index 0000000000000000000000000000000000000000..d955eb5d5d7df6ae4e20e2fb2e8f14315bc1d87b
--- /dev/null
+++ b/ACSmI/Billing/app/controllers/application_controller.rb
@@ -0,0 +1,29 @@
+class ApplicationController < ActionController::Base
+
+  after_action :allow_iframe_for_all
+
+  private
+
+  def allow_iframe_for_all
+    response.headers.delete 'X-Frame-Options'
+  end
+
+  def current_user_session
+    return @current_user_session if defined?(@current_user_session)
+    @current_user_session = UserSession.find
+  end
+
+  def current_user
+    return @current_user if defined?(@current_user)
+    @current_user = current_user_session && current_user_session.user
+  end
+
+  def authenticated?
+    unless current_user
+      flash[:alert] = 'Please log in to your account.'
+      redirect_to '/'
+    end
+  end
+
+  helper_method :current_user_session, :current_user
+end
diff --git a/ACSmI/Billing/app/controllers/concerns/.keep b/ACSmI/Billing/app/controllers/concerns/.keep
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/ACSmI/Billing/app/controllers/home_page_controller.rb b/ACSmI/Billing/app/controllers/home_page_controller.rb
new file mode 100644
index 0000000000000000000000000000000000000000..80ae7ee98c8715c455f2fb1b04ec7871689509c4
--- /dev/null
+++ b/ACSmI/Billing/app/controllers/home_page_controller.rb
@@ -0,0 +1,4 @@
+class HomePageController < ApplicationController
+  def index
+  end
+end
diff --git a/ACSmI/Billing/app/controllers/invoices_controller.rb b/ACSmI/Billing/app/controllers/invoices_controller.rb
new file mode 100644
index 0000000000000000000000000000000000000000..e2d61fbd3fc4721e3e76f260f466ce2a1c111541
--- /dev/null
+++ b/ACSmI/Billing/app/controllers/invoices_controller.rb
@@ -0,0 +1,32 @@
+class InvoicesController < ApplicationController
+  before_action :authenticated?
+  before_action :invoice_for_pdf, only: [:download_pdf]
+
+  def index
+    @invoices = current_user.invoices.includes(:usage_records)
+    @sidebar_tab = :invoice
+  end
+
+  def show
+    @invoice = Invoice.find(params[:id])
+    @usage_records = @invoice.usage_records if @invoice
+  end
+
+  require 'reports/invoices_pdf_generator'
+  def download_pdf
+    output = InvoicesPdfGenerator.new.generate_pdf(@invoice)
+    send_file output, :filename => "invoice(#{@invoice.beginning}-#{@invoice.ending}).pdf",
+                      :type => "application/pdf", disposition: "inline"
+  end
+
+  private
+
+  def invoice_for_pdf
+    @invoice = Invoice.find(params[:invoice_id])
+    unless @invoice && @invoice.usage_records.sum(:cost) > 0
+      flash[:alert] = "Creation error: can't generate pdf for invoice with 0.0 cost."
+      redirect_to invoices_url
+    end
+  end
+
+end
diff --git a/ACSmI/Billing/app/controllers/usage_records_controller.rb b/ACSmI/Billing/app/controllers/usage_records_controller.rb
new file mode 100644
index 0000000000000000000000000000000000000000..621577b90405b125fd4ca9ca07602d15fa6d8da2
--- /dev/null
+++ b/ACSmI/Billing/app/controllers/usage_records_controller.rb
@@ -0,0 +1,18 @@
+class UsageRecordsController < ApplicationController
+  before_action :authenticated?
+
+  def index
+    contracts = current_user.contracts
+    @usage_records = UsageRecord.includes(:invoice, :contract).where(contract_id: contracts.ids) if contracts
+    @sidebar_tab = :usage
+  end
+
+  def show
+    @usage_record = UsageRecord.includes(:invoice, :contract).find(params[:id])
+    if @usage_record
+      @contracting_resource = @usage_record.contract.contracting_resources.first
+      @description_fields = @usage_record.usage_description_fields
+    end
+  end
+
+end
diff --git a/ACSmI/Billing/app/controllers/user_sessions_controller.rb b/ACSmI/Billing/app/controllers/user_sessions_controller.rb
new file mode 100644
index 0000000000000000000000000000000000000000..b97049bbf748ecab5665ec9f9c1b31685bb13ae2
--- /dev/null
+++ b/ACSmI/Billing/app/controllers/user_sessions_controller.rb
@@ -0,0 +1,25 @@
+class UserSessionsController < ApplicationController
+  def new
+    @user_session = UserSession.new
+  end
+
+  def create
+    @user_session = UserSession.new(user_session_params.to_h)
+    if @user_session.save
+      redirect_to root_path
+    else
+      render :new
+    end
+  end
+
+  def destroy
+    current_user_session.destroy
+    redirect_to root_path
+  end
+
+  private
+
+  def user_session_params
+    params.require(:user_session).permit(:email, :password)
+  end
+end
diff --git a/ACSmI/Billing/app/controllers/users_controller.rb b/ACSmI/Billing/app/controllers/users_controller.rb
new file mode 100644
index 0000000000000000000000000000000000000000..3f7e46151f280afed559028c3926ebe3c650a85a
--- /dev/null
+++ b/ACSmI/Billing/app/controllers/users_controller.rb
@@ -0,0 +1,3 @@
+class UsersController < ApplicationController
+
+end
diff --git a/ACSmI/Billing/app/helpers/application_helper.rb b/ACSmI/Billing/app/helpers/application_helper.rb
new file mode 100644
index 0000000000000000000000000000000000000000..fd4f4a2c560827682325626a971cba2c09f591a0
--- /dev/null
+++ b/ACSmI/Billing/app/helpers/application_helper.rb
@@ -0,0 +1,5 @@
+module ApplicationHelper
+  def sidebar_tab_class(tab_name)
+    tab_name == @sidebar_tab ? 'active' : ''
+  end
+end
diff --git a/ACSmI/Billing/app/helpers/invoices_helper.rb b/ACSmI/Billing/app/helpers/invoices_helper.rb
new file mode 100644
index 0000000000000000000000000000000000000000..bb3fd4c0d18cc52f7e3a3863806cf0cf83d5bcaa
--- /dev/null
+++ b/ACSmI/Billing/app/helpers/invoices_helper.rb
@@ -0,0 +1,9 @@
+module InvoicesHelper
+  def display_status(date_ending)
+    if Date.today <= date_ending
+      'collecting'
+    else
+      'closed'
+    end
+  end
+end
\ No newline at end of file
diff --git a/ACSmI/Billing/app/jobs/application_job.rb b/ACSmI/Billing/app/jobs/application_job.rb
new file mode 100644
index 0000000000000000000000000000000000000000..a009ace51ccf46bab4ac06100a225a1fa1801e65
--- /dev/null
+++ b/ACSmI/Billing/app/jobs/application_job.rb
@@ -0,0 +1,2 @@
+class ApplicationJob < ActiveJob::Base
+end
diff --git a/ACSmI/Billing/app/jobs/monthly_invoice_job.rb b/ACSmI/Billing/app/jobs/monthly_invoice_job.rb
new file mode 100644
index 0000000000000000000000000000000000000000..8104b766c0130a3104266076f8e12a0ab4ea74c3
--- /dev/null
+++ b/ACSmI/Billing/app/jobs/monthly_invoice_job.rb
@@ -0,0 +1,16 @@
+class MonthlyInvoiceJob < ApplicationJob
+  def perform
+    invoices = Invoice.where(beginning: (Date.today - 1.month).beginning_of_month)
+    return unless invoices.any?
+
+    invoices.each do |invoice|
+      InvoiceMailer.monthly_invoice(invoice).deliver
+    end
+  rescue => e
+    logger.error e.message
+  end
+
+  def after(_job)
+    Delayed::Job.enqueue MonthlyInvoiceJob.new, run_at: Time.new.end_of_month + 120
+  end
+end
diff --git a/ACSmI/Billing/app/jobs/platform_usage_monitor_job.rb b/ACSmI/Billing/app/jobs/platform_usage_monitor_job.rb
new file mode 100644
index 0000000000000000000000000000000000000000..b6b4a756b9717be286bbb9d570065190b24c3ffa
--- /dev/null
+++ b/ACSmI/Billing/app/jobs/platform_usage_monitor_job.rb
@@ -0,0 +1,82 @@
+require 'set'
+require_relative '../../lib/api_clients/platform'
+
+class PlatformUsageMonitorJob < ApplicationJob
+
+  def perform
+    users = fetch_users_with_contracting_resources
+    return unless users.any?
+
+    users.each do |user|
+      api = APIClients::Platform.new(user.platform_email, user.platform_password)
+      next if api.get_billing_items.eql?('authentication error') || api.get_billing_items.eql?('collection is empty')
+
+      billing_items = api.get_billing_items
+      uses_instances = api.get_uses_instances
+      instance_types = api.get_instance_types
+
+      external_ids = UsageRecord.pluck(:external_id).to_set
+
+      billing_items.select! do |id|
+        !external_ids.include?(id) && billing_items[id]['model_type'] == 'Instance' && billing_items[id]['user_id'] == user.platform_id
+      end
+
+      next if billing_items.empty?
+
+      billing_items.each do |id, billing_item|
+        cost = billing_item['total_amount'].abs
+        instance_id = billing_item['model_id']
+        instance = uses_instances[instance_id]
+        next if instance.blank?
+
+        instance_type = instance_types[instance['instance_type_id']]
+        resource_id = instance_type['resource_id']
+
+        contracting_resources = ContractingResource
+                                .joins(contract: :user)
+                                .where(resource_id: resource_id,
+                                       contracts: {
+                                         user_id: user.id
+                                       })
+
+        contract_id = contracting_resources.first.contract_id if contracting_resources.any?
+        usage_type = billing_item['fee_type']
+
+        usage_data = {
+          date: billing_item['created_at'],
+          contract_id: contract_id,
+          cost: cost,
+          usage_type: usage_type,
+          external_id: id
+        }
+
+        user_data = {}
+        user_data[:user] = user
+
+        next unless are_data_valid?(user_data, usage_data)
+
+        UsageReportService.call(user_data, usage_data)
+      end
+    end
+  rescue => e
+    logger.error e.message
+  end
+
+  def after(_job)
+    Delayed::Job.enqueue PlatformUsageMonitorJob.new, run_at: 5.minutes.from_now
+  end
+
+  private
+
+  def fetch_users_with_contracting_resources
+    User.joins(contracts: :contracting_resources)
+        .where(contracting_resources: { contracting_method: 'platform' })
+        .where(admin: false).select(&:have_platform_creds?)
+  end
+
+  def are_data_valid?(user, usage_data)
+    return false if user.values.any?(&:blank?)
+
+    usage_data.values.none?(&:blank?)
+  end
+end
diff --git a/ACSmI/Billing/app/mailers/application_mailer.rb b/ACSmI/Billing/app/mailers/application_mailer.rb
new file mode 100644
index 0000000000000000000000000000000000000000..d261ff4f720a9082fa89fc3335dd88df4622e044
--- /dev/null
+++ b/ACSmI/Billing/app/mailers/application_mailer.rb
@@ -0,0 +1,4 @@
+class ApplicationMailer < ActionMailer::Base
+  default from: 'acsmi.billing@gmail.com'
+  layout 'mailer'
+end
diff --git a/ACSmI/Billing/app/mailers/invoice_mailer.rb b/ACSmI/Billing/app/mailers/invoice_mailer.rb
new file mode 100644
index 0000000000000000000000000000000000000000..22efc3fc8aecb63e8a0f07c0120f67b27c91a245
--- /dev/null
+++ b/ACSmI/Billing/app/mailers/invoice_mailer.rb
@@ -0,0 +1,7 @@
+class InvoiceMailer < ApplicationMailer
+  def monthly_invoice(invoice)
+    @user = User.find(invoice.user_id)
+    @invoice = invoice
+    mail(to: @user.email, subject: 'Montly invoice report')
+  end
+end
diff --git a/ACSmI/Billing/app/models/application_record.rb b/ACSmI/Billing/app/models/application_record.rb
new file mode 100644
index 0000000000000000000000000000000000000000..10a4cba84df37181f4cf310fd85d8f0aaa5d90ba
--- /dev/null
+++ b/ACSmI/Billing/app/models/application_record.rb
@@ -0,0 +1,3 @@
+class ApplicationRecord < ActiveRecord::Base
+  self.abstract_class = true
+end
diff --git a/ACSmI/Billing/app/models/concerns/.keep b/ACSmI/Billing/app/models/concerns/.keep
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/ACSmI/Billing/app/models/contract.rb b/ACSmI/Billing/app/models/contract.rb
new file mode 100644
index 0000000000000000000000000000000000000000..53a268902d1f9a1dda73cf42bad5afabde835f5b
--- /dev/null
+++ b/ACSmI/Billing/app/models/contract.rb
@@ -0,0 +1,16 @@
+class Contract < ApplicationRecord
+  belongs_to :user
+  has_many :usage_records
+  has_many :contracting_resources
+
+  validates_presence_of :user, :global_id
+
+  def self.create_contract(global_id, user_id)
+    contract = Contract.new(
+        user_id: user_id,
+        global_id: global_id
+    )
+    contract if contract.save
+  end
+
+end
diff --git a/ACSmI/Billing/app/models/contracting_resource.rb b/ACSmI/Billing/app/models/contracting_resource.rb
new file mode 100644
index 0000000000000000000000000000000000000000..3e2bf729e3c4c2a7c9eda703d6da62a1e0eacb1e
--- /dev/null
+++ b/ACSmI/Billing/app/models/contracting_resource.rb
@@ -0,0 +1,17 @@
+class ContractingResource < ApplicationRecord
+  belongs_to :contract
+  has_many :credential_fields
+
+  validates_presence_of :contract, :service_id, :service_name, :resource_name, :contracting_method
+
+  def self.create_contracting_resource(contracting_resource, contract_id)
+    contracting_resource = ContractingResource.new(
+      contract_id: contract_id,
+      service_id: contracting_resource[:service_id],
+      service_name: contracting_resource[:service_name],
+      resource_id: contracting_resource[:resource_id],
+      resource_name: contracting_resource[:resource_name],
+      contracting_method: contracting_resource[:contracting_method].strip.downcase)
+    contracting_resource if contracting_resource.save
+  end
+end
diff --git a/ACSmI/Billing/app/models/credential_field.rb b/ACSmI/Billing/app/models/credential_field.rb
new file mode 100644
index 0000000000000000000000000000000000000000..63b14d60c37766a1d57cc4db984bc17fdc4fdb65
--- /dev/null
+++ b/ACSmI/Billing/app/models/credential_field.rb
@@ -0,0 +1,8 @@
+class CredentialField < ApplicationRecord
+  belongs_to :contracting_resource
+
+  attr_encrypted :value, key: "be015f15adf7c6d932ea20d14ad1855a"
+
+  validates_presence_of :contracting_resource, :name, :encrypted_value
+
+end
diff --git a/ACSmI/Billing/app/models/invoice.rb b/ACSmI/Billing/app/models/invoice.rb
new file mode 100644
index 0000000000000000000000000000000000000000..a9fe91143345eb8d603e975a8c0f9aab02645716
--- /dev/null
+++ b/ACSmI/Billing/app/models/invoice.rb
@@ -0,0 +1,20 @@
+class Invoice < ApplicationRecord
+  belongs_to :user
+  has_many :usage_records
+
+  validates_presence_of :user, :beginning, :ending
+
+  def self.create_invoice(user_id, date)
+    invoice = Invoice.where(user_id: user_id).last
+    if invoice && date.between?(invoice.beginning, invoice.ending)
+      invoice
+    else
+      invoice = Invoice.new(
+          user_id: user_id,
+          beginning: date,
+          ending: date.end_of_month
+      )
+      invoice if invoice.save
+    end
+  end
+end
diff --git a/ACSmI/Billing/app/models/setting.rb b/ACSmI/Billing/app/models/setting.rb
new file mode 100644
index 0000000000000000000000000000000000000000..259d39df2d96c0d23af41462b1e4febc3fa078ac
--- /dev/null
+++ b/ACSmI/Billing/app/models/setting.rb
@@ -0,0 +1,17 @@
+class Setting < ApplicationRecord
+  include Exceptions
+
+  validates :key, presence: true, uniqueness: true
+  validates :encrypted_value, presence: true
+
+  attr_encrypted :value, key: "9f8afc93a74280b0bb8f258ac4bd3871"
+
+  def self.value(key, strict: true)
+    setting = Setting.find_by(key: key)
+    if setting
+      setting.value
+    else
+      strict ? (raise SettingNotFound) : nil
+    end
+  end
+end
diff --git a/ACSmI/Billing/app/models/usage_description_field.rb b/ACSmI/Billing/app/models/usage_description_field.rb
new file mode 100644
index 0000000000000000000000000000000000000000..e0ed364955a5dea837c8f61f1d1eb4078628f9f0
--- /dev/null
+++ b/ACSmI/Billing/app/models/usage_description_field.rb
@@ -0,0 +1,5 @@
+class UsageDescriptionField < ApplicationRecord
+  belongs_to :usage_record
+
+  validates_presence_of :name, :value, :usage_record
+end
diff --git a/ACSmI/Billing/app/models/usage_record.rb b/ACSmI/Billing/app/models/usage_record.rb
new file mode 100644
index 0000000000000000000000000000000000000000..6e6b444cc968525c26d3e683181c32615a4c50cc
--- /dev/null
+++ b/ACSmI/Billing/app/models/usage_record.rb
@@ -0,0 +1,16 @@
+class UsageRecord < ApplicationRecord
+  belongs_to :invoice
+  belongs_to :contract
+  has_many :usage_description_fields
+
+  validates_presence_of :invoice, :contract, :cost
+  validates_uniqueness_of :external_id, allow_nil: true
+
+  def self.create_report(invoice_id, contract_id, cost, usage_type, external_id)
+    UsageRecord.create(invoice_id: invoice_id,
+                        contract_id: contract_id,
+                        cost: cost,
+                        usage_type: usage_type,
+                        external_id: external_id)
+  end
+end
diff --git a/ACSmI/Billing/app/models/user.rb b/ACSmI/Billing/app/models/user.rb
new file mode 100644
index 0000000000000000000000000000000000000000..27d0058903cb232b159110b0720e26d21a01ccc0
--- /dev/null
+++ b/ACSmI/Billing/app/models/user.rb
@@ -0,0 +1,48 @@
+class User < ApplicationRecord
+  has_many :invoices
+  has_many :contracts
+  has_many :usage_records, through: :contracts
+
+  attr_encrypted :platform_email, key: "c0fa08b63655000a091fc9e1d6ebde14"
+  attr_encrypted :platform_password, key: "d3372b188ccc674932bc6d7be7707a27"
+
+  validates_presence_of :email, :full_name
+  validates_uniqueness_of :email
+
+  acts_as_authentic
+
+  def create_acsmi_user(acsmi_creds)
+    if admin
+      user = User.find_by_email(acsmi_creds[:email])
+      unless user.present?
+        user = User.new(
+                          email: acsmi_creds[:email],
+                          crypted_password: acsmi_creds[:crypted_password],
+                          password_salt: acsmi_creds[:password_salt],
+                          full_name: acsmi_creds[:full_name],
+                          organization: acsmi_creds[:organization]
+        )
+        user if user.save
+
+      else
+        user
+      end
+    end
+  end
+
+  def write_platform_credentials(email, password, platform_id)
+    if have_platform_creds?
+      self
+    else
+      self.platform_email = email
+      self.platform_password = password
+      self.platform_id = platform_id
+      save
+      self
+    end
+  end
+
+  def have_platform_creds?
+    true if platform_email && platform_password && platform_id
+  end
+end
diff --git a/ACSmI/Billing/app/models/user_session.rb b/ACSmI/Billing/app/models/user_session.rb
new file mode 100644
index 0000000000000000000000000000000000000000..93642e5e907e45c603953c3a46eab738599d9121
--- /dev/null
+++ b/ACSmI/Billing/app/models/user_session.rb
@@ -0,0 +1,2 @@
+class UserSession < Authlogic::Session::Base
+end
diff --git a/ACSmI/Billing/app/services/preparing_usage_report_data/service.rb b/ACSmI/Billing/app/services/preparing_usage_report_data/service.rb
new file mode 100644
index 0000000000000000000000000000000000000000..6869b01934782e088d59aa3baad435ed1704253f
--- /dev/null
+++ b/ACSmI/Billing/app/services/preparing_usage_report_data/service.rb
@@ -0,0 +1,78 @@
+class PreparingUsageReportData::Service
+  include Exceptions
+
+  def self.call(contracting_params)
+    if contracting_params[:usage_type] == 'contract_creation'
+      new(contracting_params).call_for_create
+    elsif contracting_params[:usage_type] == 'contract_cancel'
+      new(contracting_params).call_for_cancel
+    end
+  end
+
+  def initialize(contracting_params)
+    @user = contracting_params[:user]
+    @cost = contracting_params[:cost]
+    @usage_type = contracting_params[:usage_type]
+    if contracting_params[:usage_type] == 'contract_creation'
+      @acsmi_creds_hash = contracting_params[:acsmi_creds]
+      @contracting_resource_hash = contracting_params[:contracting_resource]
+      @contracting_creds_hash = contracting_params[:contracting_creds]
+      @platform_id = contracting_params[:platform_id]
+    elsif contracting_params[:usage_type] == 'contract_cancel'
+      @acsmi_email = contracting_params[:acsmi_email]
+      @contract_id = contracting_params[:contract_id]
+    end
+  end
+
+  def call_for_create
+    user = create_new_user
+    contract = create_contract(user)
+    create_contracting_resource(contract)
+    usage_data = { contract_id: contract.id, date: DateTime.now.to_date.beginning_of_month, cost: cost, usage_type: usage_type }
+    user = { user:user }
+    { user: user, usage_data: usage_data }
+  end
+
+  def call_for_cancel
+    user = User.find_by_email(acsmi_email)
+    exception(["Can't found user"]) if user.nil?
+    contract = Contract.find_by_global_id_and_user_id(contract_id, user.id)
+    exception(["Can't found contract"]) if contract.nil?
+    usage_data = { contract_id: contract.id, cost: cost, date: DateTime.now.to_date.beginning_of_month, usage_type: usage_type }
+    user = { user: user }
+    { user: user, usage_data: usage_data }
+  end
+
+  private
+
+  attr_reader :acsmi_creds_hash, :contracting_resource_hash, :contracting_creds_hash, :cost, :user, :contract_id, :usage_type, :acsmi_email, :platform_id
+
+  def create_new_user
+    new_user = user.create_acsmi_user(acsmi_creds_hash)
+    exception(['Some problems with user creation']) if new_user.nil?
+    new_user = write_contracting_creds_to_user(new_user, contracting_creds_hash[:email], contracting_creds_hash[:password], platform_id)
+    new_user
+  end
+
+  def create_contract(user)
+    contract = Contract.create_contract(contracting_resource_hash[:contract_id], user.id)
+    exception(['Some problems with contract creation']) if contract.nil?
+    contract
+  end
+
+  def create_contracting_resource(contract)
+    contracting_resource = ContractingResource.create_contracting_resource(contracting_resource_hash, contract.id)
+    exception(['Some problems with contracting resource creation']) if contracting_resource.nil?
+    contracting_resource
+  end
+
+  def write_contracting_creds_to_user(user, email, password, platform_id)
+    updated_user = user.write_platform_credentials(email, password, platform_id)
+    exception(['Some problems with contracting credentials storing']) if updated_user.nil?
+    updated_user
+  end
+
+  def exception(reason)
+    raise UsageReporterException.new(reason)
+  end
+end
diff --git a/ACSmI/Billing/app/services/usage_report_service.rb b/ACSmI/Billing/app/services/usage_report_service.rb
new file mode 100644
index 0000000000000000000000000000000000000000..032e5049b2faeafcb79ddb81b00e633e7f2ce6a7
--- /dev/null
+++ b/ACSmI/Billing/app/services/usage_report_service.rb
@@ -0,0 +1,64 @@
+class UsageReportService
+
+  include Exceptions
+
+  def self.call(user, usage_data)
+    new(user, usage_data).call
+  end
+
+  def initialize(user, usage_data)
+    @date = usage_data[:date]
+    @contract_id = usage_data[:contract_id]
+    @user = user[:user]
+    @cost = usage_data[:cost]
+    @usage_type = usage_data[:usage_type]
+    @external_id = usage_data[:external_id]
+    @additional_info = usage_data[:additional_info]
+  end
+
+  def call
+    create_usage_report
+  end
+
+  private
+
+  attr_reader :date, :contract_id, :cost, :user, :usage_type, :external_id, :additional_info
+
+  def create_invoice
+    invoice = Invoice.create_invoice(user.id, date)
+    exception(['Some problems with invoice creation']) if invoice.nil?
+    invoice
+  end
+
+  def create_usage_report
+    invoice = create_invoice
+    exception(['Some problems with invoice creation']) if invoice.nil?
+    if additional_info
+      usage_record = create_usage_record_with_fields(invoice)
+    else
+      usage_record = UsageRecord.create_report(invoice.id, contract_id, cost, usage_type, external_id)
+    end
+    exception(['Some problems with usage record creation']) if usage_record.nil?
+    usage_record
+  end
+
+  def create_usage_record_with_fields(invoice)
+    UsageRecord.transaction do
+      contract = Contract.find_by(global_id: contract_id)
+      usage_record = UsageRecord.create(invoice_id: invoice.id,
+                                        contract_id: contract.id,
+                                        cost: cost,
+                                        usage_type: usage_type,
+                                        external_id: external_id)
+      additional_info.each do |name, value|
+        usage_record.usage_description_fields.new(name: name, value: value).save!
+      end
+      usage_record
+    end
+  end
+
+  def exception(reason)
+    raise UsageReporterException.new(reason)
+  end
+
+end
diff --git a/ACSmI/Billing/app/views/home_page/index.html.erb b/ACSmI/Billing/app/views/home_page/index.html.erb
new file mode 100644
index 0000000000000000000000000000000000000000..167673d8ee7f32287d5636ebba2197da13d3fc05
--- /dev/null
+++ b/ACSmI/Billing/app/views/home_page/index.html.erb
@@ -0,0 +1,5 @@
+  <div class="jumbotron">
+    <div class="container">
+      <h1>Welcome!</h1>
+    </div>
+  </div>
\ No newline at end of file
diff --git a/ACSmI/Billing/app/views/invoice_mailer/monthly_invoice.html.haml b/ACSmI/Billing/app/views/invoice_mailer/monthly_invoice.html.haml
new file mode 100644
index 0000000000000000000000000000000000000000..405339a44d6997e53798893b411fbb638954eb18
--- /dev/null
+++ b/ACSmI/Billing/app/views/invoice_mailer/monthly_invoice.html.haml
@@ -0,0 +1,11 @@
+%div= "Dear #{@user.full_name},"
+
+%div
+  We would like to inform you that your monthly invoice is now available. The invoice can be accessed after login under the following link:
+  "#{invoice_url(@invoice, host: Setting.value('billing_component_url'))}"
+
+%div
+  A PDF version may be downloaded from:
+  "#{invoice_pdf_report_url(@invoice, host: Setting.value('billing_component_url'))}"
+
+%div Please pay the given amount within the next 30 days.
diff --git a/ACSmI/Billing/app/views/invoices/index.html.haml b/ACSmI/Billing/app/views/invoices/index.html.haml
new file mode 100644
index 0000000000000000000000000000000000000000..e7acc4fdfcd2b351556a1c71b06f7109d4e880a2
--- /dev/null
+++ b/ACSmI/Billing/app/views/invoices/index.html.haml
@@ -0,0 +1,35 @@
+.card.card-plain
+  .card-header{ data: { 'background-color' => 'primary' } }
+    %h4.title Invoice records
+    %p.category Your invoice records
+  .card-content.table-responsive
+    %table.table.table-hover
+      - if @invoices
+        %thead
+          %tr
+            %th Beginning
+            %th Ending
+            %th State
+            %th Cost
+            %th Actions
+
+        - @invoices.each do |invoice|
+          %tbody
+            %tr
+              %td
+                = invoice.beginning
+              %td
+                = invoice.ending
+              %td
+                = display_status(invoice.ending)
+              %td
+                = invoice.usage_records.sum(:cost)
+              %td
+                = link_to 'info', invoice_url(invoice), class: 'material-icons'
+                - if display_status(invoice.ending) == 'closed'
+                  = link_to 'note', invoice_pdf_report_url(invoice), target: :_blank, class: 'material-icons', id: 'pdf_download'
+
+      - else
+        %tbody
+          %tr
+            %td{ colspan: 3 } You do not have any invoice records at the moment
\ No newline at end of file
diff --git a/ACSmI/Billing/app/views/invoices/show.html.haml b/ACSmI/Billing/app/views/invoices/show.html.haml
new file mode 100644
index 0000000000000000000000000000000000000000..8f93401ed79570ce59cff199ce570c1a01368d88
--- /dev/null
+++ b/ACSmI/Billing/app/views/invoices/show.html.haml
@@ -0,0 +1,62 @@
+.card.card-plain
+  .card-header{ data: { 'background-color' => 'primary' } }
+    %h4.title Invoice information
+    %p.category Detail invoice information
+  .contracts-content
+
+  - if @invoice
+    .show
+
+    .delimiter
+
+    .row.resource-info
+      .col-md-2
+        %label Beginning
+      .col-md-6
+        = @invoice.beginning
+    .row.resource-info
+      .col-md-2
+        %label Ending
+      .col-md-6
+        = @invoice.ending
+    .row.resource-info
+      .col-md-2
+        %label State
+      .col-md-6
+        = display_status(@invoice.ending)
+    .row.resource-info
+      .col-md-2
+        %label Cost
+      .col-md-6
+        = @invoice.usage_records.sum(:cost)
+
+    .delimiter
+
+
+  - if @usage_records
+    .card-content.table-responsive
+      %table.table.table-hover
+
+        %thead
+          %tr
+            %th Contract id
+            %th Usage type
+            %th Cost
+            %th Date
+
+        - @usage_records.each do |u_r|
+          %tbody
+            %tr
+              %td
+                = u_r.contract.global_id
+              %td
+                = u_r.usage_type
+              %td
+                = u_r.cost
+              %td
+                = "#{u_r.invoice.beginning} / #{u_r.invoice.ending}"
+  - else
+    %tbody
+      %tr
+        %td{ colspan: 3 } You do not have any invoice information at the moment
+  = link_to 'back', invoices_url, class: 'btn btn-default'
\ No newline at end of file
diff --git a/ACSmI/Billing/app/views/layouts/_footer.html.erb b/ACSmI/Billing/app/views/layouts/_footer.html.erb
new file mode 100644
index 0000000000000000000000000000000000000000..e4f9fd2ebbc613c1780b32a4eef527b1d1e3bc53
--- /dev/null
+++ b/ACSmI/Billing/app/views/layouts/_footer.html.erb
@@ -0,0 +1,10 @@
+<footer class="footer" id="footer">
+    <p class="footer-text">Prototype. © Copyright 2017-<%= Time.now.year %>, CloudBroker GmbH. Version: 0.0.6</p>
+    <p class="footer-text">
+      <a href="https://www.decide-h2020.eu/" target="_blank">
+        This project has received funding from the European Union's Horizon 2020 research and innovation programme
+        under grant agreement No 731533
+        <img src="/flag_eu.jpg" class="footer-flag"/>
+      </a>
+    </p>
+</footer>
\ No newline at end of file
diff --git a/ACSmI/Billing/app/views/layouts/_navbar.html.erb b/ACSmI/Billing/app/views/layouts/_navbar.html.erb
new file mode 100644
index 0000000000000000000000000000000000000000..9737ebfa0b37b0e778aacd7d726f14e3a65eafc5
--- /dev/null
+++ b/ACSmI/Billing/app/views/layouts/_navbar.html.erb
@@ -0,0 +1,39 @@
+<nav class="navbar navbar-transparent navbar-absolute">
+  <div class="container-fluid">
+    <div class="navbar-header">
+      <%= link_to '/', class: 'navbar-brand' do %>
+        Acsmi Billing
+          <div class="ripple-container"></div>
+      <% end %>
+    </div>
+    <div class="collapse navbar-collapse">
+      <ul class="nav navbar-nav navbar-right">
+
+        <% if current_user %>
+          <li>
+            <a class="disabled">
+              <p>Logged in as: <%= current_user.full_name %></p>
+            </a>
+          </li>
+        <% end %>
+
+        <li>
+          <a id="userDropdown" class="dropdown-toggle" data-toggle="dropdown" href="#">
+            <i class="material-icons">person</i>
+            <p class="hidden-lg hidden-md">Profile</p>
+          </a>
+          <ul class="dropdown-menu" arial-labelledby="userDropdown">
+            <% if current_user %>
+
+              <li><%= link_to 'Sign out', sign_out_url, method: :delete %></li>
+            <% else %>
+              <li><%= link_to 'Sign in', sign_in_url %></li>
+            <% end %>
+          </ul>
+        </li>
+
+      </ul>
+
+    </div>
+  </div>
+</nav>
\ No newline at end of file
diff --git a/ACSmI/Billing/app/views/layouts/_sidebar.html.erb b/ACSmI/Billing/app/views/layouts/_sidebar.html.erb
new file mode 100644
index 0000000000000000000000000000000000000000..8ae22047631106845d78dbd57dc2593972b4c53d
--- /dev/null
+++ b/ACSmI/Billing/app/views/layouts/_sidebar.html.erb
@@ -0,0 +1,42 @@
+<div class="sidebar" data-color="primary" data-image="">
+  <div class="logo">
+    <%= link_to '/', class: 'simple-text' do %>
+        <div  class="logo-img">
+          <%= image_tag 'decide-logo.png' %>
+        </div>
+    <% end %>
+  </div>
+    <div class="sidebar-wrapper ps">
+      <div class="nav-container">
+        <ul class="nav">
+          <% if current_user %>
+
+            <li class="<%= sidebar_tab_class(:invoice) %>">
+              <%= link_to invoices_url do %>
+                <i class="material-icons">attach_money</i>
+                <p>Invoices</p>
+              <% end %>
+            </li>
+
+            <li class="<%= sidebar_tab_class(:usage) %>">
+              <%= link_to usage_records_url do %>
+                <i class="material-icons">library_books</i>
+                <p>Usage records</p>
+              <%end%>
+            </li>
+
+<!--            <li class="<%#= sidebar_tab_class(:billing) %>">
+              <%#= link_to billing_record_url do %>
+                <i class="material-icons">attach_money</i>
+                <p>Billing records</p>
+              <%#end%>
+            </li>-->
+
+          <% else %>
+          <% end %>
+        </ul>
+      </div>
+
+      <div class="ps__rail-x" style="left: 0px; bottom: 0px;"><div class="ps__thumb-x" tabindex="0" style="left: 0px; width: 0px;"></div></div><div class="ps__rail-y" style="top: 0px; right: 0px;"><div class="ps__thumb-y" tabindex="0" style="top: 0px; height: 0px;"></div></div></div>
+  <div class="sidebar-background" style="background-image: url(<%= image_url('sidebar-bg.jpg') %>)"></div>
+</div>
\ No newline at end of file
diff --git a/ACSmI/Billing/app/views/layouts/application.html.erb b/ACSmI/Billing/app/views/layouts/application.html.erb
new file mode 100644
index 0000000000000000000000000000000000000000..055a3af2b2628b32bd6d46bf9b5d3eae150b6338
--- /dev/null
+++ b/ACSmI/Billing/app/views/layouts/application.html.erb
@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <title>AcsmiBilling</title>
+
+
+  <%= stylesheet_link_tag 'application', media: 'all' %>
+  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
+  <link href="https://fonts.googleapis.com/css?family=Roboto:400,700,300|Material+Icons" rel="stylesheet" type="text/css">
+  <%= favicon_link_tag 'favicon.jpg' %>
+  <%= javascript_include_tag 'application' %>
+  <%= csrf_meta_tags %>
+</head>
+  <body>
+
+  <div class="col-md-12">
+    <div class="wrapper">
+      <div class="sidebar">
+        <%= render partial: 'layouts/sidebar' %>
+      </div>
+
+      <div class="main-panel">
+        <%= render partial: 'layouts/navbar' %>
+
+        <div class="main-content" id="mainWidth">
+          <div class="container-fluid">
+            <% if alert %>
+              <div class="alert alert-danger alert-dismissible" role="alert">
+                <button type="button" class="close" data-dismiss="alert" aria-label="Close">
+                  <span aria-hidden="true">&times;</span></button>
+                <%= alert %>
+              </div>
+            <% end %>
+
+            <%= yield %>
+            <%= render partial: 'layouts/footer' %>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+
+  <script>
+      $(document).ready(function () {
+          fixFooter();
+          $(window).resize(fixFooter);
+      });
+
+      function fixFooter() {
+          $('#footer').width($('#mainWidth').width());
+      }
+  </script>
+  </body>
+</html>
diff --git a/ACSmI/Billing/app/views/layouts/mailer.html.haml b/ACSmI/Billing/app/views/layouts/mailer.html.haml
new file mode 100644
index 0000000000000000000000000000000000000000..cbf6b8e2e00d42371d74b48a9476f924b13bb406
--- /dev/null
+++ b/ACSmI/Billing/app/views/layouts/mailer.html.haml
@@ -0,0 +1,8 @@
+!!!
+%html
+  %head
+    %meta{:content => "text/html; charset=utf-8", "http-equiv" => "Content-Type"}/
+    :css
+      /* Email styles need to be inline */
+  %body
+    = yield
diff --git a/ACSmI/Billing/app/views/layouts/mailer.text.haml b/ACSmI/Billing/app/views/layouts/mailer.text.haml
new file mode 100644
index 0000000000000000000000000000000000000000..0a90f092c5b3e76310ce4ed12814f0cb316b9200
--- /dev/null
+++ b/ACSmI/Billing/app/views/layouts/mailer.text.haml
@@ -0,0 +1 @@
+= yield
diff --git a/ACSmI/Billing/app/views/shared/_errors.html.erb b/ACSmI/Billing/app/views/shared/_errors.html.erb
new file mode 100644
index 0000000000000000000000000000000000000000..ce37af464bf22a3e3dc9602c05d5c912ddf1f31e
--- /dev/null
+++ b/ACSmI/Billing/app/views/shared/_errors.html.erb
@@ -0,0 +1,12 @@
+<% if object.errors.any? %>
+
+  <div class="panel panel-danger errors">
+
+
+  <div class="panel-heading">
+    <% object.errors.full_messages.each do |msg| %>
+      <i class="glyphicon glyphicon-exclamation-sign"></i><%= msg %>
+    <% end %>
+  </div>
+  </div>
+<% end %>
\ No newline at end of file
diff --git a/ACSmI/Billing/app/views/usage_records/index.html.haml b/ACSmI/Billing/app/views/usage_records/index.html.haml
new file mode 100644
index 0000000000000000000000000000000000000000..0114aaef2f9324e308b67bb382a26522fb87067f
--- /dev/null
+++ b/ACSmI/Billing/app/views/usage_records/index.html.haml
@@ -0,0 +1,32 @@
+.card.card-plain
+  .card-header{ data: { 'background-color' => 'primary' } }
+    %h4.title Usage records
+    %p.category Your contracting usage attached to your account
+  .card-content.table-responsive
+    %table.table.table-hover
+      - if @usage_records
+        %thead
+          %tr
+            %th Contract id
+            %th Usage type
+            %th Cost
+            %th Date
+            %th Actions
+
+        - @usage_records.each do |u_r|
+          %tbody
+            %tr
+              %td
+                = u_r.contract.global_id
+              %td
+                = u_r.usage_type
+              %td
+                = u_r.cost
+              %td
+                = "#{u_r.invoice.beginning} / #{u_r.invoice.ending}"
+              %td
+                = link_to 'info', usage_record_url(u_r), class: 'material-icons'
+      - else
+        %tbody
+          %tr
+            %td{ colspan: 3 } You do not have any usage records at the moment
diff --git a/ACSmI/Billing/app/views/usage_records/show.html.haml b/ACSmI/Billing/app/views/usage_records/show.html.haml
new file mode 100644
index 0000000000000000000000000000000000000000..655126b0b72df364a89c01b719bc01c86ff78861
--- /dev/null
+++ b/ACSmI/Billing/app/views/usage_records/show.html.haml
@@ -0,0 +1,80 @@
+.card.card-plain
+  .card-header{ data: { 'background-color' => 'primary' } }
+    %h4.title Usage record information
+    %p.category Detail record information
+  .contracts-content
+
+  - if @contracting_resource
+    .show
+
+    .delimiter
+
+    .row.resource-info
+      .col-md-2
+        %label Usage type
+      .col-md-6
+        = @usage_record.usage_type
+    .row.resource-info
+      .col-md-2
+        %label Service name
+      .col-md-6
+        = @contracting_resource.service_name
+    .row.resource-info
+      .col-md-2
+        %label Service id
+      .col-md-6
+        = @contracting_resource.service_id
+    .row.resource-info
+      .col-md-2
+        %label Resource_name
+      .col-md-6
+        = @contracting_resource.resource_name
+    .row.resource-info
+      .col-md-2
+        %label Resource id
+      .col-md-6
+        = @contracting_resource.resource_id
+    .row.resource-info
+      .col-md-2
+        %label Contract id
+      .col-md-6
+        = @usage_record.contract.global_id
+    .row.resource-info
+      .col-md-2
+        %label Cost
+      .col-md-6
+        = @usage_record.cost
+    .row.resource-info
+      .col-md-2
+        %label Contracting method
+      .col-md-6
+        = @contracting_resource.contracting_method
+    .row.resource-info
+      .col-md-2
+        %label Date
+      .col-md-6
+        = "#{@usage_record.invoice.beginning} / #{@usage_record.invoice.ending}"
+
+    .delimiter
+
+
+  - if @description_fields
+
+    .card-content.table-responsive
+      %table.table.table-hover
+        %tr
+          - @description_fields.each do |descr_field|
+            .row.resource-info
+              .col-md-2
+                %th
+                  = descr_field.name
+              .col-md-6
+                %th
+                  = descr_field.value
+              %tr
+  - else
+    %tbody
+      %tr
+        %td{ colspan: 3 } This record does not have any information
+
+  = link_to 'back', usage_records_url, class: 'btn btn-default'
\ No newline at end of file
diff --git a/ACSmI/Billing/app/views/user_sessions/new.html.erb b/ACSmI/Billing/app/views/user_sessions/new.html.erb
new file mode 100644
index 0000000000000000000000000000000000000000..761060c132e86d1b9787b1907207cb8efcfb8ac3
--- /dev/null
+++ b/ACSmI/Billing/app/views/user_sessions/new.html.erb
@@ -0,0 +1,24 @@
+  <div class = 'form-container'>
+
+    <div class = 'form-header'><h3> Please sign in </h3></div>
+
+    <%= form_for @user_session, url: sign_in_url do |f| %>
+
+      <%= render 'shared/errors', object: @user_session %>
+
+       <div class="form-group">
+         <%= f.label :email %>
+         <%= f.email_field :email, class: 'form-control' %>
+       </div>
+
+       <div class="form-group">
+         <%= f.label :password %>
+         <%= f.password_field :password, class: 'form-control' %>
+       </div>
+
+       <div class="form-group">
+         <%= link_to 'Back', '/', class: 'btn btn-default' %>
+         <%= f.submit "Log in!", class: 'btn btn-primary btn-lg' %>
+       </div>
+    <% end %>
+  </div>
\ No newline at end of file
diff --git a/ACSmI/Billing/bin/bundle b/ACSmI/Billing/bin/bundle
new file mode 100644
index 0000000000000000000000000000000000000000..f19acf5b5cc6e80139297e3e6ba9d2fff4153a21
--- /dev/null
+++ b/ACSmI/Billing/bin/bundle
@@ -0,0 +1,3 @@
+#!/usr/bin/env ruby
+ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
+load Gem.bin_path('bundler', 'bundle')
diff --git a/ACSmI/Billing/bin/delayed_job b/ACSmI/Billing/bin/delayed_job
new file mode 100644
index 0000000000000000000000000000000000000000..edf195985f692057c67e71d2f8b493ee3078a0d6
--- /dev/null
+++ b/ACSmI/Billing/bin/delayed_job
@@ -0,0 +1,5 @@
+#!/usr/bin/env ruby
+
+require File.expand_path(File.join(File.dirname(__FILE__), '..', 'config', 'environment'))
+require 'delayed/command'
+Delayed::Command.new(ARGV).daemonize
diff --git a/ACSmI/Billing/bin/rails b/ACSmI/Billing/bin/rails
new file mode 100644
index 0000000000000000000000000000000000000000..5badb2fde0cb72bbb3cba8436721048dfd7e58dd
--- /dev/null
+++ b/ACSmI/Billing/bin/rails
@@ -0,0 +1,9 @@
+#!/usr/bin/env ruby
+begin
+  load File.expand_path('../spring', __FILE__)
+rescue LoadError => e
+  raise unless e.message.include?('spring')
+end
+APP_PATH = File.expand_path('../config/application', __dir__)
+require_relative '../config/boot'
+require 'rails/commands'
diff --git a/ACSmI/Billing/bin/rake b/ACSmI/Billing/bin/rake
new file mode 100644
index 0000000000000000000000000000000000000000..d87d5f578104597c1d1b951b55942e37f8af1277
--- /dev/null
+++ b/ACSmI/Billing/bin/rake
@@ -0,0 +1,9 @@
+#!/usr/bin/env ruby
+begin
+  load File.expand_path('../spring', __FILE__)
+rescue LoadError => e
+  raise unless e.message.include?('spring')
+end
+require_relative '../config/boot'
+require 'rake'
+Rake.application.run
diff --git a/ACSmI/Billing/bin/setup b/ACSmI/Billing/bin/setup
new file mode 100644
index 0000000000000000000000000000000000000000..94fd4d79775a4753be024c3fe15548e949327636
--- /dev/null
+++ b/ACSmI/Billing/bin/setup
@@ -0,0 +1,36 @@
+#!/usr/bin/env ruby
+require 'fileutils'
+include FileUtils
+
+# path to your application root.
+APP_ROOT = File.expand_path('..', __dir__)
+
+def system!(*args)
+  system(*args) || abort("\n== Command #{args} failed ==")
+end
+
+chdir APP_ROOT do
+  # This script is a starting point to setup your application.
+  # Add necessary setup steps to this file.
+
+  puts '== Installing dependencies =='
+  system! 'gem install bundler --conservative'
+  system('bundle check') || system!('bundle install')
+
+  # Install JavaScript dependencies if using Yarn
+  # system('bin/yarn')
+
+  # puts "\n== Copying sample files =="
+  # unless File.exist?('config/database.yml')
+  #   cp 'config/database.yml.sample', 'config/database.yml'
+  # end
+
+  puts "\n== Preparing database =="
+  system! 'bin/rails db:setup'
+
+  puts "\n== Removing old logs and tempfiles =="
+  system! 'bin/rails log:clear tmp:clear'
+
+  puts "\n== Restarting application server =="
+  system! 'bin/rails restart'
+end
diff --git a/ACSmI/Billing/bin/spring b/ACSmI/Billing/bin/spring
new file mode 100644
index 0000000000000000000000000000000000000000..fb2ec2ebb48dfade14242dea0add2d98d235a6cb
--- /dev/null
+++ b/ACSmI/Billing/bin/spring
@@ -0,0 +1,17 @@
+#!/usr/bin/env ruby
+
+# This file loads spring without using Bundler, in order to be fast.
+# It gets overwritten when you run the `spring binstub` command.
+
+unless defined?(Spring)
+  require 'rubygems'
+  require 'bundler'
+
+  lockfile = Bundler::LockfileParser.new(Bundler.default_lockfile.read)
+  spring = lockfile.specs.detect { |spec| spec.name == "spring" }
+  if spring
+    Gem.use_paths Gem.dir, Bundler.bundle_path.to_s, *Gem.path
+    gem 'spring', spring.version
+    require 'spring/binstub'
+  end
+end
diff --git a/ACSmI/Billing/bin/update b/ACSmI/Billing/bin/update
new file mode 100644
index 0000000000000000000000000000000000000000..58bfaed518c131bea0d7cde6052923de54620523
--- /dev/null
+++ b/ACSmI/Billing/bin/update
@@ -0,0 +1,31 @@
+#!/usr/bin/env ruby
+require 'fileutils'
+include FileUtils
+
+# path to your application root.
+APP_ROOT = File.expand_path('..', __dir__)
+
+def system!(*args)
+  system(*args) || abort("\n== Command #{args} failed ==")
+end
+
+chdir APP_ROOT do
+  # This script is a way to update your development environment automatically.
+  # Add necessary update steps to this file.
+
+  puts '== Installing dependencies =='
+  system! 'gem install bundler --conservative'
+  system('bundle check') || system!('bundle install')
+
+  # Install JavaScript dependencies if using Yarn
+  # system('bin/yarn')
+
+  puts "\n== Updating database =="
+  system! 'bin/rails db:migrate'
+
+  puts "\n== Removing old logs and tempfiles =="
+  system! 'bin/rails log:clear tmp:clear'
+
+  puts "\n== Restarting application server =="
+  system! 'bin/rails restart'
+end
diff --git a/ACSmI/Billing/bin/yarn b/ACSmI/Billing/bin/yarn
new file mode 100644
index 0000000000000000000000000000000000000000..460dd565b4a3dd6c4cb028bc19d78a7c066d3ec8
--- /dev/null
+++ b/ACSmI/Billing/bin/yarn
@@ -0,0 +1,11 @@
+#!/usr/bin/env ruby
+APP_ROOT = File.expand_path('..', __dir__)
+Dir.chdir(APP_ROOT) do
+  begin
+    exec "yarnpkg", *ARGV
+  rescue Errno::ENOENT
+    $stderr.puts "Yarn executable was not detected in the system."
+    $stderr.puts "Download Yarn at https://yarnpkg.com/en/docs/install"
+    exit 1
+  end
+end
diff --git a/ACSmI/Billing/config.ru b/ACSmI/Billing/config.ru
new file mode 100644
index 0000000000000000000000000000000000000000..f7ba0b527b16a6f539991825ecd72c2e9b6e3af0
--- /dev/null
+++ b/ACSmI/Billing/config.ru
@@ -0,0 +1,5 @@
+# This file is used by Rack-based servers to start the application.
+
+require_relative 'config/environment'
+
+run Rails.application
diff --git a/ACSmI/Billing/config/application.rb b/ACSmI/Billing/config/application.rb
new file mode 100644
index 0000000000000000000000000000000000000000..c9cde5cc23aa9be52365c88c03d9e328ffdad06f
--- /dev/null
+++ b/ACSmI/Billing/config/application.rb
@@ -0,0 +1,41 @@
+require_relative 'boot'
+
+require "rails"
+# Pick the frameworks you want:
+require "active_model/railtie"
+require "active_job/railtie"
+require "active_record/railtie"
+require "active_storage/engine"
+require "action_controller/railtie"
+require "action_mailer/railtie"
+require "action_view/railtie"
+require "action_cable/engine"
+require "sprockets/railtie"
+# require "rails/test_unit/railtie"
+
+# Require the gems listed in Gemfile, including any gems
+# you've limited to :test, :development, or :production.
+Bundler.require(*Rails.groups)
+
+module AcsmiBilling
+  class Application < Rails::Application
+    # Initialize configuration defaults for originally generated Rails version.
+    config.load_defaults 5.2
+
+    # Settings in config/environments/* take precedence over those specified here.
+    # Application configuration can go into files in config/initializers
+    # -- all .rb files in that directory are automatically loaded after loading
+    # the framework and any gems in your application.
+
+    # react
+    #config.react.addons = true
+
+    # Don't generate system test files.
+    config.generators.system_tests = nil
+
+    config.active_job.queue_adapter = :delayed_job
+
+    config.autoload_paths += %W(#{config.root}/lib)
+
+  end
+end
diff --git a/ACSmI/Billing/config/boot.rb b/ACSmI/Billing/config/boot.rb
new file mode 100644
index 0000000000000000000000000000000000000000..b9e460cef324d4f181108c7d209983da090e6b6a
--- /dev/null
+++ b/ACSmI/Billing/config/boot.rb
@@ -0,0 +1,4 @@
+ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
+
+require 'bundler/setup' # Set up gems listed in the Gemfile.
+require 'bootsnap/setup' # Speed up boot time by caching expensive operations.
diff --git a/ACSmI/Billing/config/cable.yml b/ACSmI/Billing/config/cable.yml
new file mode 100644
index 0000000000000000000000000000000000000000..2166db6b659b4c6d5cbcc5f930d62723649cdca4
--- /dev/null
+++ b/ACSmI/Billing/config/cable.yml
@@ -0,0 +1,10 @@
+development:
+  adapter: async
+
+test:
+  adapter: async
+
+production:
+  adapter: redis
+  url: <%= ENV.fetch("REDIS_URL") { "redis://localhost:6379/1" } %>
+  channel_prefix: acsmi_billing_production
diff --git a/ACSmI/Billing/config/credentials.yml.enc b/ACSmI/Billing/config/credentials.yml.enc
new file mode 100644
index 0000000000000000000000000000000000000000..512fff4e0966d2def1814f9354a1c52973e0ee17
--- /dev/null
+++ b/ACSmI/Billing/config/credentials.yml.enc
@@ -0,0 +1 @@
+stKaUO608vvpOAMbMCipNjWvNHSdyWjnB7naq9G4w8nq3n9YBYmLhRTU0iUnsrAtgesewGQT44BQmcg6SyfB3/ROjqMYsQzg2VBwtw2qY17K+K9XDAURVOHtYqfnmQ6axHuBOFv0YXBtNF2EoQ1x/46ulnT2dAlVeHaBtoN5DUwA6/nlDNwEV7MHIk1tOGtnvt60F6wW+dL8MgekIko4MJJQRps/YoNFyaPzKYolbbRuuoNRcHnZ9phfoeAh8mGXDapr2EuRGs8++G+tn6C8oo6oF1Lllf+2gnjNS5/ejrpcvvYXfM/mOH6v+kjLQ4rtqyK4ra8RNxv0I93tgrPM1tNZvMA/JX1rRhOTIQwUTkZSwEnEdToLUqJEQTrpd4kc9VKp2kWE94a/kS2kL7LLDscq0HSr33xYXQxq--1xFgfeWd0sAr4v18--F1uj06aePVyoMMyDGOzkjQ==
\ No newline at end of file
diff --git a/ACSmI/Billing/config/database.yml b/ACSmI/Billing/config/database.yml
new file mode 100644
index 0000000000000000000000000000000000000000..22abe2814e4ca1ec2074af19a680300b9c749aea
--- /dev/null
+++ b/ACSmI/Billing/config/database.yml
@@ -0,0 +1,25 @@
+# SQLite version 3.x
+#   gem install sqlite3
+#
+#   Ensure the SQLite 3 gem is defined in your Gemfile
+#   gem 'sqlite3'
+#
+default: &default
+  adapter: sqlite3
+  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
+  timeout: 5000
+
+development:
+  <<: *default
+  database: db/development.sqlite3
+
+# Warning: The database defined as "test" will be erased and
+# re-generated from your development database when you run "rake".
+# Do not set this db to the same as development or production.
+test:
+  <<: *default
+  database: db/test.sqlite3
+
+production:
+  <<: *default
+  database: db/sqlite/production.sqlite3
diff --git a/ACSmI/Billing/config/environment.rb b/ACSmI/Billing/config/environment.rb
new file mode 100644
index 0000000000000000000000000000000000000000..426333bb46978d897be4cc6fac77b9fcaacf59d0
--- /dev/null
+++ b/ACSmI/Billing/config/environment.rb
@@ -0,0 +1,5 @@
+# Load the Rails application.
+require_relative 'application'
+
+# Initialize the Rails application.
+Rails.application.initialize!
diff --git a/ACSmI/Billing/config/environments/development.rb b/ACSmI/Billing/config/environments/development.rb
new file mode 100644
index 0000000000000000000000000000000000000000..6f6af1de13cbd8baa22523dde1014c95f80418fd
--- /dev/null
+++ b/ACSmI/Billing/config/environments/development.rb
@@ -0,0 +1,69 @@
+Rails.application.configure do
+  config.action_mailer.raise_delivery_errors = true
+  config.action_mailer.perform_deliveries = true
+
+  config.action_mailer.default_url_options = { :host => 'localhost:3000' }
+
+  config.action_mailer.delivery_method = :smtp
+
+  # Settings specified here will take precedence over those in config/application.rb.
+
+  # In the development environment your application's code is reloaded on
+  # every request. This slows down response time but is perfect for development
+  # since you don't have to restart the web server when you make code changes.
+  config.cache_classes = false
+
+  # Do not eager load code on boot.
+  config.eager_load = false
+
+  # Show full error reports.
+  config.consider_all_requests_local = true
+
+  # Enable/disable caching. By default caching is disabled.
+  # Run rails dev:cache to toggle caching.
+  if Rails.root.join('tmp', 'caching-dev.txt').exist?
+    config.action_controller.perform_caching = true
+
+    config.cache_store = :memory_store
+    config.public_file_server.headers = {
+      'Cache-Control' => "public, max-age=#{2.days.to_i}"
+    }
+  else
+    config.action_controller.perform_caching = false
+
+    config.cache_store = :null_store
+  end
+
+  # Store uploaded files on the local file system (see config/storage.yml for options)
+  config.active_storage.service = :local
+
+  # Don't care if the mailer can't send.
+  config.action_mailer.raise_delivery_errors = true
+  config.action_mailer.perform_deliveries = true
+
+  config.action_mailer.perform_caching = false
+
+  # Print deprecation notices to the Rails logger.
+  config.active_support.deprecation = :log
+
+  # Raise an error on page load if there are pending migrations.
+  config.active_record.migration_error = :page_load
+
+  # Highlight code that triggered database queries in logs.
+  config.active_record.verbose_query_logs = true
+
+  # Debug mode disables concatenation and preprocessing of assets.
+  # This option may cause significant delays in view rendering with a large
+  # number of complex assets.
+  config.assets.debug = true
+
+  # Suppress logger output for asset requests.
+  config.assets.quiet = true
+
+  # Raises error for missing translations
+  # config.action_view.raise_on_missing_translations = true
+
+  # Use an evented file watcher to asynchronously detect changes in source code,
+  # routes, locales, etc. This feature depends on the listen gem.
+  config.file_watcher = ActiveSupport::EventedFileUpdateChecker
+end
diff --git a/ACSmI/Billing/config/environments/production.rb b/ACSmI/Billing/config/environments/production.rb
new file mode 100644
index 0000000000000000000000000000000000000000..cff9bf6c49c4caf7648190d833d5884fb538cd8e
--- /dev/null
+++ b/ACSmI/Billing/config/environments/production.rb
@@ -0,0 +1,95 @@
+Rails.application.configure do
+  # Settings specified here will take precedence over those in config/application.rb.
+
+  # Code is not reloaded between requests.
+  config.cache_classes = true
+
+  # Eager load code on boot. This eager loads most of Rails and
+  # your application in memory, allowing both threaded web servers
+  # and those relying on copy on write to perform better.
+  # Rake tasks automatically ignore this option for performance.
+  config.eager_load = true
+
+  # Full error reports are disabled and caching is turned on.
+  config.consider_all_requests_local       = false
+  config.action_controller.perform_caching = true
+
+  # Ensures that a master key has been made available in either ENV["RAILS_MASTER_KEY"]
+  # or in config/master.key. This key is used to decrypt credentials (and other encrypted files).
+  # config.require_master_key = true
+
+  # Disable serving static files from the `/public` folder by default since
+  # Apache or NGINX already handles this.
+  config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?
+
+  # Compress JavaScripts and CSS.
+  config.assets.js_compressor = :uglifier
+  # config.assets.css_compressor = :sass
+
+  # Do not fallback to assets pipeline if a precompiled asset is missed.
+  config.assets.compile = false
+
+  # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb
+
+  # Enable serving of images, stylesheets, and JavaScripts from an asset server.
+  # config.action_controller.asset_host = 'http://assets.example.com'
+
+  # Specifies the header that your server uses for sending files.
+  # config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache
+  # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX
+
+  # Store uploaded files on the local file system (see config/storage.yml for options)
+  config.active_storage.service = :local
+
+  # Mount Action Cable outside main process or domain
+  # config.action_cable.mount_path = nil
+  # config.action_cable.url = 'wss://example.com/cable'
+  # config.action_cable.allowed_request_origins = [ 'http://example.com', /http:\/\/example.*/ ]
+
+  # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
+  # config.force_ssl = true
+
+  # Use the lowest log level to ensure availability of diagnostic information
+  # when problems arise.
+  config.log_level = :debug
+
+  # Prepend all log lines with the following tags.
+  config.log_tags = [ :request_id ]
+
+  # Use a different cache store in production.
+  # config.cache_store = :mem_cache_store
+
+  # Use a real queuing backend for Active Job (and separate queues per environment)
+  # config.active_job.queue_adapter     = :resque
+  # config.active_job.queue_name_prefix = "acsmi_billing_#{Rails.env}"
+
+  config.action_mailer.perform_caching = false
+
+  # Ignore bad email addresses and do not raise email delivery errors.
+  # Set this to true and configure the email server for immediate delivery to raise delivery errors.
+  # config.action_mailer.raise_delivery_errors = false
+
+  # Enable locale fallbacks for I18n (makes lookups for any locale fall back to
+  # the I18n.default_locale when a translation cannot be found).
+  config.i18n.fallbacks = true
+
+  # Send deprecation notices to registered listeners.
+  config.active_support.deprecation = :notify
+
+  # Use default logging formatter so that PID and timestamp are not suppressed.
+  config.log_formatter = ::Logger::Formatter.new
+
+  # Use a different logger for distributed setups.
+  # require 'syslog/logger'
+  # config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new 'app-name')
+
+  if ENV["RAILS_LOG_TO_STDOUT"].present?
+    logger           = ActiveSupport::Logger.new(STDOUT)
+    logger.formatter = config.log_formatter
+    config.logger    = ActiveSupport::TaggedLogging.new(logger)
+  end
+
+  # Do not dump schema after migrations.
+  config.active_record.dump_schema_after_migration = false
+  config.assets.compile = true
+end
diff --git a/ACSmI/Billing/config/environments/test.rb b/ACSmI/Billing/config/environments/test.rb
new file mode 100644
index 0000000000000000000000000000000000000000..0a38fd3ce920ae5f2a60d30abbd484fba7c1622e
--- /dev/null
+++ b/ACSmI/Billing/config/environments/test.rb
@@ -0,0 +1,46 @@
+Rails.application.configure do
+  # Settings specified here will take precedence over those in config/application.rb.
+
+  # The test environment is used exclusively to run your application's
+  # test suite. You never need to work with it otherwise. Remember that
+  # your test database is "scratch space" for the test suite and is wiped
+  # and recreated between test runs. Don't rely on the data there!
+  config.cache_classes = true
+
+  # Do not eager load code on boot. This avoids loading your whole application
+  # just for the purpose of running a single test. If you are using a tool that
+  # preloads Rails for running tests, you may have to set it to true.
+  config.eager_load = false
+
+  # Configure public file server for tests with Cache-Control for performance.
+  config.public_file_server.enabled = true
+  config.public_file_server.headers = {
+    'Cache-Control' => "public, max-age=#{1.hour.to_i}"
+  }
+
+  # Show full error reports and disable caching.
+  config.consider_all_requests_local       = true
+  config.action_controller.perform_caching = false
+
+  # Raise exceptions instead of rendering exception templates.
+  config.action_dispatch.show_exceptions = false
+
+  # Disable request forgery protection in test environment.
+  config.action_controller.allow_forgery_protection = false
+
+  # Store uploaded files on the local file system in a temporary directory
+  config.active_storage.service = :test
+
+  config.action_mailer.perform_caching = false
+
+  # Tell Action Mailer not to deliver emails to the real world.
+  # The :test delivery method accumulates sent emails in the
+  # ActionMailer::Base.deliveries array.
+  config.action_mailer.delivery_method = :test
+
+  # Print deprecation notices to the stderr.
+  config.active_support.deprecation = :stderr
+
+  # Raises error for missing translations
+  # config.action_view.raise_on_missing_translations = true
+end
diff --git a/ACSmI/Billing/config/initializers/acsmi_ext.rb b/ACSmI/Billing/config/initializers/acsmi_ext.rb
new file mode 100644
index 0000000000000000000000000000000000000000..b7fe74f68f946887967398f10a6528edf6fa88a1
--- /dev/null
+++ b/ACSmI/Billing/config/initializers/acsmi_ext.rb
@@ -0,0 +1,11 @@
+ACSMI_EMAIL = "acsmi@cloudbroker.com"
+ACSMI_EMAIL.freeze
+
+INITIAL_PASSWORD = "9a4D3L8b-35b0b1-92MG38b2-4SF6fe2e"
+INITIAL_PASSWORD.freeze
+
+ADMIN_NAME = "ACSMI admin"
+ADMIN_NAME.freeze
+
+INITIAL_ORGANIZATION_NAME = "ACSMI organization"
+INITIAL_ORGANIZATION_NAME.freeze
\ No newline at end of file
diff --git a/ACSmI/Billing/config/initializers/application_controller_renderer.rb b/ACSmI/Billing/config/initializers/application_controller_renderer.rb
new file mode 100644
index 0000000000000000000000000000000000000000..89d2efab2ba659d7814a7665a99f7f8d7429a072
--- /dev/null
+++ b/ACSmI/Billing/config/initializers/application_controller_renderer.rb
@@ -0,0 +1,8 @@
+# Be sure to restart your server when you modify this file.
+
+# ActiveSupport::Reloader.to_prepare do
+#   ApplicationController.renderer.defaults.merge!(
+#     http_host: 'example.org',
+#     https: false
+#   )
+# end
diff --git a/ACSmI/Billing/config/initializers/assets.rb b/ACSmI/Billing/config/initializers/assets.rb
new file mode 100644
index 0000000000000000000000000000000000000000..4b828e80cb778244843194acf5f8a74238ec2c13
--- /dev/null
+++ b/ACSmI/Billing/config/initializers/assets.rb
@@ -0,0 +1,14 @@
+# Be sure to restart your server when you modify this file.
+
+# Version of your assets, change this if you want to expire all your assets.
+Rails.application.config.assets.version = '1.0'
+
+# Add additional assets to the asset load path.
+# Rails.application.config.assets.paths << Emoji.images_path
+# Add Yarn node_modules folder to the asset load path.
+Rails.application.config.assets.paths << Rails.root.join('node_modules')
+
+# Precompile additional assets.
+# application.js, application.css, and all non-JS/CSS in the app/assets
+# folder are already added.
+# Rails.application.config.assets.precompile += %w( admin.js admin.css )
diff --git a/ACSmI/Billing/config/initializers/backtrace_silencers.rb b/ACSmI/Billing/config/initializers/backtrace_silencers.rb
new file mode 100644
index 0000000000000000000000000000000000000000..59385cdf379bd06a8d2326dcd4de6d5cd5d3f5b0
--- /dev/null
+++ b/ACSmI/Billing/config/initializers/backtrace_silencers.rb
@@ -0,0 +1,7 @@
+# Be sure to restart your server when you modify this file.
+
+# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces.
+# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ }
+
+# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code.
+# Rails.backtrace_cleaner.remove_silencers!
diff --git a/ACSmI/Billing/config/initializers/content_security_policy.rb b/ACSmI/Billing/config/initializers/content_security_policy.rb
new file mode 100644
index 0000000000000000000000000000000000000000..d3bcaa5ec84ac0761911dcdc0a7bf1c67f44a392
--- /dev/null
+++ b/ACSmI/Billing/config/initializers/content_security_policy.rb
@@ -0,0 +1,25 @@
+# Be sure to restart your server when you modify this file.
+
+# Define an application-wide content security policy
+# For further information see the following documentation
+# https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy
+
+# Rails.application.config.content_security_policy do |policy|
+#   policy.default_src :self, :https
+#   policy.font_src    :self, :https, :data
+#   policy.img_src     :self, :https, :data
+#   policy.object_src  :none
+#   policy.script_src  :self, :https
+#   policy.style_src   :self, :https
+
+#   # Specify URI for violation reports
+#   # policy.report_uri "/csp-violation-report-endpoint"
+# end
+
+# If you are using UJS then enable automatic nonce generation
+# Rails.application.config.content_security_policy_nonce_generator = -> request { SecureRandom.base64(16) }
+
+# Report CSP violations to a specified URI
+# For further information see the following documentation:
+# https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy-Report-Only
+# Rails.application.config.content_security_policy_report_only = true
diff --git a/ACSmI/Billing/config/initializers/cookies_serializer.rb b/ACSmI/Billing/config/initializers/cookies_serializer.rb
new file mode 100644
index 0000000000000000000000000000000000000000..5a6a32d371fe575acf9f87e2ab7e8ae4d0f11e69
--- /dev/null
+++ b/ACSmI/Billing/config/initializers/cookies_serializer.rb
@@ -0,0 +1,5 @@
+# Be sure to restart your server when you modify this file.
+
+# Specify a serializer for the signed and encrypted cookie jars.
+# Valid options are :json, :marshal, and :hybrid.
+Rails.application.config.action_dispatch.cookies_serializer = :json
diff --git a/ACSmI/Billing/config/initializers/delayed_job.rb b/ACSmI/Billing/config/initializers/delayed_job.rb
new file mode 100644
index 0000000000000000000000000000000000000000..611a5727e82f874fef90dca090beac0bd4259b55
--- /dev/null
+++ b/ACSmI/Billing/config/initializers/delayed_job.rb
@@ -0,0 +1,11 @@
+if ActiveRecord::Base.connection.table_exists? 'delayed_jobs'
+  Delayed::Job.where.not(locked_at: nil).delete_all
+
+  unless Delayed::Job.where('handler LIKE ?', '%PlatformUsageMonitorJob%').any?
+    Delayed::Job.enqueue(PlatformUsageMonitorJob.new)
+  end
+
+  unless Delayed::Job.where('handler LIKE ?', '%MonthlyInvoiceJob%').any?
+    Delayed::Job.enqueue(MonthlyInvoiceJob.new)
+  end
+end
diff --git a/ACSmI/Billing/config/initializers/filter_parameter_logging.rb b/ACSmI/Billing/config/initializers/filter_parameter_logging.rb
new file mode 100644
index 0000000000000000000000000000000000000000..4a994e1e7bb7ce28dcec98bad48b9a891d7dec51
--- /dev/null
+++ b/ACSmI/Billing/config/initializers/filter_parameter_logging.rb
@@ -0,0 +1,4 @@
+# Be sure to restart your server when you modify this file.
+
+# Configure sensitive parameters which will be filtered from the log file.
+Rails.application.config.filter_parameters += [:password]
diff --git a/ACSmI/Billing/config/initializers/inflections.rb b/ACSmI/Billing/config/initializers/inflections.rb
new file mode 100644
index 0000000000000000000000000000000000000000..ac033bf9dc846101320c96a5ce8aceb8c96ec098
--- /dev/null
+++ b/ACSmI/Billing/config/initializers/inflections.rb
@@ -0,0 +1,16 @@
+# Be sure to restart your server when you modify this file.
+
+# Add new inflection rules using the following format. Inflections
+# are locale specific, and you may define rules for as many different
+# locales as you wish. All of these examples are active by default:
+# ActiveSupport::Inflector.inflections(:en) do |inflect|
+#   inflect.plural /^(ox)$/i, '\1en'
+#   inflect.singular /^(ox)en/i, '\1'
+#   inflect.irregular 'person', 'people'
+#   inflect.uncountable %w( fish sheep )
+# end
+
+# These inflection rules are supported but not enabled by default:
+# ActiveSupport::Inflector.inflections(:en) do |inflect|
+#   inflect.acronym 'RESTful'
+# end
diff --git a/ACSmI/Billing/config/initializers/mime_types.rb b/ACSmI/Billing/config/initializers/mime_types.rb
new file mode 100644
index 0000000000000000000000000000000000000000..8671306a4792c26cd56e46c7375b35bb529caf92
--- /dev/null
+++ b/ACSmI/Billing/config/initializers/mime_types.rb
@@ -0,0 +1,5 @@
+# Be sure to restart your server when you modify this file.
+
+# Add new mime types for use in respond_to blocks:
+# Mime::Type.register "text/richtext", :rtf
+Mime::Type.register "application/pdf", :pdf
\ No newline at end of file
diff --git a/ACSmI/Billing/config/initializers/smtp_settings.rb b/ACSmI/Billing/config/initializers/smtp_settings.rb
new file mode 100644
index 0000000000000000000000000000000000000000..1da44e4af18abb476401e39571a2c4a0c7dd147c
--- /dev/null
+++ b/ACSmI/Billing/config/initializers/smtp_settings.rb
@@ -0,0 +1,11 @@
+if ActiveRecord::Base.connection.table_exists? 'settings'
+  ActionMailer::Base.smtp_settings = {
+    address: Setting.value('smtp_address', strict: false),
+    port: '587',
+    domain: Setting.value('smtp_domain', strict: false),
+    user_name: Setting.value('smtp_email', strict: false),
+    password: Setting.value('smtp_password', strict: false),
+    authentication: Setting.value('smtp_auth', strict: false),
+    enable_starttls_auto: true
+  }
+end
diff --git a/ACSmI/Billing/config/initializers/wrap_parameters.rb b/ACSmI/Billing/config/initializers/wrap_parameters.rb
new file mode 100644
index 0000000000000000000000000000000000000000..bbfc3961bffef15dabb35fe0de4c409d6efb58c5
--- /dev/null
+++ b/ACSmI/Billing/config/initializers/wrap_parameters.rb
@@ -0,0 +1,14 @@
+# Be sure to restart your server when you modify this file.
+
+# This file contains settings for ActionController::ParamsWrapper which
+# is enabled by default.
+
+# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array.
+ActiveSupport.on_load(:action_controller) do
+  wrap_parameters format: [:json]
+end
+
+# To enable root element in JSON for ActiveRecord objects.
+# ActiveSupport.on_load(:active_record) do
+#   self.include_root_in_json = true
+# end
diff --git a/ACSmI/Billing/config/locales/en.yml b/ACSmI/Billing/config/locales/en.yml
new file mode 100644
index 0000000000000000000000000000000000000000..decc5a85735df127f96b89043ed6c6911713941a
--- /dev/null
+++ b/ACSmI/Billing/config/locales/en.yml
@@ -0,0 +1,33 @@
+# Files in the config/locales directory are used for internationalization
+# and are automatically loaded by Rails. If you want to use locales other
+# than English, add the necessary files in this directory.
+#
+# To use the locales, use `I18n.t`:
+#
+#     I18n.t 'hello'
+#
+# In views, this is aliased to just `t`:
+#
+#     <%= t('hello') %>
+#
+# To use a different locale, set it with `I18n.locale`:
+#
+#     I18n.locale = :es
+#
+# This would use the information in config/locales/es.yml.
+#
+# The following keys must be escaped otherwise they will not be retrieved by
+# the default I18n backend:
+#
+# true, false, on, off, yes, no
+#
+# Instead, surround them with single quotes.
+#
+# en:
+#   'true': 'foo'
+#
+# To learn more, please read the Rails Internationalization guide
+# available at http://guides.rubyonrails.org/i18n.html.
+
+en:
+  hello: "Hello world"
diff --git a/ACSmI/Billing/config/puma.rb b/ACSmI/Billing/config/puma.rb
new file mode 100644
index 0000000000000000000000000000000000000000..a5eccf816b2f63b7022c72adeeb2fa79b6f6f1c3
--- /dev/null
+++ b/ACSmI/Billing/config/puma.rb
@@ -0,0 +1,34 @@
+# Puma can serve each request in a thread from an internal thread pool.
+# The `threads` method setting takes two numbers: a minimum and maximum.
+# Any libraries that use thread pools should be configured to match
+# the maximum value specified for Puma. Default is set to 5 threads for minimum
+# and maximum; this matches the default thread size of Active Record.
+#
+threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }
+threads threads_count, threads_count
+
+# Specifies the `port` that Puma will listen on to receive requests; default is 3000.
+#
+port        ENV.fetch("PORT") { 3000 }
+
+# Specifies the `environment` that Puma will run in.
+#
+environment ENV.fetch("RAILS_ENV") { "development" }
+
+# Specifies the number of `workers` to boot in clustered mode.
+# Workers are forked webserver processes. If using threads and workers together
+# the concurrency of the application would be max `threads` * `workers`.
+# Workers do not work on JRuby or Windows (both of which do not support
+# processes).
+#
+# workers ENV.fetch("WEB_CONCURRENCY") { 2 }
+
+# Use the `preload_app!` method when specifying a `workers` number.
+# This directive tells Puma to first boot the application and load code
+# before forking the application. This takes advantage of Copy On Write
+# process behavior so workers use less memory.
+#
+# preload_app!
+
+# Allow puma to be restarted by `rails restart` command.
+plugin :tmp_restart
diff --git a/ACSmI/Billing/config/routes.rb b/ACSmI/Billing/config/routes.rb
new file mode 100644
index 0000000000000000000000000000000000000000..60d70aeaa58c6e6b4cb86b609c812df68fa042ae
--- /dev/null
+++ b/ACSmI/Billing/config/routes.rb
@@ -0,0 +1,24 @@
+Rails.application.routes.draw do
+
+  get 'home_page/index'
+  root to: 'home_page#index'
+
+  delete '/sign_out', to: 'user_sessions#destroy', as: :sign_out
+  post '/sign_in', to: 'user_sessions#create', as: :sign_in
+  get '/sign_in', to: 'user_sessions#new'
+
+  resources :invoices, only: [:index, :show] do
+    get 'pdf_report', to: 'invoices#download_pdf'
+  end
+  resources :usage_records, only: [:index, :show]
+
+
+  namespace :api, constraints: { format: :json } do
+    resources :usage_records, only: [:create] do
+      collection do
+        post 'created_contract'
+        post 'cancelled_contract'
+      end
+    end
+  end
+end
diff --git a/ACSmI/Billing/config/spring.rb b/ACSmI/Billing/config/spring.rb
new file mode 100644
index 0000000000000000000000000000000000000000..9fa7863f99d0d2d8bcd28f65d42789fbf8afadd6
--- /dev/null
+++ b/ACSmI/Billing/config/spring.rb
@@ -0,0 +1,6 @@
+%w[
+  .ruby-version
+  .rbenv-vars
+  tmp/restart.txt
+  tmp/caching-dev.txt
+].each { |path| Spring.watch(path) }
diff --git a/ACSmI/Billing/config/storage.yml b/ACSmI/Billing/config/storage.yml
new file mode 100644
index 0000000000000000000000000000000000000000..d32f76e8fbfebd47882dc3b350b092558b62dc08
--- /dev/null
+++ b/ACSmI/Billing/config/storage.yml
@@ -0,0 +1,34 @@
+test:
+  service: Disk
+  root: <%= Rails.root.join("tmp/storage") %>
+
+local:
+  service: Disk
+  root: <%= Rails.root.join("storage") %>
+
+# Use rails credentials:edit to set the AWS secrets (as aws:access_key_id|secret_access_key)
+# amazon:
+#   service: S3
+#   access_key_id: <%= Rails.application.credentials.dig(:aws, :access_key_id) %>
+#   secret_access_key: <%= Rails.application.credentials.dig(:aws, :secret_access_key) %>
+#   region: us-east-1
+#   bucket: your_own_bucket
+
+# Remember not to checkin your GCS keyfile to a repository
+# google:
+#   service: GCS
+#   project: your_project
+#   credentials: <%= Rails.root.join("path/to/gcs.keyfile") %>
+#   bucket: your_own_bucket
+
+# Use rails credentials:edit to set the Azure Storage secret (as azure_storage:storage_access_key)
+# microsoft:
+#   service: AzureStorage
+#   storage_account_name: your_account_name
+#   storage_access_key: <%= Rails.application.credentials.dig(:azure_storage, :storage_access_key) %>
+#   container: your_container_name
+
+# mirror:
+#   service: Mirror
+#   primary: local
+#   mirrors: [ amazon, google, microsoft ]
diff --git a/ACSmI/Billing/db/migrate/20190311161148_create_users.rb b/ACSmI/Billing/db/migrate/20190311161148_create_users.rb
new file mode 100644
index 0000000000000000000000000000000000000000..afb358e3020425eed70fc2700174497b9e476d22
--- /dev/null
+++ b/ACSmI/Billing/db/migrate/20190311161148_create_users.rb
@@ -0,0 +1,21 @@
+class CreateUsers < ActiveRecord::Migration[5.2]
+  def change
+    create_table :users do |t|
+      t.string :email, null: false, unique: true
+      t.string :full_name, null: false
+      t.string :organization
+      t.string :address
+
+      t.string :crypted_password
+      t.string :password_salt
+      t.string :persistence_token
+
+      t.string :encrypted_platform_email
+      t.string :encrypted_platform_email_iv
+      t.string :encrypted_platform_password
+      t.string :encrypted_platform_password_iv
+
+      t.timestamps
+    end
+  end
+end
diff --git a/ACSmI/Billing/db/migrate/20190312130747_create_invoices.rb b/ACSmI/Billing/db/migrate/20190312130747_create_invoices.rb
new file mode 100644
index 0000000000000000000000000000000000000000..8acdcd2071d5d4df0042587ed25002b7796e2ccc
--- /dev/null
+++ b/ACSmI/Billing/db/migrate/20190312130747_create_invoices.rb
@@ -0,0 +1,12 @@
+class CreateInvoices < ActiveRecord::Migration[5.2]
+  def change
+    create_table :invoices do |t|
+      t.integer :user_id, null: false
+      
+      t.date :beginning, null: false
+      t.date :ending, null: false
+
+      t.timestamps
+    end
+  end
+end
diff --git a/ACSmI/Billing/db/migrate/20190312130748_create_contracts.rb b/ACSmI/Billing/db/migrate/20190312130748_create_contracts.rb
new file mode 100644
index 0000000000000000000000000000000000000000..1a1dbb796bfbc8efc45a8546e466fb6bae41b6b9
--- /dev/null
+++ b/ACSmI/Billing/db/migrate/20190312130748_create_contracts.rb
@@ -0,0 +1,10 @@
+class CreateContracts < ActiveRecord::Migration[5.2]
+  def change
+    create_table :contracts do |t|
+      t.integer :user_id, null: false
+      t.string :global_id, null: false, unique: true
+
+      t.timestamps
+    end
+  end
+end
diff --git a/ACSmI/Billing/db/migrate/20190312130749_create_usage_records.rb b/ACSmI/Billing/db/migrate/20190312130749_create_usage_records.rb
new file mode 100644
index 0000000000000000000000000000000000000000..c2be6e6e4a9f25278c36e22afa8f25a31093791c
--- /dev/null
+++ b/ACSmI/Billing/db/migrate/20190312130749_create_usage_records.rb
@@ -0,0 +1,14 @@
+class CreateUsageRecords < ActiveRecord::Migration[5.2]
+  def change
+    create_table :usage_records do |t|
+      t.integer :contract_id, null: false
+      t.integer :invoice_id, null: false
+
+      t.string :usage_type
+
+      t.decimal :cost, precision: 9, scale: 2, default: 0.0
+
+      t.timestamps
+    end
+  end
+end
diff --git a/ACSmI/Billing/db/migrate/20190312135358_create_contracting_resources.rb b/ACSmI/Billing/db/migrate/20190312135358_create_contracting_resources.rb
new file mode 100644
index 0000000000000000000000000000000000000000..b1bd138549d717795bb4ccf215d399e1316923d6
--- /dev/null
+++ b/ACSmI/Billing/db/migrate/20190312135358_create_contracting_resources.rb
@@ -0,0 +1,14 @@
+class CreateContractingResources < ActiveRecord::Migration[5.2]
+  def change
+    create_table :contracting_resources do |t|
+      t.integer :contract_id, null: false
+      t.string :service_id
+      t.string :service_name
+      t.string :resource_id
+      t.string :resource_name
+      t.string :contracting_method
+
+      t.timestamps
+    end
+  end
+end
diff --git a/ACSmI/Billing/db/migrate/20190312135409_create_credential_fields.rb b/ACSmI/Billing/db/migrate/20190312135409_create_credential_fields.rb
new file mode 100644
index 0000000000000000000000000000000000000000..53fff583669073d1a10ec3295d04febf1eb13e44
--- /dev/null
+++ b/ACSmI/Billing/db/migrate/20190312135409_create_credential_fields.rb
@@ -0,0 +1,13 @@
+class CreateCredentialFields < ActiveRecord::Migration[5.2]
+  def change
+    create_table :credential_fields do |t|
+      t.integer :contracting_resource_id, null: false
+      
+      t.string :name
+      t.string :encrypted_value
+      t.string :encrypted_value_iv
+
+      t.timestamps
+    end
+  end
+end
diff --git a/ACSmI/Billing/db/migrate/20190312141212_create_settings.rb b/ACSmI/Billing/db/migrate/20190312141212_create_settings.rb
new file mode 100644
index 0000000000000000000000000000000000000000..83f6d86575b3acbf29b4e225e0ad181e1e419e71
--- /dev/null
+++ b/ACSmI/Billing/db/migrate/20190312141212_create_settings.rb
@@ -0,0 +1,11 @@
+class CreateSettings < ActiveRecord::Migration[5.2]
+  def change
+    create_table :settings do |t|
+      t.string :name
+      t.string :encrypted_value
+      t.string :encrypted_value_iv
+
+      t.timestamps
+    end
+  end
+end
diff --git a/ACSmI/Billing/db/migrate/20190313100629_create_usage_description_fields.rb b/ACSmI/Billing/db/migrate/20190313100629_create_usage_description_fields.rb
new file mode 100644
index 0000000000000000000000000000000000000000..025abab85047ee88f02982b97c996d415883d2d9
--- /dev/null
+++ b/ACSmI/Billing/db/migrate/20190313100629_create_usage_description_fields.rb
@@ -0,0 +1,8 @@
+class CreateUsageDescriptionFields < ActiveRecord::Migration[5.2]
+  def change
+    create_table :usage_description_fields do |t|
+      t.string :name, null: false
+      t.string :value, null: false
+    end
+  end
+end
diff --git a/ACSmI/Billing/db/migrate/20190313100941_create_delayed_jobs.rb b/ACSmI/Billing/db/migrate/20190313100941_create_delayed_jobs.rb
new file mode 100644
index 0000000000000000000000000000000000000000..d10f2400e75fc7846e083c7d685c0fd6b4dc55d1
--- /dev/null
+++ b/ACSmI/Billing/db/migrate/20190313100941_create_delayed_jobs.rb
@@ -0,0 +1,22 @@
+class CreateDelayedJobs < ActiveRecord::Migration[5.2]
+  def self.up
+    create_table :delayed_jobs, force: true do |table|
+      table.integer :priority, default: 0, null: false # Allows some jobs to jump to the front of the queue
+      table.integer :attempts, default: 0, null: false # Provides for retries, but still fail eventually.
+      table.text :handler,                 null: false # YAML-encoded string of the object that will do work
+      table.text :last_error                           # reason for last failure (See Note below)
+      table.datetime :run_at                           # When to run. Could be Time.zone.now for immediately, or sometime in the future.
+      table.datetime :locked_at                        # Set when a client is working on this object
+      table.datetime :failed_at                        # Set when all retries have failed (actually, by default, the record is deleted instead)
+      table.string :locked_by                          # Who is working on this object (if locked)
+      table.string :queue                              # The name of the queue this job is in
+      table.timestamps null: true
+    end
+
+    add_index :delayed_jobs, [:priority, :run_at], name: "delayed_jobs_priority"
+  end
+
+  def self.down
+    drop_table :delayed_jobs
+  end
+end
diff --git a/ACSmI/Billing/db/migrate/20190313122258_create_user_sessions.rb b/ACSmI/Billing/db/migrate/20190313122258_create_user_sessions.rb
new file mode 100644
index 0000000000000000000000000000000000000000..15257c7fc2043d6cce4bc09cbe3b3b14eec9f40d
--- /dev/null
+++ b/ACSmI/Billing/db/migrate/20190313122258_create_user_sessions.rb
@@ -0,0 +1,8 @@
+class CreateUserSessions < ActiveRecord::Migration[5.2]
+  def change
+    create_table :user_sessions do |t|
+
+      t.timestamps
+    end
+  end
+end
diff --git a/ACSmI/Billing/db/migrate/20190317072547_add_admin_to_users.rb b/ACSmI/Billing/db/migrate/20190317072547_add_admin_to_users.rb
new file mode 100644
index 0000000000000000000000000000000000000000..b26f44f1234c8d9a48f764219db64afde223dd13
--- /dev/null
+++ b/ACSmI/Billing/db/migrate/20190317072547_add_admin_to_users.rb
@@ -0,0 +1,5 @@
+class AddAdminToUsers < ActiveRecord::Migration[5.2]
+  def change
+    add_column :users, :admin, :boolean , default: false
+  end
+end
diff --git a/ACSmI/Billing/db/migrate/20190321113544_change_column_name_in_settings.rb b/ACSmI/Billing/db/migrate/20190321113544_change_column_name_in_settings.rb
new file mode 100644
index 0000000000000000000000000000000000000000..d983bdb0fd54fd608b483bcea79949877555577e
--- /dev/null
+++ b/ACSmI/Billing/db/migrate/20190321113544_change_column_name_in_settings.rb
@@ -0,0 +1,5 @@
+class ChangeColumnNameInSettings < ActiveRecord::Migration[5.2]
+  def change
+    rename_column :settings, :name, :key
+  end
+end
diff --git a/ACSmI/Billing/db/migrate/20190321131840_add_usage_record_id_to_usage_description_field.rb b/ACSmI/Billing/db/migrate/20190321131840_add_usage_record_id_to_usage_description_field.rb
new file mode 100644
index 0000000000000000000000000000000000000000..b5c0407fa1e3b6b0786771c2149f54714507c132
--- /dev/null
+++ b/ACSmI/Billing/db/migrate/20190321131840_add_usage_record_id_to_usage_description_field.rb
@@ -0,0 +1,6 @@
+class AddUsageRecordIdToUsageDescriptionField < ActiveRecord::Migration[5.2]
+  def change
+    add_column :usage_description_fields, :usage_record_id, :integer
+    change_column_null :usage_description_fields, :usage_record_id, false
+  end
+end
diff --git a/ACSmI/Billing/db/migrate/20190326164540_add_index_to_usage_records.rb b/ACSmI/Billing/db/migrate/20190326164540_add_index_to_usage_records.rb
new file mode 100644
index 0000000000000000000000000000000000000000..cab7f32140eb4cd03d379845b5e0fdab05f8292f
--- /dev/null
+++ b/ACSmI/Billing/db/migrate/20190326164540_add_index_to_usage_records.rb
@@ -0,0 +1,6 @@
+class AddIndexToUsageRecords < ActiveRecord::Migration[5.2]
+  def change
+    add_column :usage_records, :external_id, :string
+    add_index :usage_records, :external_id
+  end
+end
diff --git a/ACSmI/Billing/db/migrate/20190328101309_add_constraint_to_usage_description_field.rb b/ACSmI/Billing/db/migrate/20190328101309_add_constraint_to_usage_description_field.rb
new file mode 100644
index 0000000000000000000000000000000000000000..5c7befe9efd907213733281a8996e3cdb1f571e4
--- /dev/null
+++ b/ACSmI/Billing/db/migrate/20190328101309_add_constraint_to_usage_description_field.rb
@@ -0,0 +1,5 @@
+class AddConstraintToUsageDescriptionField < ActiveRecord::Migration[5.2]
+  def change
+    add_index :usage_description_fields, [:name, :usage_record_id], unique: true
+  end
+end
diff --git a/ACSmI/Billing/db/migrate/20190403155312_add_platform_id_to_users.rb b/ACSmI/Billing/db/migrate/20190403155312_add_platform_id_to_users.rb
new file mode 100644
index 0000000000000000000000000000000000000000..03e3f062a2edd64bdabc75c4a551a9ccfd52d35f
--- /dev/null
+++ b/ACSmI/Billing/db/migrate/20190403155312_add_platform_id_to_users.rb
@@ -0,0 +1,5 @@
+class AddPlatformIdToUsers < ActiveRecord::Migration[5.2]
+  def change
+    add_column :users, :platform_id, :string, unique: true
+  end
+end
diff --git a/ACSmI/Billing/db/schema.rb b/ACSmI/Billing/db/schema.rb
new file mode 100644
index 0000000000000000000000000000000000000000..1ce33adb0eecc7642ffda331d7dd69b07e606f78
--- /dev/null
+++ b/ACSmI/Billing/db/schema.rb
@@ -0,0 +1,114 @@
+# This file is auto-generated from the current state of the database. Instead
+# of editing this file, please use the migrations feature of Active Record to
+# incrementally modify your database, and then regenerate this schema definition.
+#
+# Note that this schema.rb definition is the authoritative source for your
+# database schema. If you need to create the application database on another
+# system, you should be using db:schema:load, not running all the migrations
+# from scratch. The latter is a flawed and unsustainable approach (the more migrations
+# you'll amass, the slower it'll run and the greater likelihood for issues).
+#
+# It's strongly recommended that you check this file into your version control system.
+
+ActiveRecord::Schema.define(version: 2019_04_03_155312) do
+
+  create_table "contracting_resources", force: :cascade do |t|
+    t.integer "contract_id", null: false
+    t.string "service_id"
+    t.string "service_name"
+    t.string "resource_id"
+    t.string "resource_name"
+    t.string "contracting_method"
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+  end
+
+  create_table "contracts", force: :cascade do |t|
+    t.integer "user_id", null: false
+    t.string "global_id", null: false
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+  end
+
+  create_table "credential_fields", force: :cascade do |t|
+    t.integer "contracting_resource_id", null: false
+    t.string "name"
+    t.string "encrypted_value"
+    t.string "encrypted_value_iv"
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+  end
+
+  create_table "delayed_jobs", force: :cascade do |t|
+    t.integer "priority", default: 0, null: false
+    t.integer "attempts", default: 0, null: false
+    t.text "handler", null: false
+    t.text "last_error"
+    t.datetime "run_at"
+    t.datetime "locked_at"
+    t.datetime "failed_at"
+    t.string "locked_by"
+    t.string "queue"
+    t.datetime "created_at"
+    t.datetime "updated_at"
+    t.index ["priority", "run_at"], name: "delayed_jobs_priority"
+  end
+
+  create_table "invoices", force: :cascade do |t|
+    t.integer "user_id", null: false
+    t.date "beginning", null: false
+    t.date "ending", null: false
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+  end
+
+  create_table "settings", force: :cascade do |t|
+    t.string "key"
+    t.string "encrypted_value"
+    t.string "encrypted_value_iv"
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+  end
+
+  create_table "usage_description_fields", force: :cascade do |t|
+    t.string "name", null: false
+    t.string "value", null: false
+    t.integer "usage_record_id", null: false
+    t.index ["name", "usage_record_id"], name: "index_usage_description_fields_on_name_and_usage_record_id", unique: true
+  end
+
+  create_table "usage_records", force: :cascade do |t|
+    t.integer "contract_id", null: false
+    t.integer "invoice_id", null: false
+    t.string "usage_type"
+    t.decimal "cost", precision: 9, scale: 2, default: "0.0"
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+    t.string "external_id"
+    t.index ["external_id"], name: "index_usage_records_on_external_id"
+  end
+
+  create_table "user_sessions", force: :cascade do |t|
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+  end
+
+  create_table "users", force: :cascade do |t|
+    t.string "email", null: false
+    t.string "full_name", null: false
+    t.string "organization"
+    t.string "address"
+    t.string "crypted_password"
+    t.string "password_salt"
+    t.string "persistence_token"
+    t.string "encrypted_platform_email"
+    t.string "encrypted_platform_email_iv"
+    t.string "encrypted_platform_password"
+    t.string "encrypted_platform_password_iv"
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+    t.boolean "admin", default: false
+    t.string "platform_id"
+  end
+
+end
diff --git a/ACSmI/Billing/db/seeds.rb b/ACSmI/Billing/db/seeds.rb
new file mode 100644
index 0000000000000000000000000000000000000000..acedf197cbde657ffcb29b61dec4aa3fa26c4e19
--- /dev/null
+++ b/ACSmI/Billing/db/seeds.rb
@@ -0,0 +1,53 @@
+users = User.create!([{
+                          email: ACSMI_EMAIL,
+                          password: INITIAL_PASSWORD,
+                          full_name: ADMIN_NAME,
+                          organization: INITIAL_ORGANIZATION_NAME,
+                          address: 'Address',
+                          admin: true
+                      }])
+
+Setting.create!(key: 'admin_email', value: ACSMI_EMAIL)
+Setting.create!(key: 'admin_password', value: INITIAL_PASSWORD)
+Setting.create(key: 'platform_url', value: 'https://decide-prototype.cloudbroker.com')
+
+Setting.create!(key: 'billing_component_url', value: 'http://localhost:3000')
+
+Setting.create(key: 'smtp_address', value: 'smtp.gmail.com')
+Setting.create(key: 'smtp_domain', value: 'gmail.com')
+Setting.create(key: 'smtp_email', value: '')
+Setting.create(key: 'smtp_password', value: '')
+Setting.create(key: 'smtp_auth', value: 'login')
+Setting.create!(key: 'platform name', value: 'DECIDE Platform')
+Setting.create!(key: 'invoice_image', value: 'decide-logo.png')
+Setting.create!(key: 'local file directory', value: 'pdf_reports')
+
+# invoice settings section
+Setting.create!(key: 'manager organization name', value: "LLC 'Pilgrimage'")
+Setting.create!(key: 'manager organization address line one', value: '20 Piazza,')
+Setting.create!(key: 'manager organization address line two', value: 'Monteleone di Spoleto, 00191')
+Setting.create!(key: 'manager organization city', value: 'Roma RM')
+Setting.create!(key: 'manager organization country', value: 'Italy')
+Setting.create!(key: 'manager organization phone', value: '+48391267322')
+Setting.create!(key: 'manager organization email', value: 'pilgrimage.com')
+Setting.create!(key: 'manager organization website', value: 'manager organization website')
+Setting.create!(key: 'manager organization iban', value: 'manager organization iban')
+
+Setting.create!(key: 'invoice vat number', value: 'PL295691295')
+Setting.create!(key: 'invoice registration number', value: 'Z1020120')
+Setting.create!(key: 'invoice ceo name', value: 'Mr.Mariusz Sokolowski')
+
+Setting.create!(key: 'invoice organization name', value: "LLC 'Dolphins Group'")
+Setting.create!(key: 'invoice organization city', value: 'Paris')
+Setting.create!(key: 'invoice organization country', value: 'France')
+Setting.create!(key: 'invoice organization responsible', value: 'Mrs. Johanna Brown, financial manager')
+Setting.create!(key: 'invoice organization address line one', value: '49 Rue des Plantes,')
+Setting.create!(key: 'invoice organization address line two', value: '0153')
+Setting.create!(key: 'invoice organization postal code', value: '75014')
+Setting.create!(key: 'invoice organization customer number', value: 'V7123')
+Setting.create!(key: 'invoice organization vat', value: 0.0)
+Setting.create!(key: 'invoice bank name', value: 'invoice bank name')
+Setting.create!(key: 'invoice bank code', value: 'invoice bank code')
+Setting.create!(key: 'invoice bank code type', value: 'invoice bank code type')
+Setting.create!(key: 'invoice organization iban', value: ' FE27 4201 0000 0300')
+Setting.create!(key: 'invoice organization pay pal email', value: 'invoice organization pay pal email')
diff --git a/ACSmI/Billing/lib/api_clients/acsmi_contracting.rb b/ACSmI/Billing/lib/api_clients/acsmi_contracting.rb
new file mode 100644
index 0000000000000000000000000000000000000000..f99643bffb1cb182cd891ed3d44d87461cacf0fc
--- /dev/null
+++ b/ACSmI/Billing/lib/api_clients/acsmi_contracting.rb
@@ -0,0 +1,5 @@
+module APIClients
+  class ACSmiContracting
+
+  end
+end
\ No newline at end of file
diff --git a/ACSmI/Billing/lib/api_clients/platform.rb b/ACSmI/Billing/lib/api_clients/platform.rb
new file mode 100644
index 0000000000000000000000000000000000000000..ee7ac4cde9846049fbae8bf415c9ea92e57193f7
--- /dev/null
+++ b/ACSmI/Billing/lib/api_clients/platform.rb
@@ -0,0 +1,70 @@
+require 'rest-client'
+
+module APIClients
+  class Platform
+    def initialize(email, password)
+      @email = email
+      @password = password
+    end
+
+    def get_billing_items
+      fetch_all_items('billing_items')
+    end
+
+    def get_uses_instances
+      fetch_all_items('instances')
+    end
+
+    def get_instance_types
+      fetch_all_items('instance_types')
+    end
+
+    private
+
+    attr_reader :email, :password
+
+    def user_platform
+      RestClient::Resource.new(
+        Setting.value('platform_url'),
+        user: email,
+        password: password,
+        open_timeout: 60,
+        verify_ssl: true
+      )
+    end
+
+    def to_pretty_hash(old_hash)
+      pretty_hash = {}
+      plural_key = old_hash.keys[0]
+
+      if old_hash[plural_key].is_a?(Hash)
+        singular_key = old_hash[plural_key].keys[0]
+        old_hash[plural_key][singular_key].each do |el|
+          pretty_hash[el['id']] = el
+        end
+      else
+        old_hash[plural_key].each do |el|
+          pretty_hash[el['id']] = el
+        end
+      end
+      pretty_hash
+    end
+
+    def fetch_all_items(url)
+      resource = user_platform
+
+      page_counter = 1
+      pretty_hash = {}
+
+      while pretty_hash.empty? || (pretty_hash.keys.length % 500).equal?(0)
+        hash = Hash.from_xml(resource["#{url}.xml?page=#{page_counter}&per_page=500"].get)
+        return 'authentication error' if hash.key?('errors')
+        return 'collection is empty' if hash.key?('nil_classes') || hash.empty?
+
+        pretty_hash = pretty_hash.merge(to_pretty_hash(hash))
+        page_counter += 1
+      end
+      pretty_hash
+    end
+  end
+end
diff --git a/ACSmI/Billing/lib/assets/.keep b/ACSmI/Billing/lib/assets/.keep
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/ACSmI/Billing/lib/exceptions.rb b/ACSmI/Billing/lib/exceptions.rb
new file mode 100644
index 0000000000000000000000000000000000000000..b3db51683d81ff1ce3746e14dd862905a84b40a3
--- /dev/null
+++ b/ACSmI/Billing/lib/exceptions.rb
@@ -0,0 +1,11 @@
+module Exceptions
+  class UsageReporterException < StandardError
+    attr_reader :reason
+    def initialize(reason)
+      @reason = reason
+    end
+  end
+
+  class SettingNotFound < StandardError
+  end
+end
diff --git a/ACSmI/Billing/lib/reports/invoices_pdf_generator.rb b/ACSmI/Billing/lib/reports/invoices_pdf_generator.rb
new file mode 100644
index 0000000000000000000000000000000000000000..eb9b0bd5280a3e7c73f253ee86c282702d459858
--- /dev/null
+++ b/ACSmI/Billing/lib/reports/invoices_pdf_generator.rb
@@ -0,0 +1,88 @@
+class InvoicesPdfGenerator < Prawn::Document
+
+  def generate_pdf(invoice)
+    image_png = "public/decide-logo.png"
+    directory_name = "#{Rails.root}/#{Setting.value('local file directory')}/user #{invoice.user.id}"
+    FileUtils.mkdir_p(directory_name) unless FileTest::directory?(directory_name)
+    Prawn::Document.generate("#{directory_name}/invoice #{invoice.id}.pdf", :page_size => "A4", :left_margin => 50, :right_margin => 50) do
+      font "Helvetica"
+      self.font_size = 12
+      image image_png, :scale => 0.08, :at => [0, cursor]
+      manager = "#{Setting.value('manager organization name')}\n"
+      manager << "CEO: #{Setting.value('invoice ceo name')}\n"
+      manager << "#{Setting.value('manager organization address line one')}\n"
+      manager << "#{Setting.value('manager organization address line two')}\n"
+      manager << "#{Setting.value('manager organization city')}\n #{Setting.value('manager organization country')}\n"
+      manager << "Phone: #{Setting.value('manager organization phone')}\nEmail: #{Setting.value('manager organization email')}"
+      manager << "\nWeb: #{Setting.value('manager organization website')}"
+      manager << "\nCompany registered: #{Setting.value('invoice registration number')}"
+      manager << "\nVAT number: #{Setting.value('invoice vat number')}"
+      text manager, :align => :right
+
+      org = "#{Setting.value('invoice organization name')}\n"
+      org = org + "C/o Responsible: #{Setting.value('invoice organization responsible')}\n"
+      org = org + "#{Setting.value('invoice organization address line one')}\n"
+      org = org + "#{Setting.value('invoice organization address line two')}\n"
+      org = org + "#{Setting.value('invoice organization postal code')} #{Setting.value('invoice organization city')}\n
+                                                                              #{Setting.value('invoice organization country')}\n\n\n"
+      org = org + "Customer number: #{Setting.value('invoice organization customer number')}"
+      pad(12) { text org }
+      date = Time.now
+      pad(12) { text "#{Setting.value('manager organization city')}, #{date.strftime("%B %d, %Y")}", :align => :right }
+      pad(12) { text "INVOICE", :size => 18, :align => :center }
+      text "Beginning date: #{invoice.beginning.strftime("%d.%m.%Y")}"
+      text "Ending date: #{invoice.ending.strftime("%d.%m.%Y")}"
+
+      data = []
+      data[0] = ["Description", "Fee sum [EUR]", "VAT sum [EUR]", "Total sum [EUR]"]
+      pdf_fee_sum = invoice.usage_records.sum(:cost)
+      pdf_vat_sum = Setting.value('invoice organization vat').to_f
+      pdf_total_sum = pdf_fee_sum + pdf_vat_sum
+      if pdf_total_sum >= 0
+        data[1] = ["#{Setting.value('platform name')} profits", pdf_fee_sum, pdf_vat_sum, pdf_total_sum]
+      else
+        pdf_total_sum = -1 * pdf_total_sum
+        data[1] = ["#{Setting.value('platform name')} usage", pdf_fee_sum, pdf_vat_sum, pdf_total_sum]
+      end
+      table(data) do
+        row(0).style(:background_color => 'dddddd', :align => :center, :font_style => :bold)
+      end
+      pad(12) { text "VAT: #{Setting.value('invoice organization vat').to_f * 100}%" }
+
+      if pdf_total_sum >= 0
+        string = "The total sum above has been or will be transferred to your organization's "
+        if "#{Setting.value('invoice organization iban')}"
+          string = string + "bank account IBAN #{Setting.value('invoice organization iban')}."
+        elsif "#{Setting.value('invoice organization pay pal email')}"
+          string = string + "PayPal account #{Setting.value('invoice organization pay pal email')}."
+        else
+          string = string + "platform account."
+        end
+        pad(12) { text string }
+      else
+        bank_acc_specified = Setting.value('manager organization iban').present? && Setting.value('invoice bank name').present? && Setting.value('invoice bank code').present?
+        string = 'Please pay the total sum above within 30 days onto our bank account'
+        string << " listed below" if bank_acc_specified
+        string << "."
+        pad(12) { text string }
+
+        if bank_acc_specified
+          text "Bank: #{Setting.value('invoice bank name')}"
+          text "#{Setting.value('invoice bank code type')} code: #{Setting.value('invoice bank code')}"
+          beneficiary = "#{Setting.value('manager organization name')}, #{Setting.value('manager organization address line one')}, "
+          beneficiary << "#{Setting.value('manager organization address line two')}, "
+          beneficiary << "#{Setting.value('manager organization city')}, #{Setting.value('manager organization country')}"
+          text "Beneficiary: #{beneficiary}"
+          text "Beneficiary bank account IBAN: #{Setting.value('manager organization iban')}"
+        else
+          text 'Please contact us for our bank account details.'
+        end
+      end
+      pad(24) { text "Thank you very much for using the #{Setting.value('platform name')}!" }
+      text "Kind regards,"
+      pad_top(24) { text "The #{Setting.value('platform name')} Team" }
+    end
+    file_path = "#{directory_name}/invoice #{invoice.id}.pdf"
+  end
+
+end
\ No newline at end of file
diff --git a/ACSmI/Billing/lib/tasks/.keep b/ACSmI/Billing/lib/tasks/.keep
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/ACSmI/Billing/lib/tasks/seeds_for_testing.rake b/ACSmI/Billing/lib/tasks/seeds_for_testing.rake
new file mode 100644
index 0000000000000000000000000000000000000000..ef6366812f36fe29835b9b24943154ed27b1edc9
--- /dev/null
+++ b/ACSmI/Billing/lib/tasks/seeds_for_testing.rake
@@ -0,0 +1,31 @@
+namespace :seeds_for_testing do
+  desc "generating few records in db for testing feature - generating pdf"
+  task task1: :environment do
+    user = User.find_by_email("testing@scaletools.qu")
+    user = User.new(
+                        email: "testing@scaletools.qu",
+                        password: "1111",
+                        full_name: "tester",
+                        organization: "organization",
+                        address: "address"
+                       ) unless user.present?
+    user.save
+    contract = Contract.new(
+        user_id: user.id,
+        global_id: "1"
+    )
+    contract.save
+    invoice = Invoice.new(
+        user_id: user.id,
+        beginning: Date.today.beginning_of_month.last_month,
+        ending: Date.today.end_of_month.last_month
+    )
+    invoice.save
+    UsageRecord.create(invoice_id: invoice.id,
+                       contract_id: contract.id,
+                       cost: 10,
+                       usage_type: 'testing',
+                       external_id: nil)
+  end
+
+end
diff --git a/ACSmI/Billing/log/.keep b/ACSmI/Billing/log/.keep
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/ACSmI/Billing/package.json b/ACSmI/Billing/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..63c9c9cfba4c8fea6367f82481fd06abd9969893
--- /dev/null
+++ b/ACSmI/Billing/package.json
@@ -0,0 +1,5 @@
+{
+  "name": "acsmi_billing",
+  "private": true,
+  "dependencies": {}
+}
diff --git a/ACSmI/Billing/public/404.html b/ACSmI/Billing/public/404.html
new file mode 100644
index 0000000000000000000000000000000000000000..2be3af26fc5a3d019690b50e0849651dde258794
--- /dev/null
+++ b/ACSmI/Billing/public/404.html
@@ -0,0 +1,67 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <title>The page you were looking for doesn't exist (404)</title>
+  <meta name="viewport" content="width=device-width,initial-scale=1">
+  <style>
+  .rails-default-error-page {
+    background-color: #EFEFEF;
+    color: #2E2F30;
+    text-align: center;
+    font-family: arial, sans-serif;
+    margin: 0;
+  }
+
+  .rails-default-error-page div.dialog {
+    width: 95%;
+    max-width: 33em;
+    margin: 4em auto 0;
+  }
+
+  .rails-default-error-page div.dialog > div {
+    border: 1px solid #CCC;
+    border-right-color: #999;
+    border-left-color: #999;
+    border-bottom-color: #BBB;
+    border-top: #B00100 solid 4px;
+    border-top-left-radius: 9px;
+    border-top-right-radius: 9px;
+    background-color: white;
+    padding: 7px 12% 0;
+    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
+  }
+
+  .rails-default-error-page h1 {
+    font-size: 100%;
+    color: #730E15;
+    line-height: 1.5em;
+  }
+
+  .rails-default-error-page div.dialog > p {
+    margin: 0 0 1em;
+    padding: 1em;
+    background-color: #F7F7F7;
+    border: 1px solid #CCC;
+    border-right-color: #999;
+    border-left-color: #999;
+    border-bottom-color: #999;
+    border-bottom-left-radius: 4px;
+    border-bottom-right-radius: 4px;
+    border-top-color: #DADADA;
+    color: #666;
+    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
+  }
+  </style>
+</head>
+
+<body class="rails-default-error-page">
+  <!-- This file lives in public/404.html -->
+  <div class="dialog">
+    <div>
+      <h1>The page you were looking for doesn't exist.</h1>
+      <p>You may have mistyped the address or the page may have moved.</p>
+    </div>
+    <p>If you are the application owner check the logs for more information.</p>
+  </div>
+</body>
+</html>
diff --git a/ACSmI/Billing/public/422.html b/ACSmI/Billing/public/422.html
new file mode 100644
index 0000000000000000000000000000000000000000..c08eac0d1df79f30154726ea242c08e0ee851c4b
--- /dev/null
+++ b/ACSmI/Billing/public/422.html
@@ -0,0 +1,67 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <title>The change you wanted was rejected (422)</title>
+  <meta name="viewport" content="width=device-width,initial-scale=1">
+  <style>
+  .rails-default-error-page {
+    background-color: #EFEFEF;
+    color: #2E2F30;
+    text-align: center;
+    font-family: arial, sans-serif;
+    margin: 0;
+  }
+
+  .rails-default-error-page div.dialog {
+    width: 95%;
+    max-width: 33em;
+    margin: 4em auto 0;
+  }
+
+  .rails-default-error-page div.dialog > div {
+    border: 1px solid #CCC;
+    border-right-color: #999;
+    border-left-color: #999;
+    border-bottom-color: #BBB;
+    border-top: #B00100 solid 4px;
+    border-top-left-radius: 9px;
+    border-top-right-radius: 9px;
+    background-color: white;
+    padding: 7px 12% 0;
+    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
+  }
+
+  .rails-default-error-page h1 {
+    font-size: 100%;
+    color: #730E15;
+    line-height: 1.5em;
+  }
+
+  .rails-default-error-page div.dialog > p {
+    margin: 0 0 1em;
+    padding: 1em;
+    background-color: #F7F7F7;
+    border: 1px solid #CCC;
+    border-right-color: #999;
+    border-left-color: #999;
+    border-bottom-color: #999;
+    border-bottom-left-radius: 4px;
+    border-bottom-right-radius: 4px;
+    border-top-color: #DADADA;
+    color: #666;
+    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
+  }
+  </style>
+</head>
+
+<body class="rails-default-error-page">
+  <!-- This file lives in public/422.html -->
+  <div class="dialog">
+    <div>
+      <h1>The change you wanted was rejected.</h1>
+      <p>Maybe you tried to change something you didn't have access to.</p>
+    </div>
+    <p>If you are the application owner check the logs for more information.</p>
+  </div>
+</body>
+</html>
diff --git a/ACSmI/Billing/public/500.html b/ACSmI/Billing/public/500.html
new file mode 100644
index 0000000000000000000000000000000000000000..78a030af22ea129d02a7745790b79fbe81a9e3ab
--- /dev/null
+++ b/ACSmI/Billing/public/500.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <title>We're sorry, but something went wrong (500)</title>
+  <meta name="viewport" content="width=device-width,initial-scale=1">
+  <style>
+  .rails-default-error-page {
+    background-color: #EFEFEF;
+    color: #2E2F30;
+    text-align: center;
+    font-family: arial, sans-serif;
+    margin: 0;
+  }
+
+  .rails-default-error-page div.dialog {
+    width: 95%;
+    max-width: 33em;
+    margin: 4em auto 0;
+  }
+
+  .rails-default-error-page div.dialog > div {
+    border: 1px solid #CCC;
+    border-right-color: #999;
+    border-left-color: #999;
+    border-bottom-color: #BBB;
+    border-top: #B00100 solid 4px;
+    border-top-left-radius: 9px;
+    border-top-right-radius: 9px;
+    background-color: white;
+    padding: 7px 12% 0;
+    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
+  }
+
+  .rails-default-error-page h1 {
+    font-size: 100%;
+    color: #730E15;
+    line-height: 1.5em;
+  }
+
+  .rails-default-error-page div.dialog > p {
+    margin: 0 0 1em;
+    padding: 1em;
+    background-color: #F7F7F7;
+    border: 1px solid #CCC;
+    border-right-color: #999;
+    border-left-color: #999;
+    border-bottom-color: #999;
+    border-bottom-left-radius: 4px;
+    border-bottom-right-radius: 4px;
+    border-top-color: #DADADA;
+    color: #666;
+    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
+  }
+  </style>
+</head>
+
+<body class="rails-default-error-page">
+  <!-- This file lives in public/500.html -->
+  <div class="dialog">
+    <div>
+      <h1>We're sorry, but something went wrong.</h1>
+    </div>
+    <p>If you are the application owner check the logs for more information.</p>
+  </div>
+</body>
+</html>
diff --git a/ACSmI/Billing/public/apple-touch-icon-precomposed.png b/ACSmI/Billing/public/apple-touch-icon-precomposed.png
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/ACSmI/Billing/public/apple-touch-icon.png b/ACSmI/Billing/public/apple-touch-icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/ACSmI/Billing/public/decide-logo.png b/ACSmI/Billing/public/decide-logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..233071da11756e8fcd14f30ff83f702192381b24
Binary files /dev/null and b/ACSmI/Billing/public/decide-logo.png differ
diff --git a/ACSmI/Billing/public/favicon.ico b/ACSmI/Billing/public/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/ACSmI/Billing/public/flag_eu.jpg b/ACSmI/Billing/public/flag_eu.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..673be92ae2f0647fd1748e12a36bf073aa145d64
Binary files /dev/null and b/ACSmI/Billing/public/flag_eu.jpg differ
diff --git a/ACSmI/Billing/public/robots.txt b/ACSmI/Billing/public/robots.txt
new file mode 100644
index 0000000000000000000000000000000000000000..37b576a4a015ac63021a1121d55a96235ec03525
--- /dev/null
+++ b/ACSmI/Billing/public/robots.txt
@@ -0,0 +1 @@
+# See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file
diff --git a/ACSmI/Billing/spec/lib/platform_spec.rb b/ACSmI/Billing/spec/lib/platform_spec.rb
new file mode 100644
index 0000000000000000000000000000000000000000..505ee1c6057d2f785eb8e3b5bb25439ceb24a12a
--- /dev/null
+++ b/ACSmI/Billing/spec/lib/platform_spec.rb
@@ -0,0 +1,52 @@
+require 'rails_helper'
+
+RSpec.describe APIClients::Platform do
+  let(:user) { User.new(email: '',
+                        platform_email: '',
+                        platform_password: '')
+  }
+
+  let(:valid_email) { user.platform_email }
+  let(:valid_password) { user.platform_password }
+
+  subject(:api) { APIClients::Platform.new(valid_email, valid_password) }
+
+  context 'call methods with correct credentials' do
+
+    it '#get_billign_items' do
+      call = api.get_billing_items
+      expect { call }.not_to raise_error
+      expect(call.is_a?(Hash)).to be_truthy
+    end
+
+    it '#uses_instances' do
+      call = api.get_uses_instances
+      expect { call }.not_to raise_error
+      expect(call.is_a?(Hash)).to be_truthy
+    end
+
+    it '#instance_types' do
+      call = api.get_instance_types
+      expect { call }.not_to raise_error
+      expect(call.is_a?(Hash)).to be_truthy
+    end
+  end
+
+  context 'call methods with incorrect credentials' do
+    let(:invalid_email) { 'invalid' }
+    let(:invalid_password) { 'invalid' }
+    subject(:api) { APIClients::Platform.new(invalid_email, invalid_password) }
+
+    it '#get_billign_items' do
+      expect { api.get_billing_items }.to raise_error(NoMethodError)
+    end
+
+    it '#uses_instances' do
+      expect { api.get_uses_instances }.to raise_error(NoMethodError)
+    end
+
+    it '#instance_types' do
+      expect { api.get_instance_types }.to raise_error(NoMethodError)
+    end
+  end
+end
diff --git a/ACSmI/Billing/spec/rails_helper.rb b/ACSmI/Billing/spec/rails_helper.rb
new file mode 100644
index 0000000000000000000000000000000000000000..6a500b978d157f42b03730c784f10bca72425827
--- /dev/null
+++ b/ACSmI/Billing/spec/rails_helper.rb
@@ -0,0 +1,62 @@
+# This file is copied to spec/ when you run 'rails generate rspec:install'
+require 'spec_helper'
+ENV['RAILS_ENV'] ||= 'test'
+require File.expand_path('../../config/environment', __FILE__)
+# Prevent database truncation if the environment is production
+abort("The Rails environment is running in production mode!") if Rails.env.production?
+require 'rspec/rails'
+# Add additional requires below this line. Rails is not loaded until this point!
+
+# Requires supporting ruby files with custom matchers and macros, etc, in
+# spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are
+# run as spec files by default. This means that files in spec/support that end
+# in _spec.rb will both be required and run as specs, causing the specs to be
+# run twice. It is recommended that you do not name files matching this glob to
+# end with _spec.rb. You can configure this pattern with the --pattern
+# option on the command line or in ~/.rspec, .rspec or `.rspec-local`.
+#
+# The following line is provided for convenience purposes. It has the downside
+# of increasing the boot-up time by auto-requiring all files in the support
+# directory. Alternatively, in the individual `*_spec.rb` files, manually
+# require only the support files necessary.
+#
+# Dir[Rails.root.join('spec', 'support', '**', '*.rb')].each { |f| require f }
+
+# Checks for pending migrations and applies them before tests are run.
+# If you are not using ActiveRecord, you can remove these lines.
+begin
+  ActiveRecord::Migration.maintain_test_schema!
+rescue ActiveRecord::PendingMigrationError => e
+  puts e.to_s.strip
+  exit 1
+end
+
+RSpec.configure do |config|
+  # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
+  config.fixture_path = "#{::Rails.root}/spec/fixtures"
+
+  # If you're not using ActiveRecord, or you'd prefer not to run each of your
+  # examples within a transaction, remove the following line or assign false
+  # instead of true.
+  config.use_transactional_fixtures = true
+
+  # RSpec Rails can automatically mix in different behaviours to your tests
+  # based on their file location, for example enabling you to call `get` and
+  # `post` in specs under `spec/controllers`.
+  #
+  # You can disable this behaviour by removing the line below, and instead
+  # explicitly tag your specs with their type, e.g.:
+  #
+  #     RSpec.describe UsersController, :type => :controller do
+  #       # ...
+  #     end
+  #
+  # The different available types are documented in the features, such as in
+  # https://relishapp.com/rspec/rspec-rails/docs
+  config.infer_spec_type_from_file_location!
+
+  # Filter lines from Rails gems in backtraces.
+  config.filter_rails_from_backtrace!
+  # arbitrary gems may also be filtered via:
+  # config.filter_gems_from_backtrace("gem name")
+end
diff --git a/ACSmI/Billing/spec/spec_helper.rb b/ACSmI/Billing/spec/spec_helper.rb
new file mode 100644
index 0000000000000000000000000000000000000000..ce33d66df6929946abe9cfb7d5824010ae09fb35
--- /dev/null
+++ b/ACSmI/Billing/spec/spec_helper.rb
@@ -0,0 +1,96 @@
+# This file was generated by the `rails generate rspec:install` command. Conventionally, all
+# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
+# The generated `.rspec` file contains `--require spec_helper` which will cause
+# this file to always be loaded, without a need to explicitly require it in any
+# files.
+#
+# Given that it is always loaded, you are encouraged to keep this file as
+# light-weight as possible. Requiring heavyweight dependencies from this file
+# will add to the boot time of your test suite on EVERY test run, even for an
+# individual file that may not need all of that loaded. Instead, consider making
+# a separate helper file that requires the additional dependencies and performs
+# the additional setup, and require it from the spec files that actually need
+# it.
+#
+# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
+RSpec.configure do |config|
+  # rspec-expectations config goes here. You can use an alternate
+  # assertion/expectation library such as wrong or the stdlib/minitest
+  # assertions if you prefer.
+  config.expect_with :rspec do |expectations|
+    # This option will default to `true` in RSpec 4. It makes the `description`
+    # and `failure_message` of custom matchers include text for helper methods
+    # defined using `chain`, e.g.:
+    #     be_bigger_than(2).and_smaller_than(4).description
+    #     # => "be bigger than 2 and smaller than 4"
+    # ...rather than:
+    #     # => "be bigger than 2"
+    expectations.include_chain_clauses_in_custom_matcher_descriptions = true
+  end
+
+  # rspec-mocks config goes here. You can use an alternate test double
+  # library (such as bogus or mocha) by changing the `mock_with` option here.
+  config.mock_with :rspec do |mocks|
+    # Prevents you from mocking or stubbing a method that does not exist on
+    # a real object. This is generally recommended, and will default to
+    # `true` in RSpec 4.
+    mocks.verify_partial_doubles = true
+  end
+
+  # This option will default to `:apply_to_host_groups` in RSpec 4 (and will
+  # have no way to turn it off -- the option exists only for backwards
+  # compatibility in RSpec 3). It causes shared context metadata to be
+  # inherited by the metadata hash of host groups and examples, rather than
+  # triggering implicit auto-inclusion in groups with matching metadata.
+  config.shared_context_metadata_behavior = :apply_to_host_groups
+
+# The settings below are suggested to provide a good initial experience
+# with RSpec, but feel free to customize to your heart's content.
+=begin
+  # This allows you to limit a spec run to individual examples or groups
+  # you care about by tagging them with `:focus` metadata. When nothing
+  # is tagged with `:focus`, all examples get run. RSpec also provides
+  # aliases for `it`, `describe`, and `context` that include `:focus`
+  # metadata: `fit`, `fdescribe` and `fcontext`, respectively.
+  config.filter_run_when_matching :focus
+
+  # Allows RSpec to persist some state between runs in order to support
+  # the `--only-failures` and `--next-failure` CLI options. We recommend
+  # you configure your source control system to ignore this file.
+  config.example_status_persistence_file_path = "spec/examples.txt"
+
+  # Limits the available syntax to the non-monkey patched syntax that is
+  # recommended. For more details, see:
+  #   - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/
+  #   - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
+  #   - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode
+  config.disable_monkey_patching!
+
+  # Many RSpec users commonly either run the entire suite or an individual
+  # file, and it's useful to allow more verbose output when running an
+  # individual spec file.
+  if config.files_to_run.one?
+    # Use the documentation formatter for detailed output,
+    # unless a formatter has already been configured
+    # (e.g. via a command-line flag).
+    config.default_formatter = "doc"
+  end
+
+  # Print the 10 slowest examples and example groups at the
+  # end of the spec run, to help surface which specs are running
+  # particularly slow.
+  config.profile_examples = 10
+
+  # Run specs in random order to surface order dependencies. If you find an
+  # order dependency and want to debug it, you can fix the order by providing
+  # the seed, which is printed after each run.
+  #     --seed 1234
+  config.order = :random
+
+  # Seed global randomization in this process using the `--seed` CLI option.
+  # Setting this allows you to use `--seed` to deterministically reproduce
+  # test failures related to randomization by passing the same `--seed` value
+  # as the one that triggered the failure.
+  Kernel.srand config.seed
+=end
+end
diff --git a/ACSmI/Billing/storage/.keep b/ACSmI/Billing/storage/.keep
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/ACSmI/Billing/tmp/.keep b/ACSmI/Billing/tmp/.keep
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/ACSmI/Billing/vendor/.keep b/ACSmI/Billing/vendor/.keep
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/ACSmI/Contracting/Gemfile b/ACSmI/Contracting/Gemfile
index 2e5bb7f4ef2948e97129bed90f4b25b5e988fe0c..f95835c311501c04f74bdd63fa1170d314ad83af 100644
--- a/ACSmI/Contracting/Gemfile
+++ b/ACSmI/Contracting/Gemfile
@@ -18,6 +18,13 @@ gem 'jbuilder', '~> 2.0'
 # bundle exec rake doc:rails generates the API under doc/api.
 gem 'sdoc', '~> 0.4.0', group: :doc
 
+gem 'watir'
+gem 'webdrivers'
+gem 'country_select', '~> 4.0'
+
+gem 'delayed_job_active_record'
+gem 'daemons'
+
 gem 'haml-rails', '~> 0.9.0'
 gem 'twitter-bootstrap-rails'
 gem 'bootstrap-generators', '~> 3.3.4'
@@ -28,6 +35,4 @@ gem 'aasm'
 gem 'authlogic'
 gem 'tzinfo-data'
 
-gem 'sucker_punch', '~> 2.0'
-
-gem 'json-schema'
\ No newline at end of file
+gem 'json-schema'
diff --git a/ACSmI/Contracting/Gemfile.lock b/ACSmI/Contracting/Gemfile.lock
index 826bea0316d7b0c6ef58655360cfca18ba36bb37..86c27d3b47c95244c71980a75174eb9ef8d26c69 100644
--- a/ACSmI/Contracting/Gemfile.lock
+++ b/ACSmI/Contracting/Gemfile.lock
@@ -49,6 +49,8 @@ GEM
     bootstrap-generators (3.3.4)
       railties (>= 3.1.0)
     builder (3.2.3)
+    childprocess (0.9.0)
+      ffi (~> 1.0, >= 1.0.11)
     coffee-rails (4.1.1)
       coffee-script (>= 2.2.0)
       railties (>= 4.0.0, < 5.1.x)
@@ -58,7 +60,20 @@ GEM
     coffee-script-source (1.12.2)
     commonjs (0.2.7)
     concurrent-ruby (1.0.5)
+    countries (3.0.0)
+      i18n_data (~> 0.8.0)
+      sixarm_ruby_unaccent (~> 1.1)
+      unicode_utils (~> 1.4)
+    country_select (4.0.0)
+      countries (~> 3.0)
+      sort_alphabetical (~> 1.0)
     crass (1.0.3)
+    daemons (1.3.1)
+    delayed_job (4.1.5)
+      activesupport (>= 3.0, < 5.3)
+    delayed_job_active_record (4.1.3)
+      activerecord (>= 3.0, < 5.3)
+      delayed_job (>= 3.0, < 5)
     domain_name (0.5.20170404)
       unf (>= 0.0.5, < 1.0.0)
     encryptor (3.0.0)
@@ -87,6 +102,7 @@ GEM
       domain_name (~> 0.5)
     i18n (0.9.1)
       concurrent-ruby (~> 1.0)
+    i18n_data (0.8.0)
     jbuilder (2.7.0)
       activesupport (>= 4.2.0)
       multi_json (>= 1.2)
@@ -118,6 +134,7 @@ GEM
     mini_portile2 (2.1.0)
     minitest (5.10.3)
     multi_json (1.12.2)
+    net_http_ssl_fix (0.0.10)
     netrc (0.11.0)
     nokogiri (1.7.0.1)
       mini_portile2 (~> 2.1.0)
@@ -154,6 +171,7 @@ GEM
     rb-inotify (0.9.10)
       ffi (>= 0.5.0, < 2)
     rdoc (4.3.0)
+    regexp_parser (1.3.0)
     request_store (1.3.2)
     rest-client (2.0.2)
       http-cookie (>= 1.0.2, < 2.0)
@@ -161,6 +179,7 @@ GEM
       netrc (~> 0.8)
     ruby_parser (3.10.1)
       sexp_processor (~> 4.9)
+    rubyzip (1.2.2)
     sass (3.5.3)
       sass-listen (~> 4.0.0)
     sass-listen (4.0.0)
@@ -177,7 +196,13 @@ GEM
     sdoc (0.4.2)
       json (~> 1.7, >= 1.7.7)
       rdoc (~> 4.0)
+    selenium-webdriver (3.141.0)
+      childprocess (~> 0.5)
+      rubyzip (~> 1.2, >= 1.2.2)
     sexp_processor (4.10.0)
+    sixarm_ruby_unaccent (1.2.0)
+    sort_alphabetical (1.1.0)
+      unicode_utils (>= 1.2.2)
     sprockets (3.7.1)
       concurrent-ruby (~> 1.0)
       rack (> 1, < 3)
@@ -186,8 +211,6 @@ GEM
       activesupport (>= 4.0)
       sprockets (>= 3.0.0)
     sqlite3 (1.3.13)
-    sucker_punch (2.0.4)
-      concurrent-ruby (~> 1.0.0)
     thor (0.20.0)
     thread_safe (0.3.6)
     tilt (2.0.8)
@@ -205,6 +228,15 @@ GEM
     unf (0.1.4)
       unf_ext
     unf_ext (0.0.7.4)
+    unicode_utils (1.4.0)
+    watir (6.16.5)
+      regexp_parser (~> 1.2)
+      selenium-webdriver (~> 3.6)
+    webdrivers (3.7.0)
+      net_http_ssl_fix
+      nokogiri (~> 1.6)
+      rubyzip (~> 1.0)
+      selenium-webdriver (~> 3.0)
 
 PLATFORMS
   ruby
@@ -215,6 +247,9 @@ DEPENDENCIES
   authlogic
   bootstrap-generators (~> 3.3.4)
   coffee-rails (~> 4.1.0)
+  country_select (~> 4.0)
+  daemons
+  delayed_job_active_record
   haml-rails (~> 0.9.0)
   jbuilder (~> 2.0)
   jquery-rails
@@ -225,10 +260,11 @@ DEPENDENCIES
   sass-rails (~> 5.0)
   sdoc (~> 0.4.0)
   sqlite3
-  sucker_punch (~> 2.0)
   twitter-bootstrap-rails
   tzinfo-data
   uglifier (>= 1.3.0)
+  watir
+  webdrivers
 
 BUNDLED WITH
-   1.16.2
+   1.17.3
diff --git a/ACSmI/Contracting/LICENSE.txt b/ACSmI/Contracting/LICENSE.txt
index dabcf4bf642a008110022f599fd9fb6f908bdaba..d46fc1d82670d39dddae7fb3224aa16383f18829 100644
--- a/ACSmI/Contracting/LICENSE.txt
+++ b/ACSmI/Contracting/LICENSE.txt
@@ -15,7 +15,11 @@ Andrey Sereda (CloudBroker)
 Anna Shevchenko (CloudBroker)
 Anton Ovcharenko (CloudBroker)
 Dmitriy Spivakov (CloudBroker)
+Elena Dubich (CloudBroker)
+Kirill Chubuk (CloudBroker)
 Nicola Fantini (CloudBroker)
 Viktor Kopychko (CloudBroker)
+Vitalii Zakharenko (CloudBroker)
+Yevhenii Dzhura (CloudBroker)
 
-Initially developed in the context of DECIDE EU project http://www.decide-h2020.eu/
\ No newline at end of file
+Initially developed in the context of DECIDE EU project http://www.decide-h2020.eu/
diff --git a/ACSmI/Contracting/README.rdoc b/ACSmI/Contracting/README.rdoc
index c7da9fc6017dc5956a23ed6bc87c65cfd34aa6ec..1a051e08302bfe8c657f12b86f2235cce57bb462 100644
--- a/ACSmI/Contracting/README.rdoc
+++ b/ACSmI/Contracting/README.rdoc
@@ -1,12 +1,13 @@
-== Intro
-
-ACSmI Contracting Tool
-
-== Installation instructions
-
-* Install ruby version 2.1.0 (https://www.ruby-lang.org/en/downloads/ for Windows or rvm.io for Unix). Please make sure ‘ruby -v’ returns the correct version in console.
-* Install dependencies. Go to project folder and run the following: ‘gem install bundler; bundle install’. Wait till all the gems are installed
-* Configure the access to the CloudBroker Platform. Go to db/seeds.rb and provide your  Platform account details under ‘platform_email’ and ‘platform_password’ settings (please change value, not the key)
-* Create and configure the database. Go to project folder and run the following: ‘rake db:create; rake db:migrate; rake db:seed’
-* Start the server. Run “bin/rails server -b 0.0.0.0 -p 3000 -e development”
-* Open your browser, navigate to http://0.0.0.0:3000
+== Intro
+
+ACSmI Contracting Tool
+
+== Installation instructions
+
+* Install ruby version 2.1.0 (https://www.ruby-lang.org/en/downloads/ for Windows or rvm.io for Unix). Please make sure ‘ruby -v’ returns the correct version in console.
+* Install dependencies. Go to project folder and run the following: ‘gem install bundler; bundle install’. Wait till all the gems are installed
+* Install the latest version of Google Chrome
+* Configure the access to the CloudBroker Platform. Go to db/seeds.rb and provide your  Platform account details under ‘platform_email’ and ‘platform_password’ settings (please change value, not the key)
+* Create and configure the database. Go to project folder and run the following: ‘rake db:create; rake db:migrate; rake db:seed’
+* Start the server. Run “bin/rails server -b 0.0.0.0 -p 3000 -e development”
+* Open your browser, navigate to http://0.0.0.0:3000
diff --git a/ACSmI/Contracting/Rakefile b/ACSmI/Contracting/Rakefile
index 6ea7d6354b257d25712b244f26afe11403ea8608..ba6b733dd2358d858f00445ebd91c214f0f5d2e5 100644
--- a/ACSmI/Contracting/Rakefile
+++ b/ACSmI/Contracting/Rakefile
@@ -1,6 +1,6 @@
-# Add your own tasks in files placed in lib/tasks ending in .rake,
-# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
-
-require File.expand_path('../config/application', __FILE__)
-
-Rails.application.load_tasks
+# Add your own tasks in files placed in lib/tasks ending in .rake,
+# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
+
+require File.expand_path('../config/application', __FILE__)
+
+Rails.application.load_tasks
diff --git a/ACSmI/Contracting/app/assets/javascripts/application.js b/ACSmI/Contracting/app/assets/javascripts/application.js
index 58f235bd48d2a5705d48e39342e21a30ed768acd..71af6ee05ff7e74a3179f1c8d25539a4d1387e6f 100644
--- a/ACSmI/Contracting/app/assets/javascripts/application.js
+++ b/ACSmI/Contracting/app/assets/javascripts/application.js
@@ -14,3 +14,13 @@
 //= require jquery_ujs
 //= require twitter/bootstrap
 //= require_tree .
+
+
+function showMessage(text, isInfo) {
+    baseId = isInfo ? '#flashnotice' : '#flashwarning';
+    jQuery(baseId).show();
+    jQuery(baseId + '-body').html(text);
+    setTimeout(function () {
+        hideMessage(baseId)
+    }, 13000)
+}
\ No newline at end of file
diff --git a/ACSmI/Contracting/app/assets/javascripts/resource_page_loader.js b/ACSmI/Contracting/app/assets/javascripts/resource_page_loader.js
new file mode 100644
index 0000000000000000000000000000000000000000..6488c086b6c183627918b8b490d29f0284936a75
--- /dev/null
+++ b/ACSmI/Contracting/app/assets/javascripts/resource_page_loader.js
@@ -0,0 +1,6 @@
+function page_loader(hiding_class, showing_class) {
+    for (var i = 0; i < hiding_class.length; i++) {
+        hiding_class[i].style.display = "none"
+    }
+    showing_class.show()
+}
\ No newline at end of file
diff --git a/ACSmI/Contracting/app/assets/javascripts/sessions.js b/ACSmI/Contracting/app/assets/javascripts/sessions.js
index 01c3a55964b2b0bdf816bf596ec824abb74470c7..a5d874b61f54403676570ee2347b25d522ba3fbc 100644
--- a/ACSmI/Contracting/app/assets/javascripts/sessions.js
+++ b/ACSmI/Contracting/app/assets/javascripts/sessions.js
@@ -1,13 +1,13 @@
-function toggleSubforms(){
-    if ($('#sign-in').is(':checked')){
-        $('.sign-in-subform').show();
-        $('.sign-in-subform :input').prop('disabled', false);
-        $('.sign-up-subform').hide();
-        $('.sign-up-subform :input').prop('disabled', true);
-    } else {
-        $('.sign-up-subform').show();
-        $('.sign-up-subform :input').prop('disabled', false);
-        $('.sign-in-subform').hide();
-        $('.sign-in-subform :input').prop('disabled', true);
-    }
+function toggleSubforms(){
+    if ($('#sign-in').is(':checked')){
+        $('.sign-in-subform').show();
+        $('.sign-in-subform :input').prop('disabled', false);
+        $('.sign-up-subform').hide();
+        $('.sign-up-subform :input').prop('disabled', true);
+    } else {
+        $('.sign-up-subform').show();
+        $('.sign-up-subform :input').prop('disabled', false);
+        $('.sign-in-subform').hide();
+        $('.sign-in-subform :input').prop('disabled', true);
+    }
 }
\ No newline at end of file
diff --git a/ACSmI/Contracting/app/assets/stylesheets/application.scss b/ACSmI/Contracting/app/assets/stylesheets/application.scss
index edc67e8da36180d67b5018ebd0f3a7398766bd1e..f026cf290b0af1d303a072b73286089719b2e092 100644
--- a/ACSmI/Contracting/app/assets/stylesheets/application.scss
+++ b/ACSmI/Contracting/app/assets/stylesheets/application.scss
@@ -12,6 +12,22 @@
 @import "bootstrap";
 @import "material-dashboard";
 
+a {
+  text-decoration: none;
+  color: #5A86D5;
+  outline: none;
+}
+
+.captcha_size { height: 100px; width: 300px;}
+
+.hide_spin_box {
+  input[type=number]::-webkit-inner-spin-button,
+  input[type=number]::-webkit-outer-spin-button {
+    -webkit-appearance: none;
+    margin: 0;
+  }
+}
+
 .site-content {
     margin-bottom: 50px;
 }
@@ -55,4 +71,15 @@ a, a:visited {
 
 label {
   color: #3C4858 !important;
+}
+
+
+a.copy-to-clipboard-link {
+  border-bottom: dashed 1px blue;
+  cursor: pointer;
+}
+
+a.copy-to-clipboard-link:hover {
+  background: white !important;
+  color: #5A86D5;
 }
\ No newline at end of file
diff --git a/ACSmI/Contracting/app/assets/stylesheets/bootstrap-generators.scss b/ACSmI/Contracting/app/assets/stylesheets/bootstrap-generators.scss
index d41a433ddb7fc20616a773f7f55e4a43fadb4fa7..3c085cc80107d97471c1d161153dd4b496938226 100644
--- a/ACSmI/Contracting/app/assets/stylesheets/bootstrap-generators.scss
+++ b/ACSmI/Contracting/app/assets/stylesheets/bootstrap-generators.scss
@@ -1,15 +1,15 @@
-@import "bootstrap-variables.scss";
-@import "bootstrap-sprockets.scss";
-@import "bootstrap.scss";
-
-.top-header {
-  img.header-logo {
-    margin-top: 4px;
-    margin-left: -15px;
-    margin-right: 20px;
-  }
-}
-
-.field_with_errors {
-  @extend .has-error;
+@import "bootstrap-variables.scss";
+@import "bootstrap-sprockets.scss";
+@import "bootstrap.scss";
+
+.top-header {
+  img.header-logo {
+    margin-top: 4px;
+    margin-left: -15px;
+    margin-right: 20px;
+  }
+}
+
+.field_with_errors {
+  @extend .has-error;
 }
\ No newline at end of file
diff --git a/ACSmI/Contracting/app/assets/stylesheets/contracter.scss b/ACSmI/Contracting/app/assets/stylesheets/contracter.scss
index bfed0fbebedf51b8ec4216f2e1131b818b7c720a..77ee6eb14fb15dbd5b444f4e9fe98c244136fa37 100644
--- a/ACSmI/Contracting/app/assets/stylesheets/contracter.scss
+++ b/ACSmI/Contracting/app/assets/stylesheets/contracter.scss
@@ -1,13 +1,13 @@
-.contracter-container {
-  text-align: center;
-
-  .contracter-body {
-    display: inline-block;
-    padding: 10px 30px 5px 20px;
-
-    .contract-spinner {
-      color: gray;
-      font-size: 24px;
-    }
-  }
+.contracter-container {
+  text-align: center;
+
+  .contracter-body {
+    display: inline-block;
+    padding: 10px 30px 5px 20px;
+
+    .contract-spinner {
+      color: gray;
+      font-size: 24px;
+    }
+  }
 }
\ No newline at end of file
diff --git a/ACSmI/Contracting/app/assets/stylesheets/md/_alerts.scss b/ACSmI/Contracting/app/assets/stylesheets/md/_alerts.scss
index 7166f017ea43ef8839900dcf750d742ddeb3e34d..a3efa5a7f45c9c37c3b1e1b99e52a94fe7924fa8 100644
--- a/ACSmI/Contracting/app/assets/stylesheets/md/_alerts.scss
+++ b/ACSmI/Contracting/app/assets/stylesheets/md/_alerts.scss
@@ -4,7 +4,7 @@
     border: 0;
     border-radius: 0;
     position: relative;
-    padding: 20px 15px;
+    padding: 20px 30px;
     line-height: 20px;
 
     b{
diff --git a/ACSmI/Contracting/app/assets/stylesheets/welcome.scss b/ACSmI/Contracting/app/assets/stylesheets/welcome.scss
index 2fcb4edddbd6435c7a89d688df01fdfb9d628872..22d327ebe9243011aaf2a70bdcbfa0dcf775432e 100644
--- a/ACSmI/Contracting/app/assets/stylesheets/welcome.scss
+++ b/ACSmI/Contracting/app/assets/stylesheets/welcome.scss
@@ -1,36 +1,36 @@
-.tryout-acsmi {
-  margin-right: 15px;
-  margin-left: 15px;
-
-  a {
-    color: black;
-  }
-
-  a:hover {
-    text-decoration: none;
-    color: black;
-  }
-
-  .panel-heading {
-    border-bottom: 1px solid lightgray;
-  }
-
-  input#resource_id {
-    height: 34px;
-    border-width: 1px;
-    padding-top: 6px;
-    padding-bottom: 6px;
-    margin-bottom: 0px;
-    margin-top: 6px;
-  }
-
-  .panel-body {
-    padding-bottom: 0px;
-  }
-}
-
-
-
-
-
-
+.tryout-acsmi {
+  margin-right: 15px;
+  margin-left: 15px;
+
+  a {
+    color: black;
+  }
+
+  a:hover {
+    text-decoration: none;
+    color: black;
+  }
+
+  .panel-heading {
+    border-bottom: 1px solid lightgray;
+  }
+
+  input#resource_id {
+    height: 34px;
+    border-width: 1px;
+    padding-top: 6px;
+    padding-bottom: 6px;
+    margin-bottom: 0px;
+    margin-top: 6px;
+  }
+
+  .panel-body {
+    padding-bottom: 0px;
+  }
+}
+
+
+
+
+
+
diff --git a/ACSmI/Contracting/app/controllers/contracts_controller.rb b/ACSmI/Contracting/app/controllers/contracts_controller.rb
index 73553c17286d2b0f400b752c130f90e9372aadc7..441f28bb09cc9b3e28feb9ca6da53c473659da30 100644
--- a/ACSmI/Contracting/app/controllers/contracts_controller.rb
+++ b/ACSmI/Contracting/app/controllers/contracts_controller.rb
@@ -12,6 +12,8 @@ class ContractsController < ApplicationController
 
   def destroy
     if @contract.destroy
+      cancellation_data = {contract_id: @contract.id, email: current_user.email, cancel_penalty_cost: 1}
+      BillingReporter.cancel_contract(cancellation_data)
       flash[:notice] = 'Contract deleted'
     else
       flash[:alert] = 'Couldn\'t delete the contract'
diff --git a/ACSmI/Contracting/app/controllers/decide/acsmi/contracting/api/v1/api_controller.rb b/ACSmI/Contracting/app/controllers/decide/acsmi/contracting/api/v1/api_controller.rb
index b57f9af5beda61a632f7df3c6ee7dad75975f18b..0c58ed26f7fc1219746e568a2fc8e388b9d37b4c 100644
--- a/ACSmI/Contracting/app/controllers/decide/acsmi/contracting/api/v1/api_controller.rb
+++ b/ACSmI/Contracting/app/controllers/decide/acsmi/contracting/api/v1/api_controller.rb
@@ -1,5 +1,5 @@
-class Decide::Acsmi::Contracting::Api::V1::ApiController < ActionController::Base
-  def error_response(message, status = 422)
-    render json: { json: { errors: message }, status: status }
-  end
+class Decide::Acsmi::Contracting::Api::V1::ApiController < ActionController::Base
+  def error_response(message, status = 422)
+    render json: { json: { errors: message }, status: status }
+  end
 end
\ No newline at end of file
diff --git a/ACSmI/Contracting/app/controllers/resource_registration_controller.rb b/ACSmI/Contracting/app/controllers/resource_registration_controller.rb
new file mode 100644
index 0000000000000000000000000000000000000000..725f1f3ab877eb4d027605de4191f38c9abae624
--- /dev/null
+++ b/ACSmI/Contracting/app/controllers/resource_registration_controller.rb
@@ -0,0 +1,78 @@
+class ResourceRegistrationController < ApplicationController
+  before_action :set_session
+
+  def step1
+    set_session_step(@session, '1') if @session.page_step.nil?
+    @fields = AutoRegistrationAccessor.fields_for(params[:resource_name])
+  end
+
+  def send_fields_to_resource
+    set_session_status(@session, nil) unless @session.registration_status.nil?
+    object = AutoRegistrationAccessor.object_for(params[:resource_name])
+    object.send_fields_to_resource(params[:resource_fields], @session)
+     if object.next_page
+       @session.resource_object = encode(object)
+       @session.save
+       set_session_step(@session, '4')
+       redirect_to notify_data_path(@session)
+     elsif object.creds_data
+       @session.resource_object = encode(object)
+       @session.save
+       flash.alert = 'There was a problem with your payment information / contact details. Please check your email with the instructions on how to resolve it and activate your account.'
+       set_session_step(@session, '4')
+       redirect_to notify_data_path(@session)
+     else
+       flash.alert = object.validation_errors
+       redirect_to resource_step1_path(object.resource_name, @session)
+     end
+  end
+
+  def notify_data
+    @data = decode(@session.resource_object).creds_data
+  end
+
+
+  def registration_steps
+    if @session.page_step.nil?
+      render js: "window.location.pathname ='#{contracts_path}'"
+    else
+      case @session.page_step
+      when '1'
+        render js: "window.location.pathname ='#{resource_step1_path(@session.contracting_resource.provider.downcase, @session)}'"
+      when '2'
+        render js: "window.location.pathname ='#{request_sms_code_path(@session)}'"
+      when '3'
+        render js: "window.location.pathname ='#{reentry_data_path(@session, decode(@session.resource_object).reentry_fields[:type])}'"
+      when '4'
+        render js: "window.location.pathname ='#{notify_data_path(@session)}'"
+      end
+    end
+  end
+
+  private
+
+  def set_session_status(session, status)
+    session.registration_status = status
+    session.save
+  end
+
+
+  def set_session_step(session, step)
+    session.page_step = step
+    session.save
+  end
+
+  def encode(object)
+    marshal_obj = Marshal.dump(object)
+    encode_marshal_obj = URI.encode(marshal_obj)
+  end
+
+  def decode(object)
+    object_decoded = URI.decode(object)
+    object = Marshal.load(object_decoded)
+  end
+
+  def set_session
+    @session = Session.find_by_id(params[:session]) || Session.find_by_id(params[:id])
+  end
+end
diff --git a/ACSmI/Contracting/app/controllers/sessions_controller.rb b/ACSmI/Contracting/app/controllers/sessions_controller.rb
index 097831cbcb5ce738a957c1847f5e5e65702f3c5e..a5a08bf9a4bda4717c7ac80bf71a8dfbbbd9bb85 100644
--- a/ACSmI/Contracting/app/controllers/sessions_controller.rb
+++ b/ACSmI/Contracting/app/controllers/sessions_controller.rb
@@ -1,8 +1,8 @@
 class SessionsController < ApplicationController
   before_action :set_session, except: [:start_demo]
   before_action :set_schema_errors, only: %i[index own_creds_or_contract setup_contracting]
-  before_action :set_contracting_resource, only: %i[index own_creds_or_contract check_existing_contract prepare_new_contract use_own_creds]
-  before_action :check_auth, only: [:setup_contracting, :check_existing_contract, :prepare_new_contract]
+  before_action :set_contracting_resource, only: %i[index own_creds_or_contract check_existing_contract prepare_new_contract platform_or_direct use_own_creds setup_contracting]
+  before_action :check_auth, only: [:setup_contracting, :check_existing_contract, :prepare_new_contract, :platform_or_direct]
 
   def index
     render_bad_request unless @session
@@ -26,33 +26,45 @@ class SessionsController < ApplicationController
   end
 
   def own_creds_or_contract
-    if params[:have_credentials] == 'true'
-      @credential_fields = if @contracting_resource.resource_id
-                             PlatformConnector.fields_for_credentials(@contracting_resource.resource_id)
-                           else
-                             [{'name' => 'login', 'type' => 'text'}, {'name' => 'password', 'type' => 'password'}]
-                           end
-      render 'request_credentials'
-    else
-      unless @contracting_resource.resource_id
-        flash[:alert] = 'Corresponding CBP Resource is required for contracting'
-        redirect_to sessions_url(session_id: @session.id)
-        return false
-      end
+    if current_user
+      if params[:have_credentials] == 'true'
+
+          @credential_fields = if @contracting_resource.resource_id
+                                PlatformConnector.fields_for_credentials(@contracting_resource.resource_id)
+                               else
+                                [{'name' => 'login', 'type' => 'text'}, {'name' => 'password', 'type' => 'password'}]
+                              end
+          render 'request_credentials'
 
-      if current_user
-        @session.update(user: current_user)
-        redirect_to setup_contracting_session_path(@session)
       else
-        @user_session = UserSession.new
-        @user = User.new
-        @have_account = true
-        render 'start_contracting'
+        unless @contracting_resource.resource_id
+          flash[:alert] = 'Corresponding CBP Resource is required for contracting'
+          redirect_to sessions_url(session_id: @session.id)
+          return false
+        end
+        @session.update(user: current_user)
+        if AutoRegistrationAccessor.check_existence(@contracting_resource.provider.downcase)
+          redirect_to platform_or_direct_session_path(@session)
+        else
+          redirect_to setup_contracting_session_path(@session, method: 'platform')
+        end
       end
+    else
+      @user_session = UserSession.new
+      @user = User.new
+      @have_account = true
+      render 'start_contracting'
     end
   end
 
-  def setup_contracting; end
+  def setup_contracting
+    @method = params[:method]
+    @session.page_step = nil
+    @session.resource_object = nil
+    @contracting_resource.contracting_method = params[:method]
+    @contracting_resource.save
+    @session.save
+  end
 
   def success
     begin
@@ -74,8 +86,14 @@ class SessionsController < ApplicationController
     end
   end
 
+  def platform_or_direct; end
+
   def prepare_new_contract
-    Contract.generate(@contracting_resource)
+    if params[:method] == 'platform'
+      Contract.platform_generate(@contracting_resource)
+    elsif params[:method] == 'direct'
+      Contract.direct_generate(@contracting_resource)
+    end
     sleep 1
     @contracting_resource.make_ready!
   end
diff --git a/ACSmI/Contracting/app/controllers/user_sessions_controller.rb b/ACSmI/Contracting/app/controllers/user_sessions_controller.rb
index 81dc1cc09f9123f976aeb856f52cc79eddbb8de1..d30850ec57a7f7f5ac3b181fee0018901ae00afd 100644
--- a/ACSmI/Contracting/app/controllers/user_sessions_controller.rb
+++ b/ACSmI/Contracting/app/controllers/user_sessions_controller.rb
@@ -47,17 +47,37 @@ class UserSessionsController < ApplicationController
   def save_object(object)
     if object.save
       @session.update(user: current_user)
-      redirect_to setup_contracting_session_path(@session)
+      contracting_resource = @session.contracting_resource
+      if have_resource_credentials? == 'false'
+        if AutoRegistrationAccessor.check_existence(contracting_resource.provider.downcase)
+          redirect_to platform_or_direct_session_path(@session)
+        else
+          redirect_to setup_contracting_session_path(@session, method: 'platform')
+        end
+      else
+        @contracting_resource = @session.contracting_resource
+        @credential_fields = if @contracting_resource.resource_id
+                               PlatformConnector.fields_for_credentials(@contracting_resource.resource_id)
+                             else
+                               [{'name' => 'login', 'type' => 'text'}, {'name' => 'password', 'type' => 'password'}]
+                             end
+        render 'sessions/request_credentials'
+      end
+
     else
       render template: 'sessions/start_contracting'
     end
   end
 
+  def have_resource_credentials?
+    params.require(:have_credentials)
+  end
+
   def user_session_params
     params.require(:user_session).permit(:email, :password)
   end
 
   def user_params
-    params.require(:user).permit(:email, :full_name, :password, :password_confirmation, :organization, :address, :accept_terms)
+    params.require(:user).permit(:email, :full_name, :password, :password_confirmation, :organization, :country, :city, :address, :zipcode, :accept_terms)
   end
 end
\ No newline at end of file
diff --git a/ACSmI/Contracting/app/controllers/welcome_controller.rb b/ACSmI/Contracting/app/controllers/welcome_controller.rb
index 0a1fe2c7c84541297a4e3d81377d080f01418a6f..f02c75f143c8f276a68f4507281106ad85e50556 100644
--- a/ACSmI/Contracting/app/controllers/welcome_controller.rb
+++ b/ACSmI/Contracting/app/controllers/welcome_controller.rb
@@ -1,7 +1,7 @@
-class WelcomeController < ApplicationController
-
-  def index
-
-  end
-
+class WelcomeController < ApplicationController
+
+  def index
+
+  end
+
 end
\ No newline at end of file
diff --git a/ACSmI/Contracting/app/jobs/clean_up_job.rb b/ACSmI/Contracting/app/jobs/clean_up_job.rb
index 66bed9f2450cb0b5be8baac4cd2fbe00957ee210..126503eefc38f117fd6d480ee6dfc055b7bdc3b5 100644
--- a/ACSmI/Contracting/app/jobs/clean_up_job.rb
+++ b/ACSmI/Contracting/app/jobs/clean_up_job.rb
@@ -1,8 +1,6 @@
 class CleanUpJob
   require 'fileutils'
 
-  include SuckerPunch::Job
-
   TOLERATE_PERIOD = 1.day
   PERFORM_EVERY = 1.hour.to_i
 
@@ -17,8 +15,10 @@ class CleanUpJob
       next unless stale
       FileUtils.remove_dir(dir)
     end
+  end
 
-    CleanUpJob.perform_in(PERFORM_EVERY)
+  def after(job)
+    Delayed::Job.enqueue CleanUpJob.new, run_at: PERFORM_EVERY.seconds.from_now
   end
 
 end
\ No newline at end of file
diff --git a/ACSmI/Contracting/app/models/application_description_schema.rb b/ACSmI/Contracting/app/models/application_description_schema.rb
index 5d287f2d7909aacfb0c192c90631ee326b858b09..f9b30a366ab11d7d44ce999150dbbfbbfa492300 100644
--- a/ACSmI/Contracting/app/models/application_description_schema.rb
+++ b/ACSmI/Contracting/app/models/application_description_schema.rb
@@ -38,8 +38,7 @@ class ApplicationDescriptionSchema
 
   def self.validate(parsed_json)
     schema = JSON.parse File.read(PATH)
-    schema['$schema'] = schema['$schema'].gsub('draft-07', 'draft-06')
-    JSON::Validator.fully_validate(schema, parsed_json)
+    JSON::Validator.fully_validate(schema, parsed_json, version: :draft6)
   end
 
   def self.vm_errors(parsed_json)
diff --git a/ACSmI/Contracting/app/models/contract.rb b/ACSmI/Contracting/app/models/contract.rb
index 11d1d6425d9a6e77ed665503053372a6db3dac25..5ad80e9289a0f470640e2fbf49eef3d0f91a3c3d 100644
--- a/ACSmI/Contracting/app/models/contract.rb
+++ b/ACSmI/Contracting/app/models/contract.rb
@@ -7,7 +7,7 @@ class Contract < ActiveRecord::Base
   validates :resource_name, presence: true
   validates :user, presence: true
 
-  def self.generate(contracting_resource)
+  def self.platform_generate(contracting_resource)
     session = contracting_resource.session
     user = session.user
     user.register_plaform_user if user.platform_email.blank?
@@ -21,6 +21,15 @@ class Contract < ActiveRecord::Base
     contracting_resource.update!(contract: contract)
   end
 
+  def self.direct_generate(contracting_resource)
+    session = contracting_resource.session
+    user = session.user
+    contract = Contract.create!(user: user,
+                                resource_id: contracting_resource.resource_id,
+                                resource_name: contracting_resource.resource_name)
+    contracting_resource.update!(contract: contract)
+  end
+
   def store_instance_data(attrs_hash)
     attrs_hash.each do |name, value|
       instance_attributes.build(name: name, value: value)
diff --git a/ACSmI/Contracting/app/models/contracting_resource.rb b/ACSmI/Contracting/app/models/contracting_resource.rb
index 61d4807c2c8dc9044935037a8418909abc84121a..14eb18f3b6750e55e5f48e00bcd456f764be573e 100644
--- a/ACSmI/Contracting/app/models/contracting_resource.rb
+++ b/ACSmI/Contracting/app/models/contracting_resource.rb
@@ -30,6 +30,7 @@ class ContractingResource < ActiveRecord::Base
     return false unless prev_res
     self.contract = prev_res.contract
     self.credential_fields = prev_res.credential_fields
+    self.contracting_method = prev_res.contracting_method
     self.make_ready
     save
   end
@@ -42,7 +43,7 @@ class ContractingResource < ActiveRecord::Base
   end
 
   def credential_fields_hash
-    self.credential_fields.inject({}){|res, cf| res[cf.name] = cf.value; res}
+    self.credential_fields.inject({}) {|res, cf| res[cf.name] = cf.value; res}
   end
 
   def service
@@ -71,31 +72,27 @@ class ContractingResource < ActiveRecord::Base
     # is using hardcoded amazon and cs data
     # is needed for now, but is to be removed in future
     provider_value = self.provider.downcase
-    if ['cloudsigma', 'clsi'].include? provider_value
-      default_resource_id = 'c1fb1543-54aa-4247-91ee-3ea9a553f64e'
-      default_resource_name = 'CloudSigma CloudBroker GmbH'
-      default_region_id = '4265ddb9-e862-4814-82a4-d6b92f25e8e5'
-      default_instance_type_id = '8c1ffcb7-4f50-42d7-8e88-bc7b8184b3cc'
-    elsif ['amazon ec2', 'ams3', 'amdb', 'amazon', 'amaz'].include? provider_value
-      default_resource_id = '05d76ee4-3b7e-4726-8ff3-eb24f667c70d'
-      default_resource_name = 'Amazon EC2 CloudBroker GmbH'
-      default_region_id = '83dc7c1e-711c-4548-9a9e-128f9795cfed'
-      default_instance_type_id = 'e3ca8e4c-0f91-4e83-9bd9-4cef88d054a8'
-    elsif ['arsys', 'arsy'].include? provider_value
-      default_resource_id = '27b1fb7b-2fd9-4042-8902-e4996e0bc420'
-      default_resource_name = 'Arsys CloudBuilder CloudBroker GmbH'
-      default_region_id = 'd112253a-951f-417a-a1f1-3a892bf35a45'
-      default_instance_type_id = 'f554e8a1-29d8-48e5-bd68-c01417576628'
-    else
-      raise "unsupported provider #{provider_value}"
-    end
 
-    self.resource_id = default_resource_id
-    self.resource_name = default_resource_name
-    self.build_virtual_machine(region_id: default_region_id,
-                               instance_type_id: default_instance_type_id,
-                               software_id: '21b7ebed-5076-43b6-8351-0e06cf16eedc',
-                               image: 'Ubuntu 16.04')
+    matched_provider = if ['cloudsigma', 'clsi'].include? provider_value
+                         :cloudsigma
+                       elsif ['amazon ec2', 'ams3', 'amdb', 'amazon', 'amaz'].include? provider_value
+                         :aws
+                       elsif ['arsys', 'arsy'].include? provider_value
+                         :arsys
+                       elsif ['azur'].include? provider_value
+                         :azure
+                       else
+                         raise "unsupported provider #{provider_value}"
+                       end
+    matched_provider = DEFAULT_VM_DATA[matched_provider]
+
+    self.resource_id = matched_provider[:resource_id]
+    self.resource_name = matched_provider[:resource_name]
+    self.build_virtual_machine(region_id: matched_provider[:region_id],
+                               instance_type_id: matched_provider[:instance_type_id],
+                               software_id: DEFAULT_VM_DATA[:software][:id],
+                               image: DEFAULT_VM_DATA[:software][:image])
+
   end
 
   def provider
diff --git a/ACSmI/Contracting/app/models/git_access.rb b/ACSmI/Contracting/app/models/git_access.rb
index 23866260972112671af787a032535824d7c9890c..1d037b2e4ef175177e979496af8fd182a0b33057 100644
--- a/ACSmI/Contracting/app/models/git_access.rb
+++ b/ACSmI/Contracting/app/models/git_access.rb
@@ -1,8 +1,8 @@
 class GitAccess < ActiveRecord::Base
   belongs_to :session
 
-  attr_encrypted :username, key: '\xF5?Y\x90\xD3K\xE4S\x01\xBB\x96H`\xB5/\x1A~x\xAF\x87o?B\xAC\xB1z\x97\xA0\xDC\x11\xBE\x8E'
-  attr_encrypted :password, key: '\xC3\xEDL\x0EB\xFB\x8E\xBA\x1D\x8D\xA8\xBB\xD5\x9C\xD8\xC2@\xF5\xADD{\x1D\x8Du\x0E\xD6\xFAx,g\x17\x8A'
+  attr_encrypted :username, key: "\xCER\x15\x15\xC9R\x8E\x9AQ\x06u\x84\xA1b\xC7\x1F\x91\x0E\xA1\xBCk\xA2\xFA\r \xF9 \xB7'\xB5\xB2\xD4"
+  attr_encrypted :password, key: "\x13o\xF1\x94\xC6\xC1\xE3F!\xC0\x80\x8C\xC4\x86\v\x92*\xBB\x9D\xF6\x92D\xD9W\x05\x9E\xA7m\x85Q\xA0|"
 
   alias_attribute :git_url, :url
   alias_attribute :git_username, :username
diff --git a/ACSmI/Contracting/app/models/resource_info.rb b/ACSmI/Contracting/app/models/resource_info.rb
new file mode 100644
index 0000000000000000000000000000000000000000..0ae92062d5be910d063018138c78d304d15cbb74
--- /dev/null
+++ b/ACSmI/Contracting/app/models/resource_info.rb
@@ -0,0 +1,2 @@
+class ResourceInfo < ActiveRecord::Base
+end
diff --git a/ACSmI/Contracting/app/models/session.rb b/ACSmI/Contracting/app/models/session.rb
index 919a49e45500cc18930079f2b1b0236c4ac73b28..ce715820c40f2cd936f7341c7650d7b9c6c8b782 100644
--- a/ACSmI/Contracting/app/models/session.rb
+++ b/ACSmI/Contracting/app/models/session.rb
@@ -36,12 +36,6 @@ class Session < ActiveRecord::Base
   private
 
   def collect_vms_data
-    endpoint_hash = {
-        'cloudbrokerEndpoint' => Setting.value('platform_url'),
-        'cloudbrokerUsername' => user.try(&:platform_email),
-        'cloudbrokerPassword' => user.try(&:platform_password)
-    }
-
     vms = []
     contracting_resources.each do |c_r|
       if c_r.failed?
@@ -53,10 +47,39 @@ class Session < ActiveRecord::Base
                    'cspId' => c_r.resource_id }
         vms << params.merge(c_r.credential_fields_hash)
       else
+        billing_report(c_r)
+        if c_r.contracting_method == 'platform'
+        endpoint_hash = {
+            'cloudbrokerEndpoint' => Setting.value('platform_url'),
+            'cloudbrokerUsername' => user.try(&:platform_email),
+            'cloudbrokerPassword' => user.try(&:platform_password)
+        }
+        elsif c_r.contracting_method == 'direct'
+          endpoint_hash = {
+            'directEndpoint' => 'https://console.aws.amazon.com/',
+            'directUsername' => user.try(&:direct_email),
+            'directPassword' => user.try(&:direct_password)
+          }
+          user.drop_creds
+        end
         vms << c_r.virtual_machine.description.merge(endpoint_hash)
       end
     end
-
     {'virtualMachines' => vms}
   end
+
+  def billing_report(c_r)
+    acsmi_creds = {email: user.email, crypted_password: user.crypted_password, password_salt: user.password_salt, full_name: user.full_name, organization: user.organization, address: user.address}
+    contracting_resource = {contract_id: c_r.contract_id, service_id: c_r.service_id, service_name: c_r.service_name, resource_id: c_r.resource_id,
+                            resource_name: c_r.resource_name, contracting_method: c_r.contracting_method}
+    contracting_price = {creation_cost: 2}
+    if c_r.contracting_method == 'platform'
+      contracting_creds = { email: user.try(&:platform_email),
+                            password: user.try(&:platform_password),
+                            platform_id: user.try(&:platform_id) }
+    elsif c_r.contracting_method == 'direct'
+      contracting_creds = {email: 'direct@cloudbrocke.com', password: 'password'}
+    end
+    BillingReporter.create_contract(acsmi_creds, contracting_resource, contracting_creds, contracting_price)
+  end
 end
\ No newline at end of file
diff --git a/ACSmI/Contracting/app/models/setting.rb b/ACSmI/Contracting/app/models/setting.rb
index 1604a80727f636a0af87a4b51aa6f468ad6fca48..31a1949dd08f182a855ca8f4bad26363543cc6e1 100644
--- a/ACSmI/Contracting/app/models/setting.rb
+++ b/ACSmI/Contracting/app/models/setting.rb
@@ -1,16 +1,16 @@
-class Setting < ActiveRecord::Base
-  validates :key, presence: true, uniqueness: true
-  validates :encrypted_value, presence: true
-
-  attr_encrypted :value, key: "\xEF\x83\xD4d\xAAC\x1F\x15\xC9_q\x10\b\x01\x903|\x11=\xE4\x82H\ntX\x96\x98\xD1c\x8D0H"
-
-  def self.value(key, new_value = nil)
-    if new_value
-      setting = Setting.first_or_initialize(key: key)
-      setting.value = new_value
-      setting.save!
-    else
-      Setting.where(key: key).first.value
-    end
-  end
+class Setting < ActiveRecord::Base
+  validates :key, presence: true, uniqueness: true
+  validates :encrypted_value, presence: true
+
+  attr_encrypted :value, key: "\xEF\x83\xD4d\xAAC\x1F\x15\xC9_q\x10\b\x01\x903|\x11=\xE4\x82H\ntX\x96\x98\xD1c\x8D0H"
+
+  def self.value(key, new_value = nil)
+    if new_value
+      setting = Setting.first_or_initialize(key: key)
+      setting.value = new_value
+      setting.save!
+    else
+      Setting.where(key: key).first.value
+    end
+  end
 end
\ No newline at end of file
diff --git a/ACSmI/Contracting/app/models/user.rb b/ACSmI/Contracting/app/models/user.rb
index 0d979ce95348a731f0786c4f37507b43a8105e19..108b336ac2b468386222d35f85cc651dcee186c5 100644
--- a/ACSmI/Contracting/app/models/user.rb
+++ b/ACSmI/Contracting/app/models/user.rb
@@ -7,12 +7,27 @@ class User < ActiveRecord::Base
   attr_accessor :accept_terms
 
   validates :email, presence: true, uniqueness: true
-  validates :full_name, presence: true
   validate :usage_terms_accepted, on: :create
+  validates :organization, :country, :city, :address, :zipcode, :full_name, presence: true
 
   attr_encrypted :platform_email, key: "211aae60391b4152ad4690ce4aa89d8c"
   attr_encrypted :platform_password, key: "2694536f973b4e5faab7e4f6e8e4d427"
 
+  attr_encrypted :direct_email, key: "211aae60391b4152ad4690ce4aa89d8c"
+  attr_encrypted :direct_password, key: "2694536f973b4e5faab7e4f6e8e4d427"
+
+  def register_direct_user(email, password)
+    self.direct_email = email
+    self.direct_password = password
+    self.save
+  end
+
+  def drop_creds
+    self.direct_email = nil
+    self.direct_password = nil
+    self.save
+  end
+
   def register_plaform_user
     self.platform_email = "acsmi-#{SecureRandom.hex(10)}@cloudbroker.com"
     self.platform_password = SecureRandom.hex(12)
diff --git a/ACSmI/Contracting/app/models/user_session.rb b/ACSmI/Contracting/app/models/user_session.rb
index f84c599f60a8947c463f292d94d3e7efed0bb232..bcae102b2ae7f27b1526fdf9b059d1aa825119c1 100644
--- a/ACSmI/Contracting/app/models/user_session.rb
+++ b/ACSmI/Contracting/app/models/user_session.rb
@@ -1,3 +1,3 @@
-class UserSession < Authlogic::Session::Base
-
+class UserSession < Authlogic::Session::Base
+
 end
\ No newline at end of file
diff --git a/ACSmI/Contracting/app/models/virtual_machine.rb b/ACSmI/Contracting/app/models/virtual_machine.rb
index d209dd32a2eae09fff40e90e2a1fa55992970e67..6359732f2d86f590001f2316c2d36dcad44bf49a 100644
--- a/ACSmI/Contracting/app/models/virtual_machine.rb
+++ b/ACSmI/Contracting/app/models/virtual_machine.rb
@@ -5,18 +5,35 @@ class VirtualMachine < ActiveRecord::Base
     it_data = PlatformConnector.instance_type_data(instance_type_id)
     service = Service.new(contracting_resource.service_id)
 
-    { 'id' => contracting_resource.index.to_s,
-      'cspName' => service.attributes['Provider'][:human],
-      'cspId' => service.attributes['Provider'][:value],
-      'ram' =>  it_data['memory'].to_i,
-      'cores' => it_data['cpus'].to_i * it_data['cpu_cores'].to_i,
-      'storage' => it_data['instance-storage'].to_i,
-      'image' => image,
-      'vmSoftwareId' => software_id,
-      'vmResourceId' => contracting_resource.resource_id,
-      'vmRegionId' => region_id,
-      'instanceTypeId' => instance_type_id,
-      'keyPairId' => contracting_resource.session.user.try(:key_pair_id)
-    }
+    if contracting_resource.contracting_method == 'platform'
+      { 'id' => contracting_resource.index.to_s,
+        'cspName' => service.attributes['Provider'][:human],
+        'cspId' => service.attributes['Provider'][:value],
+        'ram' =>  it_data['memory'].to_i,
+        'cores' => it_data['cpus'].to_i * it_data['cpu_cores'].to_i,
+        'storage' => it_data['instance-storage'].to_i,
+        'image' => image,
+        'vmSoftwareId' => software_id,
+        'vmResourceId' => contracting_resource.resource_id,
+        'vmRegionId' => region_id,
+        'instanceTypeId' => instance_type_id,
+        'keyPairId' => contracting_resource.session.user.try(:key_pair_id)
+      }
+    elsif contracting_resource.contracting_method == 'direct'
+      image_id = PlatformConnector.image_getter(software_id, region_id, instance_type_id)
+      { 'id' => contracting_resource.index.to_s,
+        'cspName' => service.attributes['Provider'][:human],
+        'cspId' => service.attributes['Provider'][:value],
+        'ram' =>  it_data['memory'].to_i,
+        'cores' => it_data['cpus'].to_i * it_data['cpu_cores'].to_i,
+        'storage' => it_data['instance-storage'].to_i,
+        'image' => image,
+        'vmSoftwareId' => image_id,
+        'vmResourceId' => image_id,
+        'vmRegionId' => image_id,
+        'instanceTypeId' => image_id,
+        'keyPairId' => contracting_resource.session.user.try(:key_pair_id)
+      }
+    end
   end
 end
\ No newline at end of file
diff --git a/ACSmI/Contracting/app/resource_solver/amazon_aws_auto_registrator.rb b/ACSmI/Contracting/app/resource_solver/amazon_aws_auto_registrator.rb
new file mode 100644
index 0000000000000000000000000000000000000000..a285e2f64548fbdde7fecc3868e5101c61803823
--- /dev/null
+++ b/ACSmI/Contracting/app/resource_solver/amazon_aws_auto_registrator.rb
@@ -0,0 +1,121 @@
+class AmazonAwsAutoRegistrator
+  attr_accessor :fields_for_step1, :next_page, :creds_data, :resource_name, :validation_errors, :user_data
+  AMAZON_SIGN_UP_LINK = 'https://portal.aws.amazon.com/billing/signup#/start'
+  CHARACTERS_FOR_PASSWORD =['!','@','#','$','%','^','&','*','+','=','[',']','{','}','|']
+  SELECT_DATE1 = [["01", 0], ["02", 1], ["03", 2], ["04", 3], ["05", 4], ["06", 5], ["07", 6], ["08", 7], ["09", 8], ["10", 9], ["11", 10], ["12", 11]]
+  SELECT_DATE2 = [["2019", 0], ["2020", 1], ["2021", 2], ["2022", 3], ["2023", 4], ["2024", 5], ["2025", 6], ["2026", 7], ["2027", 8], ["2028", 9], ["2029", 10], ["2030", 11]]
+  SELECT_COUNTRY = [["Afghanistan", 0], ["Aland Islands", 1], ["Albania", 2], ["Algeria", 3], ["American Samoa", 4], ["Andorra", 5], ["Angola", 6], ["Anguilla", 7], ["Antarctica", 8], ["Antigua and Barbuda", 9], ["Argentina", 10], ["Armenia", 11], ["Aruba", 12], ["Australia", 13], ["Austria", 14], ["Azerbaijan", 15], ["Bahamas, The", 16], ["Bahrain", 17], ["Bangladesh", 18], ["Barbados", 19], ["Belarus", 20], ["Belgium", 21], ["Belize", 22], ["Benin", 23], ["Bermuda", 24], ["Bhutan", 25], ["Bolivia", 26], ["Bonaire, Saint Eustatius and Saba", 27], ["Bosnia and Herzegovina", 28], ["Botswana", 29], ["Bouvet Island", 30], ["Brazil", 31], ["British Indian Ocean Territory", 32], ["Brunei Darussalam", 33], ["Bulgaria", 34], ["Burkina Faso", 35], ["Burundi", 36], ["Cambodia", 37], ["Cameroon", 38], ["Canada", 39], ["Cape Verde", 40], ["Cayman Islands", 41], ["Central African Republic", 42], ["Chad", 43], ["Chile", 44], ["China", 45], ["Christmas Island", 46], ["Cocos (Keeling) Islands", 47], ["Colombia", 48], ["Comoros", 49], ["Congo", 50], ["Congo, The Democratic Republic of the", 51], ["Cook Islands", 52], ["Costa Rica", 53], ["Cote D'ivoire", 54], ["Croatia", 55], ["Curaçao", 56], ["Cyprus", 57], ["Czech Republic", 58], ["Denmark", 59], ["Djibouti", 60], ["Dominica", 61], ["Dominican Republic", 62], ["Ecuador", 63], ["Egypt", 64], ["El Salvador", 65], ["Equatorial Guinea", 66], ["Eritrea", 67], ["Estonia", 68], ["Ethiopia", 69], ["Falkland Islands (Malvinas)", 70], ["Faroe Islands", 71], ["Fiji", 72], ["Finland", 73], ["France", 74], ["French Guiana", 75], ["French Polynesia", 76], ["French Southern Territories", 77], ["Gabon", 78], ["Gambia, The", 79], ["Georgia", 80], ["Germany", 81], ["Ghana", 82], ["Gibraltar", 83], ["Greece", 84], ["Greenland", 85], ["Grenada", 86], ["Guadeloupe", 87], ["Guam", 88], ["Guatemala", 89], ["Guernsey", 90], ["Guinea", 91], ["Guinea-Bissau", 92], ["Guyana", 93], ["Haiti", 94], ["Heard Island and the McDonald Islands", 95], ["Holy See", 96], ["Honduras", 97], ["Hong Kong", 98], ["Hungary", 99], ["Iceland", 100], ["India", 101], ["Indonesia", 102], ["Iraq", 103], ["Ireland", 104], ["Isle of Man", 105], ["Israel", 106], ["Italy", 107], ["Jamaica", 108], ["Japan", 109], ["Jersey", 110], ["Jordan", 111], ["Kazakhstan", 112], ["Kenya", 113], ["Kiribati", 114], ["Korea, Republic of", 115], ["Kuwait", 116], ["Kyrgyzstan", 117], ["Lao People's Democratic Republic", 118], ["Latvia", 119], ["Lebanon", 120], ["Lesotho", 121], ["Liberia", 122], ["Libya", 123], ["Liechtenstein", 124], ["Lithuania", 125], ["Luxembourg", 126], ["Macao", 127], ["Macedonia, The Former Yugoslav Republic of", 128], ["Madagascar", 129], ["Malawi", 130], ["Malaysia", 131], ["Maldives", 132], ["Mali", 133], ["Malta", 134], ["Marshall Islands", 135], ["Martinique", 136], ["Mauritania", 137], ["Mauritius", 138], ["Mayotte", 139], ["Mexico", 140], ["Micronesia, Federated States of", 141], ["Moldova, Republic of", 142], ["Monaco", 143], ["Mongolia", 144], ["Montenegro", 145], ["Montserrat", 146], ["Morocco", 147], ["Mozambique", 148], ["Myanmar", 149], ["Namibia", 150], ["Nauru", 151], ["Nepal", 152], ["Netherlands", 153], ["New Caledonia", 154], ["New Zealand", 155], ["Nicaragua", 156], ["Niger", 157], ["Nigeria", 158], ["Niue", 159], ["Norfolk Island", 160], ["Northern Mariana Islands", 161], ["Norway", 162], ["Oman", 163], ["Pakistan", 164], ["Palau", 165], ["Palestinian Territories", 166], ["Panama", 167], ["Papua New Guinea", 168], ["Paraguay", 169], ["Peru", 170], ["Philippines", 171], ["Pitcairn", 172], ["Poland", 173], ["Portugal", 174], ["Puerto Rico", 175], ["Qatar", 176], ["Reunion", 177], ["Romania", 178], ["Russian Federation", 179], ["Rwanda", 180], ["Saint Barthelemy", 181], ["Saint Helena, Ascension and Tristan da Cunha", 182], ["Saint Kitts and Nevis", 183], ["Saint Lucia", 184], ["Saint Martin", 185], ["Saint Pierre and Miquelon", 186], ["Saint Vincent and the Grenadines", 187], ["Samoa", 188], ["San Marino", 189], ["Sao Tome and Principe", 190], ["Saudi Arabia", 191], ["Senegal", 192], ["Serbia", 193], ["Seychelles", 194], ["Sierra Leone", 195], ["Singapore", 196], ["Sint Maarten", 197], ["Slovakia", 198], ["Slovenia", 199], ["Solomon Islands", 200], ["Somalia", 201], ["South Africa", 202], ["South Georgia and the South Sandwich Islands", 203], ["South Sudan", 204], ["Spain", 205], ["Sri Lanka", 206], ["Suriname", 207], ["Svalbard and Jan Mayen", 208], ["Swaziland", 209], ["Sweden", 210], ["Switzerland", 211], ["Taiwan", 212], ["Tajikistan", 213], ["Tanzania, United Republic of", 214], ["Thailand", 215], ["Timor-leste", 216], ["Togo", 217], ["Tokelau", 218], ["Tonga", 219], ["Trinidad and Tobago", 220], ["Tunisia", 221], ["Turkey", 222], ["Turkmenistan", 223], ["Turks and Caicos Islands", 224], ["Tuvalu", 225], ["Uganda", 226], ["Ukraine", 227], ["United Arab Emirates", 228], ["United Kingdom", 229], ["United States", 230], ["United States Minor Outlying Islands", 231], ["Uruguay", 232], ["Uzbekistan", 233], ["Vanuatu", 234], ["Venezuela", 235], ["Vietnam", 236], ["Virgin Islands, British", 237], ["Virgin Islands, U.S.", 238], ["Wallis and Futuna", 239], ["Western Sahara", 240], ["Yemen", 241], ["Zambia", 242], ["Zimbabwe", 243]]
+
+  def initialize
+    @resource_name = 'amazon' #'Amazon EC2 CloudBroker GmbH'
+    @sms_code = true
+  end
+
+  def self.generate_fields
+    @fields_for_amazon_registration = {
+      label_email: 'f.label :email',
+      input_email: 'f.text_field :email, id: "email_id", value: @session.user.email, maxlength: "50", placeholder: "write your email", class: "multiple_text_field form-control"',
+      label_phone_number: 'f.label :phone_number',
+      input_phone_number: 'f.text_field :phone_number, id: "phone_id", placeholder: "write your phone number", class: "multiple_text_field form-control"',
+      label_card_number: 'f.label :card_number',
+      input_card_number: 'f.text_field :card_number, id: "card_id", placeholder: "write your card number", class: "multiple_text_field form-control"',
+      label_date1: 'f.label :month',
+      select_date1: "f.select :date1, #{SELECT_DATE1}",
+      label_date2: 'f.label :year',
+      select_date2: "f.select :date2, #{SELECT_DATE2}",
+      label_hilder_name: 'f.label :card_holder_name',
+      input_holder_name: 'f.text_field :card_holder_name, id: "card_holder_id", maxlength: "50", placeholder: "write holder\'s name", class: "multiple_text_field form-control"',
+      label_country: 'f.label :country',
+      select_country: "f.select :country, #{SELECT_COUNTRY}",
+      label_city: 'f.label :city',
+      input_city: 'f.text_field :city, id: "city_id", maxlength: "50", placeholder: "write your city", class: "multiple_text_field form-control"',
+      label_state: 'f.label "State / Province or region"',
+      input_state: 'f.text_field :state, id: "state_id", maxlength: "50", placeholder: "write your state", class: "multiple_text_field form-control"',
+      label_postal: 'f.label :postal_code',
+      input_postal: 'f.text_field :postal_code, id: "postal_id", maxlength: "20", placeholder: "write your postal code", class: "multiple_text_field form-control"',
+      agreement: 'f.check_box "agreement", id: "agreement"',
+      link_agreement: "link_to 'AWS Customer Agreement', '#{ResourceInfo.last.amazon_customer_agreement_link}', target: :_blank",
+      submit: 'f.button "Create account", class: "btn btn-primary", id: "submit-form", style: "display:none;"',
+      hidden_object: 'hidden_field_tag :resource_name, "amazon", id: "resource_name"'
+    }
+  end
+
+  def send_fields_to_resource(fields, session)
+    begin
+    user = session.user
+    @user_data = fields
+    @next_page = false
+    password = SecureRandom.hex(12)
+    password[rand(24)] = CHARACTERS_FOR_PASSWORD[rand(15)]
+    browser = Watir::Browser.new :chrome, headless: true, args: ['--no-sandbox']
+
+    browser.goto(AMAZON_SIGN_UP_LINK)
+    browser.input(name: 'ccEmail').when_present.send_keys(fields[:email])
+    browser.input(name: 'ccPassword').when_present.send_keys(password)
+    browser.input(name: 'ccRePassword').when_present.send_keys(password)
+    browser.input(name: 'ccUserName').when_present.send_keys(user.full_name)
+    browser.element(name: 'submit').when_present.click
+    begin
+      Watir::Wait.until(timeout: 20) { browser.element(name: 'company').exist? }
+    rescue Exception => ex
+      @validation_errors = 'Please enter a valid email address.'
+      error = browser.element(class: 'header-error-msg-text').span(class: 'ng-scope')
+      @validation_errors = error.text if error.present?
+      browser.close
+    end
+
+    if browser.exists?
+      @creds_data = "#{fields[:email]},#{password}"
+    if browser.element(name: 'company').exist?
+      browser.input(name: 'company').when_present.send_keys(user.organization)
+      browser.input(name: 'phoneNumber').when_present.send_keys(fields[:phone_number])
+      browser.select_list(:id, 'country').when_present.select fields[:country]
+      browser.input(name: 'addressLine1').when_present.send_keys(user.address)
+      browser.input(name: 'city').when_present.send_keys(fields[:city])
+      browser.input(name: 'state').when_present.send_keys(fields[:state])
+      browser.input(name: 'postalCode').when_present.send_keys(fields[:postal_code])
+      browser.element(name: 'agreementAccepted').when_present.click
+      agreement = browser.element(class: 'margin-left-40').span(class: 'ng-scope').span(class: 'ng-scope').a.href
+      resource_info = ResourceInfo.last
+      resource_info.amazon_customer_agreement_link = agreement
+      resource_info.save
+      browser.element(name: 'submit').when_present.click
+      begin
+        Watir::Wait.until(timeout: 20) { browser.element(name: 'credit-card-number').exist? }
+      rescue Exception => ex
+        @validation_errors = 'Please enter a valid phone number.'
+        error = browser.element(class: 'header-error-msg-text').span(class: 'ng-scope')
+        @validation_errors = error.text if error.present?
+        browser.close
+      end
+    end
+    end
+
+    if browser.exists?
+    if browser.element(name: 'credit-card-number').exist?
+      browser.element(name: 'credit-card-number').when_present.send_keys(fields[:card_number])
+      browser.select_list(:name, 'expirationMonth').when_present.select fields[:date1]
+      browser.select_list(:name, 'expirationYear').when_present.select fields[:date2]
+      browser.element(name: 'accountHolderName').when_present.send_keys(fields[:card_holder_name])
+      browser.element(:class, 'a-button-inner').when_present.click
+      begin
+       Watir::Wait.until(timeout: 20) { browser.select_list(:name, 'countryCode').exist? }
+       @next_page = true
+       @sms_code = nil
+       browser.close
+      rescue Exception => ex
+        @validation_errors = 'Please enter a valid credit card information.'
+        error = browser.element(class: 'header-error-msg-text').span(class: 'ng-scope')
+        @validation_errors = error.text if error.present?
+        browser.close
+      end
+    end
+    end
+
+    rescue Exception => ex
+      browser.close
+      @validation_errors = 'Sorry, there was an error processing your request. Please try again and if the error persists, contact ACSmI customer support.'
+    end
+  end
+
+end
diff --git a/ACSmI/Contracting/app/resource_solver/auto_registration_accessor.rb b/ACSmI/Contracting/app/resource_solver/auto_registration_accessor.rb
new file mode 100644
index 0000000000000000000000000000000000000000..867a768b044107390b1fb252c69eafbcd7257c8e
--- /dev/null
+++ b/ACSmI/Contracting/app/resource_solver/auto_registration_accessor.rb
@@ -0,0 +1,28 @@
+class AutoRegistrationAccessor
+  ALLOWED_PROVIDERS = ['amazon ec2', 'ams3', 'amdb', 'amazon', 'amaz']
+  AMAZON_PROVIDER = ['amazon ec2', 'ams3', 'amdb', 'amazon', 'amaz']
+
+  def self.fields_for(resource)
+    resource_solver(resource).generate_fields
+  end
+
+
+  def self.resource_solver(resource)
+    class_name = if AMAZON_PROVIDER.include? resource
+                   AmazonAwsAutoRegistrator
+                 end
+    class_name
+  end
+
+  def self.object_for(resource_name)
+    class_object = case resource_name
+    when 'amazon'
+      AmazonAwsAutoRegistrator.new
+    end
+    class_object
+  end
+
+  def self.check_existence(resource_name)
+    ALLOWED_PROVIDERS.include? resource_name
+  end
+end
\ No newline at end of file
diff --git a/ACSmI/Contracting/app/service/prepare_resource_and_vm.rb b/ACSmI/Contracting/app/service/prepare_resource_and_vm.rb
index 68d58765e211c7503be1464b0e03665d32bbbadc..8279012d21bf4664a70b6d5c96432ac8a3fa2297 100644
--- a/ACSmI/Contracting/app/service/prepare_resource_and_vm.rb
+++ b/ACSmI/Contracting/app/service/prepare_resource_and_vm.rb
@@ -39,18 +39,22 @@ class PrepareResourceAndVM
                                          service.attribute('Optimized for')
     )
 
+=begin
     if mapper_response['resource_id']
+      software_to_use = DEFAULT_VM_DATA[:software]
+
       @contracting_resource.resource_id = mapper_response['resource_id']
       @contracting_resource.resource_name = PlatformConnector.resource(@contracting_resource.resource_id).try(:[], 'name')
       @contracting_resource.build_virtual_machine(region_id: mapper_response['region_id'],
                                                   instance_type_id: mapper_response['instance_type_id'],
-                                                  software_id: '21b7ebed-5076-43b6-8351-0e06cf16eedc',
-                                                  image: 'Ubuntu 16.04')
+                                                  software_id: software_to_use[:id],
+                                                  image: software_to_use[:image])
     else
       # temp stub, use default value in case anything goes wrong
       @contracting_resource.use_default_data
     end
-
+=end
+    @contracting_resource.use_default_data
     @contracting_resource.save!
   end
 
diff --git a/ACSmI/Contracting/app/views/information/usage_terms.html.haml b/ACSmI/Contracting/app/views/information/usage_terms.html.haml
index 681a64d76735322b7ea6f57fc624d701aac90d3c..5e996c6c8045f85f935bf015073bba5bcfb5e3c7 100644
--- a/ACSmI/Contracting/app/views/information/usage_terms.html.haml
+++ b/ACSmI/Contracting/app/views/information/usage_terms.html.haml
@@ -1,4 +1,4 @@
-.terms-info
-  %h2 Terms
-
+.terms-info
+  %h2 Terms
+
   Terms pending.
\ No newline at end of file
diff --git a/ACSmI/Contracting/app/views/resource_registration/notify_data.html.haml b/ACSmI/Contracting/app/views/resource_registration/notify_data.html.haml
new file mode 100644
index 0000000000000000000000000000000000000000..3d8a06a776108b5b02b9a23cefc2f041e4deee4c
--- /dev/null
+++ b/ACSmI/Contracting/app/views/resource_registration/notify_data.html.haml
@@ -0,0 +1,47 @@
+.card
+  .card-header{ data: { 'background-color' => 'primary' } }
+    %h4.title Your data for resource
+    %p.category As a next step you need store this data
+
+  .card-content
+
+    %h3  Please follow the  #{link_to raw("<strong>sign in link</strong>"), ResourceInfo.last.amazon_sign_in_link, target: :_blank} to complete AWS account registration
+
+
+
+
+    %p
+    Login:
+    %p
+      .panel-group.tryout-acsmi
+      .panel.panel-default
+        <a id="login"><strong>#{@data.split(',').first}</strong></a>
+        <a id="loginCopy" class="material-icons" title = "copy">file_copy</a>
+    %p
+    Password:
+    %p
+      .panel-group.tryout-acsmi
+      .panel.panel-default
+        <a id="password"><strong>#{@data.split(',').last}</strong></a>
+        <a id="passwordCopy" class="material-icons" title = "copy">file_copy</a>
+
+    = link_to "Proceed", setup_contracting_session_path(@session, method: 'direct'), class: "btn btn-primary"
+= hidden_field_tag :session_id, @session.id
+
+:javascript
+  if(performance.navigation.type == 2){
+    $.ajax({type: "POST", url: '/registration_steps/' + $('#session_id').val()})}
+
+
+
+        function copyToClipboard(id) {
+          var $temp = $("<input>");
+          $("body").append($temp);
+          $temp.val($(id).text()).select();
+          console.log($(id).val().text);
+          document.execCommand("copy");
+          $temp.remove();
+        }
+
+        document.querySelector('a.material-icons#passwordCopy').addEventListener("click", function() { copyToClipboard('#password') });
+        document.querySelector('a.material-icons#loginCopy').addEventListener("click", function() { copyToClipboard('#login') });
\ No newline at end of file
diff --git a/ACSmI/Contracting/app/views/resource_registration/step1.html.haml b/ACSmI/Contracting/app/views/resource_registration/step1.html.haml
new file mode 100644
index 0000000000000000000000000000000000000000..6c5c03f55803ba1b53d26d4c16ec7abd10fafba4
--- /dev/null
+++ b/ACSmI/Contracting/app/views/resource_registration/step1.html.haml
@@ -0,0 +1,79 @@
+.card
+  .card-header{ data: { 'background-color' => 'primary' } }
+    %h4.title Resource registration
+    %p.category As a next step you need fill in the registration fields
+  .contracter-container{style: "display: none;"}
+    .contracter-body
+      %h3.form-header= "Please wait while we are creating an account for you"
+      %p.contract-spinner
+        %i.fa.fa-spinner.fa-spin
+        %span{id: 'loading-text'}
+          Creating an account...
+
+  .card-content
+    .jumbotron
+      %h5 Your card details (the number and the expiry date) are not stored by ACSmI, but will be used at the side of the cloud provider.
+    = form_for(:resource_fields, url: send_fields_to_resource_path(@session)) do |f|
+      .alert.alert-danger{id: 'error_message', style: "display: none;"}
+        %p{id: 'errors', style: "display: none;"}
+      - @fields.each_slice(2) do |key, key2|
+        .form-group
+          = eval(@fields[key[0]])
+          = eval(@fields[key2[0]])
+    = button_tag 'create account', class: "btn btn-primary", id: "submit"
+= hidden_field_tag :session_id, @session.id
+
+
+:javascript
+          if(performance.navigation.type == 2){
+            $.ajax({type: "POST", url: '/registration_steps/' + $('#session_id').val()})}
+
+          $("#submit-form").prop('disabled', true)
+          $("#submit").on("click", function () {
+          $("#errors").html("").hide(); $("#error_message").hide();
+          if (validationForAmazon() == ''){
+          page_loader($(".card-content"), $(".contracter-container"))
+          $("#submit").prop('disabled', true)
+          $("#submit-form").prop('disabled', false)
+          $("#submit-form").click()
+          $("#submit-form").prop('disabled', true)}
+          else{
+          $(window).scrollTop(0);
+          $("#errors").html(validationForAmazon()).show()
+          $("#error_message").show(300)
+          $("#submit").prop('disabled', false)}
+            })
+
+        function validationForAmazon(){
+        var errors = ''
+        var number_filter = /^\d*$/;
+        var year = document.getElementById("resource_fields_date2");
+        if ($("#email_id").val().length == 0) errors += "Email can't be blank! <br>"
+        if ($("#phone_id").val().match(number_filter)){}else{errors += "Phone number must contain only digits! <br>"}
+        if ($("#phone_id").val().length == 0 ) errors += "Phone number can't be blank! <br>"
+        if ($("#phone_id").val().length > 13) errors += 'Invalid phone number. Character limit exceeded(maximum is 13 characters)! <br>'
+        if ($("#card_id").val().match(number_filter)){}else{errors += "Card number must contain only digits! <br>"}
+        if ($("#card_id").val().length < 11 ) errors += 'Card number is too short (minimum is 12 characters)! <br>'
+        if ($("#card_id").val().length > 19) errors += 'Invalid card number. Character limit exceeded(maximum is 19 characters)! <br>'
+        if (year.options[year.selectedIndex].text == new Date().getFullYear()){
+          if ($("#resource_fields_date1").val() < new Date().getMonth()) errors += 'Invalid month/year for credit card! <br>'}
+        if (($("#card_id").val().match(number_filter)) && ($("#card_id").val().length > 10) && ($("#card_id").val().length < 20)){
+          if (algorithmLuna($("#card_id").val().replace(/\s/g, "").split("").reverse().join(""))){}
+        else{errors += 'Invalid credit card number! <br>'}}
+        if ($("#card_holder_id").val().length == 0) errors += "Card holder name can't be blank! <br>"
+        if ($("#city_id").val().length == 0) errors += "City can't be blank! <br>"
+        if ($("#state_id").val().length == 0) errors += "State can't be blank! <br>"
+        if ($("#postal_id").val().length == 0) errors += "Postal code can't be blank! <br>";
+        if ($("#agreement").is(':checked') == false) errors += "Please confirm license agreement! <br>"
+        return errors}
+
+        function algorithmLuna(card_number){
+          var sum = 0
+          for (i = 0; i < card_number.length; i ++){
+          if (i%2 == 1){ even = parseInt(card_number[i]) * 2
+            if (even > 9) even -= 9; sum += even}
+            else{sum += parseInt(card_number[i])}
+          }
+          if (sum%10 == 0) return true
+          else return false
+        }
\ No newline at end of file
diff --git a/ACSmI/Contracting/app/views/sessions/platform_or_direct.html.haml b/ACSmI/Contracting/app/views/sessions/platform_or_direct.html.haml
new file mode 100644
index 0000000000000000000000000000000000000000..cf68a2f480e436dd9f88dad3df89cf2d1f8ff1f5
--- /dev/null
+++ b/ACSmI/Contracting/app/views/sessions/platform_or_direct.html.haml
@@ -0,0 +1,32 @@
+.card
+  .card-header{ data: { 'background-color' => 'primary' } }
+    %h4.title CloudBroker Platform / Direct
+    %p.category As a next step you need choose a contracting method
+
+  .card-content
+    = radio_button_tag :platform, 'platform', checked: true
+    Registration through CloudBroker Platform
+    %p
+    = radio_button_tag :platform, 'direct'
+    Direct registration for
+    = @contracting_resource.provider_name
+    %p
+    = button_tag(:proceed, type: 'button', class: 'btn btn-primary', id: 'submit-button')
+    = link_to 'platform', setup_contracting_session_path(@session, method: 'platform'), style: "display:none;", id: 'platform'
+    = link_to 'direct', resource_step1_path(@contracting_resource.provider.downcase, @session), style: "display:none;", id: 'direct'
+= hidden_field_tag :session_id, @session.id
+= hidden_field_tag :step, @step
+
+:javascript
+  if(performance.navigation.type == 2){
+          $.ajax({type: "POST", url: '/registration_steps/' + $('#session_id').val()})}
+
+  $(document).ready(function(){
+
+    $('#submit-button').click(function () {
+       var platform = $('#platform_platform').is(":checked")
+       if (platform)
+       document.getElementById('platform').click()
+       else document.getElementById('direct').click()
+     })
+     })
\ No newline at end of file
diff --git a/ACSmI/Contracting/app/views/sessions/setup_contracting.html.haml b/ACSmI/Contracting/app/views/sessions/setup_contracting.html.haml
index b18c4dd8380630cc461fe0d1e4060d02d06c2bc4..4b760e3ccc8da185ecdf77df789ae598776fe748 100644
--- a/ACSmI/Contracting/app/views/sessions/setup_contracting.html.haml
+++ b/ACSmI/Contracting/app/views/sessions/setup_contracting.html.haml
@@ -6,6 +6,10 @@
       %span{id: 'loading-text'}
         Checking for existing contracts..
 = hidden_field_tag :session_id, @session.id
+= hidden_field_tag :method, @method
+
+
+
 
 
 :javascript
@@ -19,8 +23,13 @@
             redirectToNext();
           } else {
             $("#loading-text").text('Setting up a new contract..');
+            var method = $('#method').val()
             $.ajax({
               url: '/sessions/' + $('#session_id').val() + '/prepare_new_contract',
+              data:
+                    {
+                        method
+                    },
               dataType: 'json',
               method: 'post',
               success: function(json) {
@@ -36,4 +45,4 @@
     window.location = '/sessions?session_id=' + $('#session_id').val();
   }
 
-  checkExistingContract();
\ No newline at end of file
+  checkExistingContract();
diff --git a/ACSmI/Contracting/app/views/sessions/start_contracting.html.haml b/ACSmI/Contracting/app/views/sessions/start_contracting.html.haml
index 17f28a5996cdb109029928377eff55020afa0c8d..7a3a8d120010c0927998b71862c07c2fe7a2ed6a 100644
--- a/ACSmI/Contracting/app/views/sessions/start_contracting.html.haml
+++ b/ACSmI/Contracting/app/views/sessions/start_contracting.html.haml
@@ -9,6 +9,7 @@
     .form-container
       = form_for @user_session, url: sign_in_url, class: 'form-inline' do |f|
         = hidden_field_tag 'session_id', @session.id
+        = hidden_field_tag 'have_credentials', params[:have_credentials]
         .form-group
           %label
             = radio_button_tag 'have_account', true, @have_account, id: 'sign-in'
@@ -57,9 +58,18 @@
               .form-group
                 = ff.label :organization
                 = ff.text_field :organization, class: 'form-control'
+              .form-group
+                = ff.label :country
+                = ff.country_select :country, class: 'form-control'
+              .form-group
+                = ff.label :city
+                = ff.text_field :city, class: 'form-control'
               .form-group
                 = ff.label :address
                 = ff.text_field :address, class: 'form-control'
+              .form-group
+                = ff.label :zipcode
+                = ff.text_field :zipcode, class: 'form-control'
               .form-group
                 = ff.check_box :accept_terms
                 I accept
diff --git a/ACSmI/Contracting/app/views/user_sessions/new.html.haml b/ACSmI/Contracting/app/views/user_sessions/new.html.haml
index 8e4f65bd0b5e7ed2670b2932fe2da6befcef8d11..0a34a6e945b95d28016cffcbfc1abcea00d38f99 100644
--- a/ACSmI/Contracting/app/views/user_sessions/new.html.haml
+++ b/ACSmI/Contracting/app/views/user_sessions/new.html.haml
@@ -1,23 +1,23 @@
-.form-container
-  %h3.form-header Please sign in
-
-  = form_for @user_session, url: sign_in_url do |f|
-    = hidden_field_tag :sign_in, true
-
-    - if @user_session.errors.any?
-      .alert.alert-danger
-        %a{class: 'close', data: { dismiss: 'alert' } } &times;
-        %h4= "#{pluralize(@user_session.errors.count, 'error')} occured:"
-        %ul
-          - @user_session.errors.full_messages.each do |msg|
-            %li= msg
-
-    .form-group
-      %label Email
-      = f.email_field :email, class: 'form-control'
-    .form-group
-      %label Password
-      = f.password_field :password, class: 'form-control'
-    .form-group
-      = link_to 'Back', '/', class: 'btn btn-default'
+.form-container
+  %h3.form-header Please sign in
+
+  = form_for @user_session, url: sign_in_url do |f|
+    = hidden_field_tag :sign_in, true
+
+    - if @user_session.errors.any?
+      .alert.alert-danger
+        %a{class: 'close', data: { dismiss: 'alert' } } &times;
+        %h4= "#{pluralize(@user_session.errors.count, 'error')} occured:"
+        %ul
+          - @user_session.errors.full_messages.each do |msg|
+            %li= msg
+
+    .form-group
+      %label Email
+      = f.email_field :email, class: 'form-control'
+    .form-group
+      %label Password
+      = f.password_field :password, class: 'form-control'
+    .form-group
+      = link_to 'Back', '/', class: 'btn btn-default'
       = f.submit 'Sign In', class: 'btn btn-primary'
\ No newline at end of file
diff --git a/ACSmI/Contracting/app/views/welcome/index.html.haml b/ACSmI/Contracting/app/views/welcome/index.html.haml
index 01d89a5f267636f11e785ba307b545a552f67433..07baacf6b5171436661565f4be7618ec03d5b383 100644
--- a/ACSmI/Contracting/app/views/welcome/index.html.haml
+++ b/ACSmI/Contracting/app/views/welcome/index.html.haml
@@ -30,4 +30,4 @@
             = password_field_tag 'password', Setting.value('demo_git_password'), class: 'form-control', placeholder: 'Please fill in the password'
             = text_field_tag 'manual_resource_ids', '', class: 'form-control', placeholder: 'Manually list resources to be contracted (optional)'
           .form-group
-            = submit_tag 'Start Contracting', class: 'btn btn-primary'
\ No newline at end of file
+            = submit_tag 'Start Contracting', class: 'btn btn-primary'
diff --git a/ACSmI/Contracting/bin/bundle b/ACSmI/Contracting/bin/bundle
index 9c6dfa016dab982789f2ab4dfe0666395e047778..66e9889e8b4aeea1af13e2396fb70594232a2ae3 100644
--- a/ACSmI/Contracting/bin/bundle
+++ b/ACSmI/Contracting/bin/bundle
@@ -1,3 +1,3 @@
-#!/usr/bin/env ruby
-ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
-load Gem.bin_path('bundler', 'bundle')
+#!/usr/bin/env ruby
+ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
+load Gem.bin_path('bundler', 'bundle')
diff --git a/ACSmI/Contracting/bin/delayed_job b/ACSmI/Contracting/bin/delayed_job
new file mode 100644
index 0000000000000000000000000000000000000000..edf195985f692057c67e71d2f8b493ee3078a0d6
--- /dev/null
+++ b/ACSmI/Contracting/bin/delayed_job
@@ -0,0 +1,5 @@
+#!/usr/bin/env ruby
+
+require File.expand_path(File.join(File.dirname(__FILE__), '..', 'config', 'environment'))
+require 'delayed/command'
+Delayed::Command.new(ARGV).daemonize
diff --git a/ACSmI/Contracting/bin/rails b/ACSmI/Contracting/bin/rails
index 062dc485d183bf81e87e3a82b5aed6a5f1192eda..0138d79b751b9668a1036329a9ef29a213836162 100644
--- a/ACSmI/Contracting/bin/rails
+++ b/ACSmI/Contracting/bin/rails
@@ -1,9 +1,9 @@
-#!/usr/bin/env ruby
-begin
-  load File.expand_path('../spring', __FILE__)
-rescue LoadError => e
-  raise unless e.message.include?('spring')
-end
-APP_PATH = File.expand_path('../../config/application', __FILE__)
-require_relative '../config/boot'
-require 'rails/commands'
+#!/usr/bin/env ruby
+begin
+  load File.expand_path('../spring', __FILE__)
+rescue LoadError => e
+  raise unless e.message.include?('spring')
+end
+APP_PATH = File.expand_path('../../config/application', __FILE__)
+require_relative '../config/boot'
+require 'rails/commands'
diff --git a/ACSmI/Contracting/bin/rake b/ACSmI/Contracting/bin/rake
index 1839eaa4ddf25ed5b57d3d805b25e485ff9d3ce2..d87d5f578104597c1d1b951b55942e37f8af1277 100644
--- a/ACSmI/Contracting/bin/rake
+++ b/ACSmI/Contracting/bin/rake
@@ -1,9 +1,9 @@
-#!/usr/bin/env ruby
-begin
-  load File.expand_path('../spring', __FILE__)
-rescue LoadError => e
-  raise unless e.message.include?('spring')
-end
-require_relative '../config/boot'
-require 'rake'
-Rake.application.run
+#!/usr/bin/env ruby
+begin
+  load File.expand_path('../spring', __FILE__)
+rescue LoadError => e
+  raise unless e.message.include?('spring')
+end
+require_relative '../config/boot'
+require 'rake'
+Rake.application.run
diff --git a/ACSmI/Contracting/bin/setup b/ACSmI/Contracting/bin/setup
index 37305c7583780af806c4890bb70887e796c7c09d..acdb2c1389c502f79a967384cac1c5adcea10ec2 100644
--- a/ACSmI/Contracting/bin/setup
+++ b/ACSmI/Contracting/bin/setup
@@ -1,29 +1,29 @@
-#!/usr/bin/env ruby
-require 'pathname'
-
-# path to your application root.
-APP_ROOT = Pathname.new File.expand_path('../../',  __FILE__)
-
-Dir.chdir APP_ROOT do
-  # This script is a starting point to setup your application.
-  # Add necessary setup steps to this file:
-
-  puts "== Installing dependencies =="
-  system "gem install bundler --conservative"
-  system "bundle check || bundle install"
-
-  # puts "\n== Copying sample files =="
-  # unless File.exist?("config/database.yml")
-  #   system "cp config/database.yml.sample config/database.yml"
-  # end
-
-  puts "\n== Preparing database =="
-  system "bin/rake db:setup"
-
-  puts "\n== Removing old logs and tempfiles =="
-  system "rm -f log/*"
-  system "rm -rf tmp/cache"
-
-  puts "\n== Restarting application server =="
-  system "touch tmp/restart.txt"
-end
+#!/usr/bin/env ruby
+require 'pathname'
+
+# path to your application root.
+APP_ROOT = Pathname.new File.expand_path('../../',  __FILE__)
+
+Dir.chdir APP_ROOT do
+  # This script is a starting point to setup your application.
+  # Add necessary setup steps to this file:
+
+  puts "== Installing dependencies =="
+  system "gem install bundler --conservative"
+  system "bundle check || bundle install"
+
+  # puts "\n== Copying sample files =="
+  # unless File.exist?("config/database.yml")
+  #   system "cp config/database.yml.sample config/database.yml"
+  # end
+
+  puts "\n== Preparing database =="
+  system "bin/rake db:setup"
+
+  puts "\n== Removing old logs and tempfiles =="
+  system "rm -f log/*"
+  system "rm -rf tmp/cache"
+
+  puts "\n== Restarting application server =="
+  system "touch tmp/restart.txt"
+end
diff --git a/ACSmI/Contracting/bin/spring b/ACSmI/Contracting/bin/spring
index b9c30d2acd051fa96351f3aefa78e8efbba0b536..fb2ec2ebb48dfade14242dea0add2d98d235a6cb 100644
--- a/ACSmI/Contracting/bin/spring
+++ b/ACSmI/Contracting/bin/spring
@@ -1,17 +1,17 @@
-#!/usr/bin/env ruby
-
-# This file loads spring without using Bundler, in order to be fast.
-# It gets overwritten when you run the `spring binstub` command.
-
-unless defined?(Spring)
-  require 'rubygems'
-  require 'bundler'
-
-  lockfile = Bundler::LockfileParser.new(Bundler.default_lockfile.read)
-  spring = lockfile.specs.detect { |spec| spec.name == "spring" }
-  if spring
-    Gem.use_paths Gem.dir, Bundler.bundle_path.to_s, *Gem.path
-    gem 'spring', spring.version
-    require 'spring/binstub'
-  end
-end
+#!/usr/bin/env ruby
+
+# This file loads spring without using Bundler, in order to be fast.
+# It gets overwritten when you run the `spring binstub` command.
+
+unless defined?(Spring)
+  require 'rubygems'
+  require 'bundler'
+
+  lockfile = Bundler::LockfileParser.new(Bundler.default_lockfile.read)
+  spring = lockfile.specs.detect { |spec| spec.name == "spring" }
+  if spring
+    Gem.use_paths Gem.dir, Bundler.bundle_path.to_s, *Gem.path
+    gem 'spring', spring.version
+    require 'spring/binstub'
+  end
+end
diff --git a/ACSmI/Contracting/config.ru b/ACSmI/Contracting/config.ru
index faf3abaa4bb681618505b5626da7de599c1cc876..bd83b25412305f93fdb0a892aded30e5178899ba 100644
--- a/ACSmI/Contracting/config.ru
+++ b/ACSmI/Contracting/config.ru
@@ -1,4 +1,4 @@
-# This file is used by Rack-based servers to start the application.
-
-require ::File.expand_path('../config/environment', __FILE__)
-run Rails.application
+# This file is used by Rack-based servers to start the application.
+
+require ::File.expand_path('../config/environment', __FILE__)
+run Rails.application
diff --git a/ACSmI/Contracting/config/application.rb b/ACSmI/Contracting/config/application.rb
index ddf6acd50326b74a6742ed58f90c70fe4fa7db8d..245cad3d5f69e5fda2120f9f976982167719643a 100644
--- a/ACSmI/Contracting/config/application.rb
+++ b/ACSmI/Contracting/config/application.rb
@@ -22,12 +22,13 @@ module ACSmIContracting
 
     # Do not swallow errors in after_commit/after_rollback callbacks.
     config.active_record.raise_in_transactional_callbacks = true
-    config.active_job.queue_adapter = :sucker_punch
+    config.active_job.queue_adapter = :delayed_job
     config.autoload_paths << Rails.root.join('lib')
 
     config.action_dispatch.default_headers = {
         'Access-Control-Allow-Origin' => '*', # not perfect
         'Access-Control-Request-Method' => %w{GET POST OPTIONS}.join(',')
     }
+
   end
 end
diff --git a/ACSmI/Contracting/config/boot.rb b/ACSmI/Contracting/config/boot.rb
index b3686f38c63e0bbd1828fc0253ee2eabcede6bd1..6b750f00b1dff4d94937b97ae0dbf76784b02164 100644
--- a/ACSmI/Contracting/config/boot.rb
+++ b/ACSmI/Contracting/config/boot.rb
@@ -1,3 +1,3 @@
-ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
-
-require 'bundler/setup' # Set up gems listed in the Gemfile.
+ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
+
+require 'bundler/setup' # Set up gems listed in the Gemfile.
diff --git a/ACSmI/Contracting/config/database.yml b/ACSmI/Contracting/config/database.yml
index bfcaf8c41d70f6e39112de9d902f902343ab5ac1..04ddebbbe9576ae57905f7f07e157ff0760d0d88 100644
--- a/ACSmI/Contracting/config/database.yml
+++ b/ACSmI/Contracting/config/database.yml
@@ -1,25 +1,25 @@
-# SQLite version 3.x
-#   gem install sqlite3
-#
-#   Ensure the SQLite 3 gem is defined in your Gemfile
-#   gem 'sqlite3'
-#
-default: &default
-  adapter: sqlite3
-  pool: 5
-  timeout: 5000
-
-development:
-  <<: *default
-  database: db/development.sqlite3
-
-# Warning: The database defined as "test" will be erased and
-# re-generated from your development database when you run "rake".
-# Do not set this db to the same as development or production.
-test:
-  <<: *default
-  database: db/test.sqlite3
-
-production:
-  <<: *default
-  database: ../acsmi_db/production.sqlite3
+# SQLite version 3.x
+#   gem install sqlite3
+#
+#   Ensure the SQLite 3 gem is defined in your Gemfile
+#   gem 'sqlite3'
+#
+default: &default
+  adapter: sqlite3
+  pool: 5
+  timeout: 5000
+
+development:
+  <<: *default
+  database: db/development.sqlite3
+
+# Warning: The database defined as "test" will be erased and
+# re-generated from your development database when you run "rake".
+# Do not set this db to the same as development or production.
+test:
+  <<: *default
+  database: db/test.sqlite3
+
+production:
+  <<: *default
+  database: ../acsmi_db/production.sqlite3
diff --git a/ACSmI/Contracting/config/environment.rb b/ACSmI/Contracting/config/environment.rb
index a925c89e600d5a90cbd3ae6f42e3c1487b4937c7..ee8d90dc651948269f1b869953ff04774e737307 100644
--- a/ACSmI/Contracting/config/environment.rb
+++ b/ACSmI/Contracting/config/environment.rb
@@ -1,5 +1,5 @@
-# Load the Rails application.
-require File.expand_path('../application', __FILE__)
-
-# Initialize the Rails application.
-Rails.application.initialize!
+# Load the Rails application.
+require File.expand_path('../application', __FILE__)
+
+# Initialize the Rails application.
+Rails.application.initialize!
diff --git a/ACSmI/Contracting/config/environments/development.rb b/ACSmI/Contracting/config/environments/development.rb
index e8bd78863c5f43148df1bb2e37bb81841e5ae39a..b55e2144b6b9ef10c12c1900302cb24a242ee7d2 100644
--- a/ACSmI/Contracting/config/environments/development.rb
+++ b/ACSmI/Contracting/config/environments/development.rb
@@ -1,41 +1,41 @@
-Rails.application.configure do
-  # Settings specified here will take precedence over those in config/application.rb.
-
-  # In the development environment your application's code is reloaded on
-  # every request. This slows down response time but is perfect for development
-  # since you don't have to restart the web server when you make code changes.
-  config.cache_classes = false
-
-  # Do not eager load code on boot.
-  config.eager_load = false
-
-  # Show full error reports and disable caching.
-  config.consider_all_requests_local       = true
-  config.action_controller.perform_caching = false
-
-  # Don't care if the mailer can't send.
-  config.action_mailer.raise_delivery_errors = false
-
-  # Print deprecation notices to the Rails logger.
-  config.active_support.deprecation = :log
-
-  # Raise an error on page load if there are pending migrations.
-  config.active_record.migration_error = :page_load
-
-  # Debug mode disables concatenation and preprocessing of assets.
-  # This option may cause significant delays in view rendering with a large
-  # number of complex assets.
-  config.assets.debug = true
-
-  # Asset digests allow you to set far-future HTTP expiration dates on all assets,
-  # yet still be able to expire them through the digest params.
-  config.assets.digest = true
-
-  # Adds additional error checking when serving assets at runtime.
-  # Checks for improperly declared sprockets dependencies.
-  # Raises helpful error messages.
-  config.assets.raise_runtime_errors = true
-
-  # Raises error for missing translations
-  # config.action_view.raise_on_missing_translations = true
-end
+Rails.application.configure do
+  # Settings specified here will take precedence over those in config/application.rb.
+
+  # In the development environment your application's code is reloaded on
+  # every request. This slows down response time but is perfect for development
+  # since you don't have to restart the web server when you make code changes.
+  config.cache_classes = false
+
+  # Do not eager load code on boot.
+  config.eager_load = false
+
+  # Show full error reports and disable caching.
+  config.consider_all_requests_local       = true
+  config.action_controller.perform_caching = false
+
+  # Don't care if the mailer can't send.
+  config.action_mailer.raise_delivery_errors = false
+
+  # Print deprecation notices to the Rails logger.
+  config.active_support.deprecation = :log
+
+  # Raise an error on page load if there are pending migrations.
+  config.active_record.migration_error = :page_load
+
+  # Debug mode disables concatenation and preprocessing of assets.
+  # This option may cause significant delays in view rendering with a large
+  # number of complex assets.
+  config.assets.debug = true
+
+  # Asset digests allow you to set far-future HTTP expiration dates on all assets,
+  # yet still be able to expire them through the digest params.
+  config.assets.digest = true
+
+  # Adds additional error checking when serving assets at runtime.
+  # Checks for improperly declared sprockets dependencies.
+  # Raises helpful error messages.
+  config.assets.raise_runtime_errors = true
+
+  # Raises error for missing translations
+  # config.action_view.raise_on_missing_translations = true
+end
diff --git a/ACSmI/Contracting/config/environments/production.rb b/ACSmI/Contracting/config/environments/production.rb
index 86514bce12b6ff04eb554bb2ea8f900b15df9e61..25e04ecd858763109e814746213b753f2d39c552 100644
--- a/ACSmI/Contracting/config/environments/production.rb
+++ b/ACSmI/Contracting/config/environments/production.rb
@@ -1,79 +1,79 @@
-Rails.application.configure do
-  # Settings specified here will take precedence over those in config/application.rb.
-
-  # Code is not reloaded between requests.
-  config.cache_classes = true
-
-  # Eager load code on boot. This eager loads most of Rails and
-  # your application in memory, allowing both threaded web servers
-  # and those relying on copy on write to perform better.
-  # Rake tasks automatically ignore this option for performance.
-  config.eager_load = true
-
-  # Full error reports are disabled and caching is turned on.
-  config.consider_all_requests_local       = false
-  config.action_controller.perform_caching = true
-
-  # Enable Rack::Cache to put a simple HTTP cache in front of your application
-  # Add `rack-cache` to your Gemfile before enabling this.
-  # For large-scale production use, consider using a caching reverse proxy like
-  # NGINX, varnish or squid.
-  # config.action_dispatch.rack_cache = true
-
-  # Disable serving static files from the `/public` folder by default since
-  # Apache or NGINX already handles this.
-  config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present?
-
-  # Compress JavaScripts and CSS.
-  config.assets.js_compressor = :uglifier
-  # config.assets.css_compressor = :sass
-
-  # Do not fallback to assets pipeline if a precompiled asset is missed.
-  config.assets.compile = true
-
-  # Asset digests allow you to set far-future HTTP expiration dates on all assets,
-  # yet still be able to expire them through the digest params.
-  config.assets.digest = true
-
-  # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb
-
-  # Specifies the header that your server uses for sending files.
-  # config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache
-  # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX
-
-  # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
-  # config.force_ssl = true
-
-  # Use the lowest log level to ensure availability of diagnostic information
-  # when problems arise.
-  config.log_level = :debug
-
-  # Prepend all log lines with the following tags.
-  # config.log_tags = [ :subdomain, :uuid ]
-
-  # Use a different logger for distributed setups.
-  # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new)
-
-  # Use a different cache store in production.
-  # config.cache_store = :mem_cache_store
-
-  # Enable serving of images, stylesheets, and JavaScripts from an asset server.
-  # config.action_controller.asset_host = 'http://assets.example.com'
-
-  # Ignore bad email addresses and do not raise email delivery errors.
-  # Set this to true and configure the email server for immediate delivery to raise delivery errors.
-  # config.action_mailer.raise_delivery_errors = false
-
-  # Enable locale fallbacks for I18n (makes lookups for any locale fall back to
-  # the I18n.default_locale when a translation cannot be found).
-  config.i18n.fallbacks = true
-
-  # Send deprecation notices to registered listeners.
-  config.active_support.deprecation = :notify
-
-  # Use default logging formatter so that PID and timestamp are not suppressed.
-  config.log_formatter = ::Logger::Formatter.new
-
-  # Do not dump schema after migrations.
-  config.active_record.dump_schema_after_migration = false
-end
+Rails.application.configure do
+  # Settings specified here will take precedence over those in config/application.rb.
+
+  # Code is not reloaded between requests.
+  config.cache_classes = true
+
+  # Eager load code on boot. This eager loads most of Rails and
+  # your application in memory, allowing both threaded web servers
+  # and those relying on copy on write to perform better.
+  # Rake tasks automatically ignore this option for performance.
+  config.eager_load = true
+
+  # Full error reports are disabled and caching is turned on.
+  config.consider_all_requests_local       = false
+  config.action_controller.perform_caching = true
+
+  # Enable Rack::Cache to put a simple HTTP cache in front of your application
+  # Add `rack-cache` to your Gemfile before enabling this.
+  # For large-scale production use, consider using a caching reverse proxy like
+  # NGINX, varnish or squid.
+  # config.action_dispatch.rack_cache = true
+
+  # Disable serving static files from the `/public` folder by default since
+  # Apache or NGINX already handles this.
+  config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present?
+
+  # Compress JavaScripts and CSS.
+  config.assets.js_compressor = :uglifier
+  # config.assets.css_compressor = :sass
+
+  # Do not fallback to assets pipeline if a precompiled asset is missed.
+  config.assets.compile = true
+
+  # Asset digests allow you to set far-future HTTP expiration dates on all assets,
+  # yet still be able to expire them through the digest params.
+  config.assets.digest = true
+
+  # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb
+
+  # Specifies the header that your server uses for sending files.
+  # config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache
+  # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX
+
+  # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
+  # config.force_ssl = true
+
+  # Use the lowest log level to ensure availability of diagnostic information
+  # when problems arise.
+  config.log_level = :warn
+
+  # Prepend all log lines with the following tags.
+  # config.log_tags = [ :subdomain, :uuid ]
+
+  # Use a different logger for distributed setups.
+  # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new)
+
+  # Use a different cache store in production.
+  # config.cache_store = :mem_cache_store
+
+  # Enable serving of images, stylesheets, and JavaScripts from an asset server.
+  # config.action_controller.asset_host = 'http://assets.example.com'
+
+  # Ignore bad email addresses and do not raise email delivery errors.
+  # Set this to true and configure the email server for immediate delivery to raise delivery errors.
+  # config.action_mailer.raise_delivery_errors = false
+
+  # Enable locale fallbacks for I18n (makes lookups for any locale fall back to
+  # the I18n.default_locale when a translation cannot be found).
+  config.i18n.fallbacks = true
+
+  # Send deprecation notices to registered listeners.
+  config.active_support.deprecation = :notify
+
+  # Use default logging formatter so that PID and timestamp are not suppressed.
+  config.log_formatter = ::Logger::Formatter.new
+
+  # Do not dump schema after migrations.
+  config.active_record.dump_schema_after_migration = false
+end
diff --git a/ACSmI/Contracting/config/environments/test.rb b/ACSmI/Contracting/config/environments/test.rb
index d14cf83298b5b80c3cf2ec60715802c38972e345..1c19f08b28341c59bd4cfe1834e29f877e5fc22e 100644
--- a/ACSmI/Contracting/config/environments/test.rb
+++ b/ACSmI/Contracting/config/environments/test.rb
@@ -1,42 +1,42 @@
-Rails.application.configure do
-  # Settings specified here will take precedence over those in config/application.rb.
-
-  # The test environment is used exclusively to run your application's
-  # test suite. You never need to work with it otherwise. Remember that
-  # your test database is "scratch space" for the test suite and is wiped
-  # and recreated between test runs. Don't rely on the data there!
-  config.cache_classes = true
-
-  # Do not eager load code on boot. This avoids loading your whole application
-  # just for the purpose of running a single test. If you are using a tool that
-  # preloads Rails for running tests, you may have to set it to true.
-  config.eager_load = false
-
-  # Configure static file server for tests with Cache-Control for performance.
-  config.serve_static_files   = true
-  config.static_cache_control = 'public, max-age=3600'
-
-  # Show full error reports and disable caching.
-  config.consider_all_requests_local       = true
-  config.action_controller.perform_caching = false
-
-  # Raise exceptions instead of rendering exception templates.
-  config.action_dispatch.show_exceptions = false
-
-  # Disable request forgery protection in test environment.
-  config.action_controller.allow_forgery_protection = false
-
-  # Tell Action Mailer not to deliver emails to the real world.
-  # The :test delivery method accumulates sent emails in the
-  # ActionMailer::Base.deliveries array.
-  config.action_mailer.delivery_method = :test
-
-  # Randomize the order test cases are executed.
-  config.active_support.test_order = :random
-
-  # Print deprecation notices to the stderr.
-  config.active_support.deprecation = :stderr
-
-  # Raises error for missing translations
-  # config.action_view.raise_on_missing_translations = true
-end
+Rails.application.configure do
+  # Settings specified here will take precedence over those in config/application.rb.
+
+  # The test environment is used exclusively to run your application's
+  # test suite. You never need to work with it otherwise. Remember that
+  # your test database is "scratch space" for the test suite and is wiped
+  # and recreated between test runs. Don't rely on the data there!
+  config.cache_classes = true
+
+  # Do not eager load code on boot. This avoids loading your whole application
+  # just for the purpose of running a single test. If you are using a tool that
+  # preloads Rails for running tests, you may have to set it to true.
+  config.eager_load = false
+
+  # Configure static file server for tests with Cache-Control for performance.
+  config.serve_static_files   = true
+  config.static_cache_control = 'public, max-age=3600'
+
+  # Show full error reports and disable caching.
+  config.consider_all_requests_local       = true
+  config.action_controller.perform_caching = false
+
+  # Raise exceptions instead of rendering exception templates.
+  config.action_dispatch.show_exceptions = false
+
+  # Disable request forgery protection in test environment.
+  config.action_controller.allow_forgery_protection = false
+
+  # Tell Action Mailer not to deliver emails to the real world.
+  # The :test delivery method accumulates sent emails in the
+  # ActionMailer::Base.deliveries array.
+  config.action_mailer.delivery_method = :test
+
+  # Randomize the order test cases are executed.
+  config.active_support.test_order = :random
+
+  # Print deprecation notices to the stderr.
+  config.active_support.deprecation = :stderr
+
+  # Raises error for missing translations
+  # config.action_view.raise_on_missing_translations = true
+end
diff --git a/ACSmI/Contracting/config/initializers/assets.rb b/ACSmI/Contracting/config/initializers/assets.rb
index d38f9581d87ec2d58b46622f2bdf7da9f1d5a83d..01ef3e6630af133b41bd954e220f31231aa281d9 100644
--- a/ACSmI/Contracting/config/initializers/assets.rb
+++ b/ACSmI/Contracting/config/initializers/assets.rb
@@ -1,11 +1,11 @@
-# Be sure to restart your server when you modify this file.
-
-# Version of your assets, change this if you want to expire all your assets.
-Rails.application.config.assets.version = '1.0'
-
-# Add additional assets to the asset load path
-# Rails.application.config.assets.paths << Emoji.images_path
-
-# Precompile additional assets.
-# application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
-# Rails.application.config.assets.precompile += %w( search.js )
+# Be sure to restart your server when you modify this file.
+
+# Version of your assets, change this if you want to expire all your assets.
+Rails.application.config.assets.version = '1.0'
+
+# Add additional assets to the asset load path
+# Rails.application.config.assets.paths << Emoji.images_path
+
+# Precompile additional assets.
+# application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
+# Rails.application.config.assets.precompile += %w( search.js )
diff --git a/ACSmI/Contracting/config/initializers/backtrace_silencers.rb b/ACSmI/Contracting/config/initializers/backtrace_silencers.rb
index 803738d702a0c721b3e0f5ce22572826899a33a8..59385cdf379bd06a8d2326dcd4de6d5cd5d3f5b0 100644
--- a/ACSmI/Contracting/config/initializers/backtrace_silencers.rb
+++ b/ACSmI/Contracting/config/initializers/backtrace_silencers.rb
@@ -1,7 +1,7 @@
-# Be sure to restart your server when you modify this file.
-
-# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces.
-# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ }
-
-# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code.
-# Rails.backtrace_cleaner.remove_silencers!
+# Be sure to restart your server when you modify this file.
+
+# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces.
+# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ }
+
+# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code.
+# Rails.backtrace_cleaner.remove_silencers!
diff --git a/ACSmI/Contracting/config/initializers/cookies_serializer.rb b/ACSmI/Contracting/config/initializers/cookies_serializer.rb
index 1ea6ed8d86cec7ce2140bcb103709c6daf1f4fb4..7f70458dee62b4a0f5233e4be7b8838b8400cbe8 100644
--- a/ACSmI/Contracting/config/initializers/cookies_serializer.rb
+++ b/ACSmI/Contracting/config/initializers/cookies_serializer.rb
@@ -1,3 +1,3 @@
-# Be sure to restart your server when you modify this file.
-
-Rails.application.config.action_dispatch.cookies_serializer = :json
+# Be sure to restart your server when you modify this file.
+
+Rails.application.config.action_dispatch.cookies_serializer = :json
diff --git a/ACSmI/Contracting/config/initializers/default_vm_data.rb b/ACSmI/Contracting/config/initializers/default_vm_data.rb
new file mode 100644
index 0000000000000000000000000000000000000000..14911ce18b6e15fade5c860117a3fff947bbb1ef
--- /dev/null
+++ b/ACSmI/Contracting/config/initializers/default_vm_data.rb
@@ -0,0 +1,6 @@
+if ActiveRecord::Base.connection.data_source_exists?('settings') && Setting.find_by_key('platform_url')
+  to_load = Setting.value('platform_url').include?('decide') ? 'production' : 'stage'
+  yaml_string = File.read(File.join(Rails.root, 'config', 'vm_defaults', "#{to_load}.yml"))
+
+  DEFAULT_VM_DATA = HashWithIndifferentAccess.new(YAML.load(yaml_string)).freeze
+end
diff --git a/ACSmI/Contracting/config/initializers/enqueue_cleaning_job.rb b/ACSmI/Contracting/config/initializers/enqueue_cleaning_job.rb
index f3250759138c500a5bf9c55f4ccc47f5492e4bdd..1b9bf0931952b4bc4e23d934cd81e0ec67d56c31 100644
--- a/ACSmI/Contracting/config/initializers/enqueue_cleaning_job.rb
+++ b/ACSmI/Contracting/config/initializers/enqueue_cleaning_job.rb
@@ -1 +1,8 @@
-CleanUpJob.perform_async
\ No newline at end of file
+def enqueue_cleaning_job
+  handler = "--- !ruby/object:CleanUpJob {}\n"
+
+  Delayed::Job.where(handler: handler).where.not(locked_at: nil).delete_all
+  Delayed::Job.enqueue CleanUpJob.new unless Delayed::Job.exists?(handler: handler)
+end
+
+enqueue_cleaning_job if ActiveRecord::Base.connection.data_source_exists? 'delayed_jobs'
diff --git a/ACSmI/Contracting/config/initializers/filter_parameter_logging.rb b/ACSmI/Contracting/config/initializers/filter_parameter_logging.rb
index 180af8a4d54dc1bda143ebb2827e0ccd091a398e..4a994e1e7bb7ce28dcec98bad48b9a891d7dec51 100644
--- a/ACSmI/Contracting/config/initializers/filter_parameter_logging.rb
+++ b/ACSmI/Contracting/config/initializers/filter_parameter_logging.rb
@@ -1,4 +1,4 @@
-# Be sure to restart your server when you modify this file.
-
-# Configure sensitive parameters which will be filtered from the log file.
-Rails.application.config.filter_parameters += [:password]
+# Be sure to restart your server when you modify this file.
+
+# Configure sensitive parameters which will be filtered from the log file.
+Rails.application.config.filter_parameters += [:password]
diff --git a/ACSmI/Contracting/config/initializers/inflections.rb b/ACSmI/Contracting/config/initializers/inflections.rb
index d173fb9fa24f2c6999e3eae71e4397e622865c86..ac033bf9dc846101320c96a5ce8aceb8c96ec098 100644
--- a/ACSmI/Contracting/config/initializers/inflections.rb
+++ b/ACSmI/Contracting/config/initializers/inflections.rb
@@ -1,16 +1,16 @@
-# Be sure to restart your server when you modify this file.
-
-# Add new inflection rules using the following format. Inflections
-# are locale specific, and you may define rules for as many different
-# locales as you wish. All of these examples are active by default:
-# ActiveSupport::Inflector.inflections(:en) do |inflect|
-#   inflect.plural /^(ox)$/i, '\1en'
-#   inflect.singular /^(ox)en/i, '\1'
-#   inflect.irregular 'person', 'people'
-#   inflect.uncountable %w( fish sheep )
-# end
-
-# These inflection rules are supported but not enabled by default:
-# ActiveSupport::Inflector.inflections(:en) do |inflect|
-#   inflect.acronym 'RESTful'
-# end
+# Be sure to restart your server when you modify this file.
+
+# Add new inflection rules using the following format. Inflections
+# are locale specific, and you may define rules for as many different
+# locales as you wish. All of these examples are active by default:
+# ActiveSupport::Inflector.inflections(:en) do |inflect|
+#   inflect.plural /^(ox)$/i, '\1en'
+#   inflect.singular /^(ox)en/i, '\1'
+#   inflect.irregular 'person', 'people'
+#   inflect.uncountable %w( fish sheep )
+# end
+
+# These inflection rules are supported but not enabled by default:
+# ActiveSupport::Inflector.inflections(:en) do |inflect|
+#   inflect.acronym 'RESTful'
+# end
diff --git a/ACSmI/Contracting/config/initializers/mime_types.rb b/ACSmI/Contracting/config/initializers/mime_types.rb
index b9979aa8a7f29de19af6122c7a6d31d78c29159c..dc1899682b01c3a6d9673faf746e235fb64fc4d2 100644
--- a/ACSmI/Contracting/config/initializers/mime_types.rb
+++ b/ACSmI/Contracting/config/initializers/mime_types.rb
@@ -1,4 +1,4 @@
-# Be sure to restart your server when you modify this file.
-
-# Add new mime types for use in respond_to blocks:
-# Mime::Type.register "text/richtext", :rtf
+# Be sure to restart your server when you modify this file.
+
+# Add new mime types for use in respond_to blocks:
+# Mime::Type.register "text/richtext", :rtf
diff --git a/ACSmI/Contracting/config/initializers/to_time_preserves_timezone.rb b/ACSmI/Contracting/config/initializers/to_time_preserves_timezone.rb
index f8cf238f91a18e3e748c89ef60cfca41733916e0..8674be3227e03b2efd3c599193e14a48a004e9a1 100644
--- a/ACSmI/Contracting/config/initializers/to_time_preserves_timezone.rb
+++ b/ACSmI/Contracting/config/initializers/to_time_preserves_timezone.rb
@@ -1,10 +1,10 @@
-# Be sure to restart your server when you modify this file.
-
-# Preserve the timezone of the receiver when calling to `to_time`.
-# Ruby 2.4 will change the behavior of `to_time` to preserve the timezone
-# when converting to an instance of `Time` instead of the previous behavior
-# of converting to the local system timezone.
-#
-# Rails 5.0 introduced this config option so that apps made with earlier
-# versions of Rails are not affected when upgrading.
-ActiveSupport.to_time_preserves_timezone = true
+# Be sure to restart your server when you modify this file.
+
+# Preserve the timezone of the receiver when calling to `to_time`.
+# Ruby 2.4 will change the behavior of `to_time` to preserve the timezone
+# when converting to an instance of `Time` instead of the previous behavior
+# of converting to the local system timezone.
+#
+# Rails 5.0 introduced this config option so that apps made with earlier
+# versions of Rails are not affected when upgrading.
+ActiveSupport.to_time_preserves_timezone = true
diff --git a/ACSmI/Contracting/config/initializers/wrap_parameters.rb b/ACSmI/Contracting/config/initializers/wrap_parameters.rb
index 466d360edeb7a494914a270a8fdc474f6f849e10..33725e95fd22b9053f75ef6626aa1af781ebe947 100644
--- a/ACSmI/Contracting/config/initializers/wrap_parameters.rb
+++ b/ACSmI/Contracting/config/initializers/wrap_parameters.rb
@@ -1,14 +1,14 @@
-# Be sure to restart your server when you modify this file.
-
-# This file contains settings for ActionController::ParamsWrapper which
-# is enabled by default.
-
-# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array.
-ActiveSupport.on_load(:action_controller) do
-  wrap_parameters format: [:json] if respond_to?(:wrap_parameters)
-end
-
-# To enable root element in JSON for ActiveRecord objects.
-# ActiveSupport.on_load(:active_record) do
-#  self.include_root_in_json = true
-# end
+# Be sure to restart your server when you modify this file.
+
+# This file contains settings for ActionController::ParamsWrapper which
+# is enabled by default.
+
+# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array.
+ActiveSupport.on_load(:action_controller) do
+  wrap_parameters format: [:json] if respond_to?(:wrap_parameters)
+end
+
+# To enable root element in JSON for ActiveRecord objects.
+# ActiveSupport.on_load(:active_record) do
+#  self.include_root_in_json = true
+# end
diff --git a/ACSmI/Contracting/config/locales/en.yml b/ACSmI/Contracting/config/locales/en.yml
index 374ca54256a74c3d3c24f8baec015d63bfdbff3e..0653957166e8182880bb87b56e36c257c988dd92 100644
--- a/ACSmI/Contracting/config/locales/en.yml
+++ b/ACSmI/Contracting/config/locales/en.yml
@@ -1,23 +1,23 @@
-# Files in the config/locales directory are used for internationalization
-# and are automatically loaded by Rails. If you want to use locales other
-# than English, add the necessary files in this directory.
-#
-# To use the locales, use `I18n.t`:
-#
-#     I18n.t 'hello'
-#
-# In views, this is aliased to just `t`:
-#
-#     <%= t('hello') %>
-#
-# To use a different locale, set it with `I18n.locale`:
-#
-#     I18n.locale = :es
-#
-# This would use the information in config/locales/es.yml.
-#
-# To learn more, please read the Rails Internationalization guide
-# available at http://guides.rubyonrails.org/i18n.html.
-
-en:
-  hello: "Hello world"
+# Files in the config/locales directory are used for internationalization
+# and are automatically loaded by Rails. If you want to use locales other
+# than English, add the necessary files in this directory.
+#
+# To use the locales, use `I18n.t`:
+#
+#     I18n.t 'hello'
+#
+# In views, this is aliased to just `t`:
+#
+#     <%= t('hello') %>
+#
+# To use a different locale, set it with `I18n.locale`:
+#
+#     I18n.locale = :es
+#
+# This would use the information in config/locales/es.yml.
+#
+# To learn more, please read the Rails Internationalization guide
+# available at http://guides.rubyonrails.org/i18n.html.
+
+en:
+  hello: "Hello world"
diff --git a/ACSmI/Contracting/config/routes.rb b/ACSmI/Contracting/config/routes.rb
index 60a97e436397df85b864867a8a2fe06b578b96e9..a2ee106bbfe09d42c7cd986f40596707d4b2aea4 100644
--- a/ACSmI/Contracting/config/routes.rb
+++ b/ACSmI/Contracting/config/routes.rb
@@ -1,6 +1,17 @@
 Rails.application.routes.draw do
   root to: 'welcome#index'
 
+  get 'resource_registration/:resource_name/:session', to: 'resource_registration#step1', as: :resource_step1
+  match 'send_fields_to_resource/:session', to: 'resource_registration#send_fields_to_resource', via: :post, as: :send_fields_to_resource
+  get 'notify_data/:session', to: 'resource_registration#notify_data', as: :notify_data
+  match 'patch_verify_code/:session', to: 'resource_registration#patch_verify_code', via: :post
+  get 'sms_verify/:session', to: 'resource_registration#request_sms_code', as: :request_sms_code
+  get 'reentry_data/:session/:type', to: 'resource_registration#reentry_data', as: :reentry_data
+  match 'reentry_long_polling/:session', to: 'resource_registration#reentry_long_polling', via: :post
+  match 'patch_reentry_data/:session', to: 'resource_registration#patch_reentry_data', via: :post
+  match 'verify_code_long_polling/:session', to: 'resource_registration#verify_code_long_polling', via: :post
+  match 'verify_code_redirect/:session', to: 'resource_registration#verify_code_redirect', via: :post
+  match 'registration_steps/:session', to: 'resource_registration#registration_steps', via: :post
   resources :sessions, only: [:index] do
     collection do
       post :start_demo
@@ -11,11 +22,11 @@ Rails.application.routes.draw do
       post :use_own_creds
       get :setup_contracting
       get :success
+      get :platform_or_direct
 
       # AJAX
       post :check_existing_contract
       post :prepare_new_contract
-
       post :hide_schema_warnings
     end
   end
diff --git a/ACSmI/Contracting/config/vm_defaults/production.yml b/ACSmI/Contracting/config/vm_defaults/production.yml
new file mode 100644
index 0000000000000000000000000000000000000000..b650d4060bdfcf0294543c98450540cd8a334adb
--- /dev/null
+++ b/ACSmI/Contracting/config/vm_defaults/production.yml
@@ -0,0 +1,27 @@
+cloudsigma:
+  resource_id: 'c1fb1543-54aa-4247-91ee-3ea9a553f64e'
+  resource_name: 'CloudSigma CloudBroker GmbH'
+  region_id: '4265ddb9-e862-4814-82a4-d6b92f25e8e5'
+  instance_type_id: '8c1ffcb7-4f50-42d7-8e88-bc7b8184b3cc'
+
+aws:
+  resource_id: '05d76ee4-3b7e-4726-8ff3-eb24f667c70d'
+  resource_name: 'Amazon EC2 CloudBroker GmbH'
+  region_id: '83dc7c1e-711c-4548-9a9e-128f9795cfed'
+  instance_type_id: 'e3ca8e4c-0f91-4e83-9bd9-4cef88d054a8'
+
+arsys:
+  resource_id: '27b1fb7b-2fd9-4042-8902-e4996e0bc420'
+  resource_name: 'Arsys CloudBuilder CloudBroker GmbH'
+  region_id: 'd112253a-951f-417a-a1f1-3a892bf35a45'
+  instance_type_id: 'f554e8a1-29d8-48e5-bd68-c01417576628'
+
+azure:
+  resource_id: '369f40d5-d5e8-49e8-b9fa-593811972137'
+  resource_name: 'Microsoft Azure CloudBroker GmbH '
+  region_id: '81a29343-7580-4523-b670-03eeea5e9dae'
+  instance_type_id: '7b031b06-dc14-4017-9b7e-2ef97b32278d'
+
+software:
+  id: '21b7ebed-5076-43b6-8351-0e06cf16eedc'
+  image: 'Ubuntu 16.04'
diff --git a/ACSmI/Contracting/config/vm_defaults/stage.yml b/ACSmI/Contracting/config/vm_defaults/stage.yml
new file mode 100644
index 0000000000000000000000000000000000000000..385ce88c5f0e903194e797df0ba039e48899b66c
--- /dev/null
+++ b/ACSmI/Contracting/config/vm_defaults/stage.yml
@@ -0,0 +1,27 @@
+cloudsigma:
+  resource_id: '52f3ad7c-053b-459f-a85a-69d9dbe5d3d8'
+  resource_name: 'CloudSigma cloudSME UG CloudSME'
+  region_id: '5e10f469-0129-4753-a613-4d1b3602cd0c'
+  instance_type_id: '68e366c0-ddf9-4334-b742-8c6e1030c985'
+
+aws:
+  resource_id: '831d19c3-607a-48fe-8ba0-4149dd305c4f'
+  resource_name: 'Amazon EC2 cloudSME UG CloudSME'
+  region_id: '42e01445-1996-403c-8652-fb1ebfc1ad05'
+  instance_type_id: '86d2c33d-24dc-4319-9f4a-10da58ffe605'
+
+arsys:
+  resource_id: 'f86464af-dd56-4500-8cbd-b6b27014f6ea'
+  resource_name: 'Arsys CloudBuilder cloudSME UG'
+  region_id: '12465614-e653-42e1-8699-4e7ecbbe1cc1'
+  instance_type_id: '13c86b76-8a27-4c42-97d6-746d11b12dde'
+
+azure:
+  resource_id: '62fff539-b77b-4dd3-9615-795d76ac8082'
+  resource_name: 'Microsoft Azure cloudSME UG CloudSME'
+  region_id: 'b09e0ba6-b012-4311-8020-dacdc531bfbb'
+  instance_type_id: 'f8f2ef5b-a674-4d80-84d4-1db0aab95bb8'
+
+software:
+  id: 'd4bd53fb-ea29-4a4c-b2c0-2786bf4b853f'
+  image: 'Ubuntu 16.04'
diff --git a/ACSmI/Contracting/db/application_description.schema.json b/ACSmI/Contracting/db/application_description.schema.json
index ba28ea1b504f4c3b1493493aa9a27e47a9b3352f..f15694baf4b49c467c8e1dc8830a4f4c3fffc3fc 100644
--- a/ACSmI/Contracting/db/application_description.schema.json
+++ b/ACSmI/Contracting/db/application_description.schema.json
@@ -1,5 +1,4 @@
 {
-  "$schema": "http://json-schema.org/draft-06/schema#",
   "title": "AppDescription",
   "description": "DECIDE Application Description",
   "type": "object",
diff --git a/ACSmI/Contracting/db/migrate/20171117102726_create_users.rb b/ACSmI/Contracting/db/migrate/20171117102726_create_users.rb
index d5ecd61afadfd7fbe1492a795c3c36a0088a9ab7..11211de9fcf62e06f0f0c7f03719a97d60b34471 100644
--- a/ACSmI/Contracting/db/migrate/20171117102726_create_users.rb
+++ b/ACSmI/Contracting/db/migrate/20171117102726_create_users.rb
@@ -1,25 +1,25 @@
-class CreateUsers < ActiveRecord::Migration
-  def change
-    create_table :users do |t|
-      t.string :email, null: false
-      t.string :crypted_password
-      t.string :password_salt
-      t.string :persistence_token
-
-      t.string :full_name, null: false
-      t.string :organization
-      t.string :address
-      t.string :platform_id
-
-      t.string :encrypted_platform_email
-      t.string :encrypted_platform_email_iv
-      t.string :encrypted_platform_password
-      t.string :encrypted_platform_password_iv
-
-      t.timestamps
-    end
-
-    add_index :users, :email, unique: true
-    add_index :users, :persistence_token, unique: true
-  end
-end
+class CreateUsers < ActiveRecord::Migration
+  def change
+    create_table :users do |t|
+      t.string :email, null: false
+      t.string :crypted_password
+      t.string :password_salt
+      t.string :persistence_token
+
+      t.string :full_name, null: false
+      t.string :organization
+      t.string :address
+      t.string :platform_id
+
+      t.string :encrypted_platform_email
+      t.string :encrypted_platform_email_iv
+      t.string :encrypted_platform_password
+      t.string :encrypted_platform_password_iv
+
+      t.timestamps
+    end
+
+    add_index :users, :email, unique: true
+    add_index :users, :persistence_token, unique: true
+  end
+end
diff --git a/ACSmI/Contracting/db/migrate/20171117102735_create_settings.rb b/ACSmI/Contracting/db/migrate/20171117102735_create_settings.rb
index 34c7bb18b3aff2829d7f297587a9c11020f17455..1572d35c1a83c97bdf52f16af76db490ceed3c99 100644
--- a/ACSmI/Contracting/db/migrate/20171117102735_create_settings.rb
+++ b/ACSmI/Contracting/db/migrate/20171117102735_create_settings.rb
@@ -1,13 +1,13 @@
-class CreateSettings < ActiveRecord::Migration
-  def change
-    create_table :settings do |t|
-      t.string :key, null: false
-      t.string :encrypted_value
-      t.string :encrypted_value_iv
-
-      t.timestamps
-    end
-
-    add_index :settings, :key
-  end
-end
+class CreateSettings < ActiveRecord::Migration
+  def change
+    create_table :settings do |t|
+      t.string :key, null: false
+      t.string :encrypted_value
+      t.string :encrypted_value_iv
+
+      t.timestamps
+    end
+
+    add_index :settings, :key
+  end
+end
diff --git a/ACSmI/Contracting/db/migrate/20171117102747_create_contracts.rb b/ACSmI/Contracting/db/migrate/20171117102747_create_contracts.rb
index 282ce4cee69f2a193efff45be06e2c9477e382a0..cbb08b70f4a24842d464a3db3b3894a40ff809af 100644
--- a/ACSmI/Contracting/db/migrate/20171117102747_create_contracts.rb
+++ b/ACSmI/Contracting/db/migrate/20171117102747_create_contracts.rb
@@ -1,11 +1,11 @@
-class CreateContracts < ActiveRecord::Migration
-  def change
-    create_table :contracts do |t|
-      t.references :user
-      t.string :resource_id
-      t.string :resource_name
-
-      t.timestamps
-    end
-  end
-end
+class CreateContracts < ActiveRecord::Migration
+  def change
+    create_table :contracts do |t|
+      t.references :user
+      t.string :resource_id
+      t.string :resource_name
+
+      t.timestamps
+    end
+  end
+end
diff --git a/ACSmI/Contracting/db/migrate/20171117102751_create_sessions.rb b/ACSmI/Contracting/db/migrate/20171117102751_create_sessions.rb
index d694d78a38c4ee5581f4b51f9efe4f9e6cee3a80..d295e8f3234bce4750cbfecb2a32507d1ed439df 100644
--- a/ACSmI/Contracting/db/migrate/20171117102751_create_sessions.rb
+++ b/ACSmI/Contracting/db/migrate/20171117102751_create_sessions.rb
@@ -1,14 +1,14 @@
-class CreateSessions < ActiveRecord::Migration
-  def change
-    create_table :sessions, id: false  do |t|
-      t.primary_key :id, :string, limit: 36
-      t.references :contract
-      t.references :user
-      t.string :resource_id
-      t.string :resource_name
-
-      t.string :aasm_state
-      t.timestamps
-    end
-  end
-end
+class CreateSessions < ActiveRecord::Migration
+  def change
+    create_table :sessions, id: false  do |t|
+      t.primary_key :id, :string, limit: 36
+      t.references :contract
+      t.references :user
+      t.string :resource_id
+      t.string :resource_name
+
+      t.string :aasm_state
+      t.timestamps
+    end
+  end
+end
diff --git a/ACSmI/Contracting/db/migrate/20171117102757_create_credential_fields.rb b/ACSmI/Contracting/db/migrate/20171117102757_create_credential_fields.rb
index 8fa1e092df6a886c5e800b0f5967c341045db203..705ddbbf2ce043cef337c09adbb4a7116dcfe131 100644
--- a/ACSmI/Contracting/db/migrate/20171117102757_create_credential_fields.rb
+++ b/ACSmI/Contracting/db/migrate/20171117102757_create_credential_fields.rb
@@ -1,13 +1,13 @@
-class CreateCredentialFields < ActiveRecord::Migration
-  def change
-    create_table :credential_fields do |t|
-      t.string :session_id, null: false
-
-      t.string :name, null: false
-      t.string :encrypted_value
-      t.string :encrypted_value_iv
-
-      t.timestamps
-    end
-  end
-end
+class CreateCredentialFields < ActiveRecord::Migration
+  def change
+    create_table :credential_fields do |t|
+      t.string :session_id, null: false
+
+      t.string :name, null: false
+      t.string :encrypted_value
+      t.string :encrypted_value_iv
+
+      t.timestamps
+    end
+  end
+end
diff --git a/ACSmI/Contracting/db/migrate/20180517151650_add_demo_repo.rb b/ACSmI/Contracting/db/migrate/20180517151650_add_demo_repo.rb
index b8f89b09874bfdaabfe63d46ee3feb789760e4af..d487ed2a1c3ebfdc1e005460aa6aadc1a37f49db 100644
--- a/ACSmI/Contracting/db/migrate/20180517151650_add_demo_repo.rb
+++ b/ACSmI/Contracting/db/migrate/20180517151650_add_demo_repo.rb
@@ -1,5 +1,8 @@
 class AddDemoRepo < ActiveRecord::Migration
   def up
+    #Setting.create!(key: 'demo_git_url', value: 'https://bitbucket.org/DemoUser676/application-description.git')
+    #Setting.create!(key: 'demo_git_username', value: 'DemoUser676')
+    #Setting.create!(key: 'demo_git_password', value: '7ZwSa5ZfmN2zQBCvV2ShlQ==')
     Setting.create!(key: 'demo_git_url', value: 'https://git.code.tecnalia.com/decide/SockShop_AppDescription.git')
     Setting.create!(key: 'demo_git_username', value: 'andrey.sereda@scaletools.com')
     Setting.create!(key: 'demo_git_password', value: 'F5W8=FtGQ4xr')
diff --git a/ACSmI/Contracting/db/migrate/20190131113035_add_resource_object_to_session.rb b/ACSmI/Contracting/db/migrate/20190131113035_add_resource_object_to_session.rb
new file mode 100644
index 0000000000000000000000000000000000000000..72f4bde63626d58a691f0286e89505718bf2aa8e
--- /dev/null
+++ b/ACSmI/Contracting/db/migrate/20190131113035_add_resource_object_to_session.rb
@@ -0,0 +1,5 @@
+class AddResourceObjectToSession < ActiveRecord::Migration
+  def change
+    add_column :sessions, :resource_object, :string
+  end
+end
diff --git a/ACSmI/Contracting/db/migrate/20190204090038_create_delayed_jobs.rb b/ACSmI/Contracting/db/migrate/20190204090038_create_delayed_jobs.rb
new file mode 100644
index 0000000000000000000000000000000000000000..27fdcf6cc58992371edc82ec49b61dc75ce624ce
--- /dev/null
+++ b/ACSmI/Contracting/db/migrate/20190204090038_create_delayed_jobs.rb
@@ -0,0 +1,22 @@
+class CreateDelayedJobs < ActiveRecord::Migration
+  def self.up
+    create_table :delayed_jobs, force: true do |table|
+      table.integer :priority, default: 0, null: false # Allows some jobs to jump to the front of the queue
+      table.integer :attempts, default: 0, null: false # Provides for retries, but still fail eventually.
+      table.text :handler,                 null: false # YAML-encoded string of the object that will do work
+      table.text :last_error                           # reason for last failure (See Note below)
+      table.datetime :run_at                           # When to run. Could be Time.zone.now for immediately, or sometime in the future.
+      table.datetime :locked_at                        # Set when a client is working on this object
+      table.datetime :failed_at                        # Set when all retries have failed (actually, by default, the record is deleted instead)
+      table.string :locked_by                          # Who is working on this object (if locked)
+      table.string :queue                              # The name of the queue this job is in
+      table.timestamps null: true
+    end
+
+    add_index :delayed_jobs, [:priority, :run_at], name: "delayed_jobs_priority"
+  end
+
+  def self.down
+    drop_table :delayed_jobs
+  end
+end
diff --git a/ACSmI/Contracting/db/migrate/20190211170836_add_step_to_session.rb b/ACSmI/Contracting/db/migrate/20190211170836_add_step_to_session.rb
new file mode 100644
index 0000000000000000000000000000000000000000..7fc7ef414cda2fbad4de9e3c16c25a98095fe8eb
--- /dev/null
+++ b/ACSmI/Contracting/db/migrate/20190211170836_add_step_to_session.rb
@@ -0,0 +1,5 @@
+class AddStepToSession < ActiveRecord::Migration
+  def change
+    add_column :sessions, :page_step, :string
+  end
+end
diff --git a/ACSmI/Contracting/db/migrate/20190214143631_add_method_to_session.rb b/ACSmI/Contracting/db/migrate/20190214143631_add_method_to_session.rb
new file mode 100644
index 0000000000000000000000000000000000000000..c5bd1f67ab1a54d6389fc712d5136971699f196e
--- /dev/null
+++ b/ACSmI/Contracting/db/migrate/20190214143631_add_method_to_session.rb
@@ -0,0 +1,5 @@
+class AddMethodToSession < ActiveRecord::Migration
+  def change
+    add_column :sessions, :contract_method, :string
+  end
+end
diff --git a/ACSmI/Contracting/db/migrate/20190214175221_create_resource_infos.rb b/ACSmI/Contracting/db/migrate/20190214175221_create_resource_infos.rb
new file mode 100644
index 0000000000000000000000000000000000000000..375ce5bbed0dbdbcdf5cde127a1232f79c83b09c
--- /dev/null
+++ b/ACSmI/Contracting/db/migrate/20190214175221_create_resource_infos.rb
@@ -0,0 +1,9 @@
+class CreateResourceInfos < ActiveRecord::Migration
+  def change
+    create_table :resource_infos do |t|
+      t.string :amazon_customer_agreement_link
+
+      t.timestamps null: false
+    end
+  end
+end
diff --git a/ACSmI/Contracting/db/migrate/20190214175629_push_amazon_agreement_link.rb b/ACSmI/Contracting/db/migrate/20190214175629_push_amazon_agreement_link.rb
new file mode 100644
index 0000000000000000000000000000000000000000..beaeae8eb13522a21b361211b7f8f1757d28f67c
--- /dev/null
+++ b/ACSmI/Contracting/db/migrate/20190214175629_push_amazon_agreement_link.rb
@@ -0,0 +1,7 @@
+class PushAmazonAgreementLink < ActiveRecord::Migration
+  def change
+    if ResourceInfo.last.nil?
+      ResourceInfo.create :amazon_customer_agreement_link => 'https://aws.amazon.com/agreement/'
+    end
+  end
+end
diff --git a/ACSmI/Contracting/db/migrate/20190218153427_add_registration_status_to_session.rb b/ACSmI/Contracting/db/migrate/20190218153427_add_registration_status_to_session.rb
new file mode 100644
index 0000000000000000000000000000000000000000..b55b53fd980f5ae854a543b797c63ecd2beacfb0
--- /dev/null
+++ b/ACSmI/Contracting/db/migrate/20190218153427_add_registration_status_to_session.rb
@@ -0,0 +1,5 @@
+class AddRegistrationStatusToSession < ActiveRecord::Migration
+  def change
+    add_column :sessions, :registration_status, :string
+  end
+end
diff --git a/ACSmI/Contracting/db/migrate/20190219165511_remove_contract_method_from_session.rb b/ACSmI/Contracting/db/migrate/20190219165511_remove_contract_method_from_session.rb
new file mode 100644
index 0000000000000000000000000000000000000000..72729836d187d612b0eec19c8c8200921f630b66
--- /dev/null
+++ b/ACSmI/Contracting/db/migrate/20190219165511_remove_contract_method_from_session.rb
@@ -0,0 +1,5 @@
+class RemoveContractMethodFromSession < ActiveRecord::Migration
+  def change
+    remove_column :sessions, :contract_method
+  end
+end
diff --git a/ACSmI/Contracting/db/migrate/20190219165720_add_contracting_method_to_contracting_resource.rb b/ACSmI/Contracting/db/migrate/20190219165720_add_contracting_method_to_contracting_resource.rb
new file mode 100644
index 0000000000000000000000000000000000000000..38f5fa87269b2353a930df4fd4a5048dab7877db
--- /dev/null
+++ b/ACSmI/Contracting/db/migrate/20190219165720_add_contracting_method_to_contracting_resource.rb
@@ -0,0 +1,5 @@
+class AddContractingMethodToContractingResource < ActiveRecord::Migration
+  def change
+    add_column :contracting_resources, :contracting_method, :string
+  end
+end
diff --git a/ACSmI/Contracting/db/migrate/20190219175121_add_direct_creds_to_user.rb b/ACSmI/Contracting/db/migrate/20190219175121_add_direct_creds_to_user.rb
new file mode 100644
index 0000000000000000000000000000000000000000..6d2ae54f9388d0ec909b35825d0447b12463c8a4
--- /dev/null
+++ b/ACSmI/Contracting/db/migrate/20190219175121_add_direct_creds_to_user.rb
@@ -0,0 +1,8 @@
+class AddDirectCredsToUser < ActiveRecord::Migration
+  def change
+    add_column :users, :encrypted_direct_email, :string
+    add_column :users, :encrypted_direct_email_iv, :string
+    add_column :users, :encrypted_direct_password, :string
+    add_column :users, :encrypted_direct_password_iv, :string
+  end
+end
diff --git a/ACSmI/Contracting/db/migrate/20190326132118_add_registration_fields_to_user.rb b/ACSmI/Contracting/db/migrate/20190326132118_add_registration_fields_to_user.rb
new file mode 100644
index 0000000000000000000000000000000000000000..68f714e60fa87d7bd4cd6435cbe49236d9520681
--- /dev/null
+++ b/ACSmI/Contracting/db/migrate/20190326132118_add_registration_fields_to_user.rb
@@ -0,0 +1,7 @@
+class AddRegistrationFieldsToUser < ActiveRecord::Migration
+  def change
+    add_column :users, :country, :string
+    add_column :users, :city, :string
+    add_column :users, :zipcode, :string
+  end
+end
diff --git a/ACSmI/Contracting/db/migrate/20190401114922_add_settings_for_billing.rb b/ACSmI/Contracting/db/migrate/20190401114922_add_settings_for_billing.rb
new file mode 100644
index 0000000000000000000000000000000000000000..ac2269bde7f1294da7fe635fa9d657ba11f09478
--- /dev/null
+++ b/ACSmI/Contracting/db/migrate/20190401114922_add_settings_for_billing.rb
@@ -0,0 +1,8 @@
+class AddSettingsForBilling < ActiveRecord::Migration
+  def change
+    [Setting.create(key: 'billing_url', value: 'http://acsmi-billing.scaletools.com.ua/'),
+     Setting.create(key: 'billing_email', value: 'acsmi@cloudbroker.com'),
+     Setting.create(key: 'billing_password', value: '9a4D3L8b-35b0b1-92MG38b2-4SF6fe2e')
+    ].map(&:save)
+  end
+end
diff --git a/ACSmI/Contracting/db/migrate/20190408125857_add_sign_in_link_to_resource_infos_.rb b/ACSmI/Contracting/db/migrate/20190408125857_add_sign_in_link_to_resource_infos_.rb
new file mode 100644
index 0000000000000000000000000000000000000000..87fa945abed4093ec9415241664d7c3eecfc2889
--- /dev/null
+++ b/ACSmI/Contracting/db/migrate/20190408125857_add_sign_in_link_to_resource_infos_.rb
@@ -0,0 +1,5 @@
+class AddSignInLinkToResourceInfos < ActiveRecord::Migration
+  def change
+    add_column :resource_infos, :amazon_sign_in_link, :string
+  end
+end
diff --git a/ACSmI/Contracting/db/migrate/20190408130116_push_amazon_sign_in_link_to_resource_infos.rb b/ACSmI/Contracting/db/migrate/20190408130116_push_amazon_sign_in_link_to_resource_infos.rb
new file mode 100644
index 0000000000000000000000000000000000000000..c9c760d61e78823791546b1189e1e0677f5a9dde
--- /dev/null
+++ b/ACSmI/Contracting/db/migrate/20190408130116_push_amazon_sign_in_link_to_resource_infos.rb
@@ -0,0 +1,7 @@
+class PushAmazonSignInLinkToResourceInfos < ActiveRecord::Migration
+  def change
+    resource_info = ResourceInfo.last
+    resource_info.amazon_sign_in_link = 'https://console.aws.amazon.com/'
+    resource_info.save
+  end
+end
diff --git a/ACSmI/Contracting/db/schema.rb b/ACSmI/Contracting/db/schema.rb
index 4d9facf0715f2800022efdfc0d81b990bc488eea..9d9e337d170ade0b589427b65ce361b3d55c7353 100644
--- a/ACSmI/Contracting/db/schema.rb
+++ b/ACSmI/Contracting/db/schema.rb
@@ -11,18 +11,21 @@
 #
 # It's strongly recommended that you check this file into your version control system.
 
-ActiveRecord::Schema.define(version: 20180810130321) do
+ActiveRecord::Schema.define(version: 20190408130116) do
 
   create_table "contracting_resources", force: :cascade do |t|
-    t.string  "session_id",        null: false
-    t.integer "contract_id"
-    t.string  "input_resource_id"
-    t.string  "service_id"
-    t.string  "service_name"
-    t.string  "resource_id"
-    t.string  "resource_name"
-    t.integer "index"
-    t.string  "status"
+    t.string   "session_id",         null: false
+    t.integer  "contract_id"
+    t.string   "input_resource_id"
+    t.string   "service_id"
+    t.string   "service_name"
+    t.string   "resource_id"
+    t.string   "resource_name"
+    t.integer  "index"
+    t.string   "status"
+    t.datetime "created_at"
+    t.datetime "updated_at"
+    t.string   "contracting_method"
   end
 
   create_table "contracts", force: :cascade do |t|
@@ -42,6 +45,22 @@ ActiveRecord::Schema.define(version: 20180810130321) do
     t.integer  "contracting_resource_id"
   end
 
+  create_table "delayed_jobs", force: :cascade do |t|
+    t.integer  "priority",   default: 0, null: false
+    t.integer  "attempts",   default: 0, null: false
+    t.text     "handler",                null: false
+    t.text     "last_error"
+    t.datetime "run_at"
+    t.datetime "locked_at"
+    t.datetime "failed_at"
+    t.string   "locked_by"
+    t.string   "queue"
+    t.datetime "created_at"
+    t.datetime "updated_at"
+  end
+
+  add_index "delayed_jobs", ["priority", "run_at"], name: "delayed_jobs_priority"
+
   create_table "git_accesses", force: :cascade do |t|
     t.string   "session_id"
     t.string   "url"
@@ -53,12 +72,22 @@ ActiveRecord::Schema.define(version: 20180810130321) do
     t.datetime "updated_at"
   end
 
+  create_table "resource_infos", force: :cascade do |t|
+    t.string   "amazon_customer_agreement_link"
+    t.datetime "created_at",                     null: false
+    t.datetime "updated_at",                     null: false
+    t.string   "amazon_sign_in_link"
+  end
+
   create_table "sessions", id: false, force: :cascade do |t|
-    t.string   "id",          limit: 36
+    t.string   "id",                  limit: 36
     t.integer  "contract_id"
     t.integer  "user_id"
     t.datetime "created_at"
     t.datetime "updated_at"
+    t.string   "resource_object"
+    t.string   "page_step"
+    t.string   "registration_status"
   end
 
   create_table "settings", force: :cascade do |t|
@@ -87,17 +116,26 @@ ActiveRecord::Schema.define(version: 20180810130321) do
     t.datetime "created_at"
     t.datetime "updated_at"
     t.string   "key_pair_id"
+    t.string   "encrypted_direct_email"
+    t.string   "encrypted_direct_email_iv"
+    t.string   "encrypted_direct_password"
+    t.string   "encrypted_direct_password_iv"
+    t.string   "country"
+    t.string   "city"
+    t.string   "zipcode"
   end
 
   add_index "users", ["email"], name: "index_users_on_email", unique: true
   add_index "users", ["persistence_token"], name: "index_users_on_persistence_token", unique: true
 
   create_table "virtual_machines", force: :cascade do |t|
-    t.integer "contracting_resource_id"
-    t.string  "image"
-    t.string  "software_id"
-    t.string  "region_id"
-    t.string  "instance_type_id"
+    t.integer  "contracting_resource_id"
+    t.string   "image"
+    t.string   "software_id"
+    t.string   "region_id"
+    t.string   "instance_type_id"
+    t.datetime "created_at"
+    t.datetime "updated_at"
   end
 
 end
diff --git a/ACSmI/Contracting/db/seeds.rb b/ACSmI/Contracting/db/seeds.rb
index 96ee7d84fe3730a8294974c8019d9e54b372fc20..1aa19064a6253a2aa19b76c02952ec0a7857de61 100644
--- a/ACSmI/Contracting/db/seeds.rb
+++ b/ACSmI/Contracting/db/seeds.rb
@@ -3,4 +3,4 @@ Setting.create!(key: 'platform_email', value: 'acsmi.contracting@scaletools.com'
 Setting.create!(key: 'platform_password', value: '3RdtZYpp76PMKqd6')
 Setting.create!(key: 'discovery_url', value: 'http://85.91.40.245:8087')
 Setting.create!(key: 'discovery_username', value: 'admin')
-Setting.create!(key: 'discovery_password', value: 'decide')
+Setting.create!(key: 'discovery_password', value: 'decide')
\ No newline at end of file
diff --git a/ACSmI/Contracting/lib/billing_reporter.rb b/ACSmI/Contracting/lib/billing_reporter.rb
new file mode 100644
index 0000000000000000000000000000000000000000..be3154e51571ae9a57756b841ef39d805913bb7e
--- /dev/null
+++ b/ACSmI/Contracting/lib/billing_reporter.rb
@@ -0,0 +1,28 @@
+class BillingReporter
+  require 'rest_client'
+
+  def self.create_contract(acsmi_creds, contracting_resource, contracting_creds, contracting_price)
+    RestClient.post "#{Setting.value('billing_url')}/api/usage_records/created_contract", {
+    user: BillingReporter.billing_admin,
+    acsmi_creds: acsmi_creds,
+    contracting_resource: contracting_resource,
+    contracting_creds: contracting_creds,
+    contracting_pricing_data: contracting_price},
+    {content_type: :json, accept: :json}
+  end
+
+  def self.cancel_contract(cancellation_data)
+    RestClient.post "#{Setting.value('billing_url')}/api/usage_records/cancelled_contract",{
+    user: BillingReporter.billing_admin,
+    cancellation_data: cancellation_data}
+    {content_type: :json, accept: :json}
+  end
+
+  def self.billing_admin
+    {
+       email: Setting.value('billing_email'),
+       password: Setting.value('billing_password')
+    }
+  end
+
+end
\ No newline at end of file
diff --git a/ACSmI/Contracting/lib/platform_connector.rb b/ACSmI/Contracting/lib/platform_connector.rb
index cf0065c3e75be26c6f71f5cbec64b962ee41d2c5..eb34ceb8181fd5655d41583d7abd4dd925d22b0c 100644
--- a/ACSmI/Contracting/lib/platform_connector.rb
+++ b/ACSmI/Contracting/lib/platform_connector.rb
@@ -4,9 +4,14 @@ class PlatformConnector
 
   def self.register_user(email, first_name, last_name, password)
     # use different route for ACSml user registration?
+    if Setting.value('platform_url').include? 'decide-prototype'
+      user_role_id = '55e7f0fe-e5a7-416b-9dba-df3fea8a892b'
+    elsif Setting.value('platform_url').include? 'stage'
+      user_role_id = '0d5b743e-74be-4bd2-a727-dae74c671bb3'
+    end
     response = create_request('user', {email: email, 'first_name' => first_name, 'last_name' => last_name,
                                        password: password, 'password_confirmation' => password, phone: '+48000000000',
-                                       'user_role_name' => 'standard', limit: 5})
+                                       user_role_id: user_role_id, limit: 5})
     response['user']['id']
   end
 
@@ -51,12 +56,12 @@ class PlatformConnector
     Hash.from_xml(platform["/instance_types/#{instance_type_id}.xml"].get)['instance_type']
   end
 
-  def self.ask_configuration_assistant(request_params)
+  def self.ask_configuration_advisor(request_params)
     # Call to Configuration Assistant on CBP is to follow here
 
     puts "!!Sending #{request_params}"
     begin
-      platform_response = Hash.from_xml(platform['configuration_assistant.xml']
+      platform_response = Hash.from_xml(platform['configuration_advisor.xml']
                                             .post(request_params.to_xml(root: 'conditions'), content_type: :xml))
                                             .try(:[], 'configurations').try(&:first) || {}
       puts "!!PR #{platform_response}"
@@ -93,6 +98,10 @@ class PlatformConnector
     collection.first.select { |k, _| fields.include?(k) }
   end
 
+  def self.image_getter(software_id, region_id, instance_type_id)
+    Hash.from_xml(platform["/softwares/#{software_id}/deployment.xml?region_id=#{region_id}&verbose=true&instance_type_id=#{instance_type_id}"].get)['deployment']['image_identifier']
+  end
+
   class << self
 
     private
diff --git a/ACSmI/Contracting/lib/resource_mapper.rb b/ACSmI/Contracting/lib/resource_mapper.rb
index d65bfe7846231ec2cce7232efe449210c4062ae5..36766c2b7dfdd69754dd15937c2c2f5fc63f9cd4 100644
--- a/ACSmI/Contracting/lib/resource_mapper.rb
+++ b/ACSmI/Contracting/lib/resource_mapper.rb
@@ -2,7 +2,8 @@ class ResourceMapper
   @@possible_providers = {
       'amazon' => ['amazon ec2', 'ams3', 'amdb', 'amazon'],
       'cloudsigma' => %w(cloudsigma clsi),
-      'arsys' => ['arsys', 'arsy']
+      'arsys' => ['arsys', 'arsy'],
+      'azure' => ['azur']
   }
 
   @@optimization_map = {
@@ -34,10 +35,12 @@ class ResourceMapper
     requested_provider = match_provider(provider)
     request_params << { field: 'provider', value: requested_provider } if requested_provider
 
-    requested_optimization = match_optimization(optimized_for) && requested_provider == 'amazon'
-    request_params << { field: 'optimized_for', value: requested_optimization } if requested_optimization
+    if requested_provider == 'amazon'
+      requested_optimization = match_optimization(optimized_for)
+      request_params << { field: 'optimized_for', value: requested_optimization } if requested_optimization
+    end
 
-    PlatformConnector.ask_configuration_assistant(request_params)
+    PlatformConnector.ask_configuration_advisor(request_params)
   end
 
   class << self
diff --git a/ACSmI/Contracting/public/400.html b/ACSmI/Contracting/public/400.html
index 04a7c4033c4a582786b0468b49869a935e7b4379..9ac2ba09a6192529b3a22b29dfbd3015b674131f 100644
--- a/ACSmI/Contracting/public/400.html
+++ b/ACSmI/Contracting/public/400.html
@@ -1,66 +1,66 @@
-<!DOCTYPE html>
-<html>
-<head>
-    <title>We're sorry, but something went wrong (400)</title>
-    <meta name="viewport" content="width=device-width,initial-scale=1">
-    <style>
-        .rails-default-error-page {
-            background-color: #EFEFEF;
-            color: #2E2F30;
-            text-align: center;
-            font-family: arial, sans-serif;
-            margin: 0;
-        }
-
-        .rails-default-error-page div.dialog {
-            width: 95%;
-            max-width: 33em;
-            margin: 4em auto 0;
-        }
-
-        .rails-default-error-page div.dialog > div {
-            border: 1px solid #CCC;
-            border-right-color: #999;
-            border-left-color: #999;
-            border-bottom-color: #BBB;
-            border-top: #B00100 solid 4px;
-            border-top-left-radius: 9px;
-            border-top-right-radius: 9px;
-            background-color: white;
-            padding: 7px 12% 0;
-            box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
-        }
-
-        .rails-default-error-page h1 {
-            font-size: 100%;
-            color: #730E15;
-            line-height: 1.5em;
-        }
-
-        .rails-default-error-page div.dialog > p {
-            margin: 0 0 1em;
-            padding: 1em;
-            background-color: #F7F7F7;
-            border: 1px solid #CCC;
-            border-right-color: #999;
-            border-left-color: #999;
-            border-bottom-color: #999;
-            border-bottom-left-radius: 4px;
-            border-bottom-right-radius: 4px;
-            border-top-color: #DADADA;
-            color: #666;
-            box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
-        }
-    </style>
-</head>
-
-<body class="rails-default-error-page">
-<!-- This file lives in public/500.html -->
-<div class="dialog">
-    <div>
-        <h1>We're sorry, but something went wrong.</h1>
-    </div>
-    <p>If you are the application owner check the logs for more information.</p>
-</div>
-</body>
-</html>
+<!DOCTYPE html>
+<html>
+<head>
+    <title>We're sorry, but something went wrong (400)</title>
+    <meta name="viewport" content="width=device-width,initial-scale=1">
+    <style>
+        .rails-default-error-page {
+            background-color: #EFEFEF;
+            color: #2E2F30;
+            text-align: center;
+            font-family: arial, sans-serif;
+            margin: 0;
+        }
+
+        .rails-default-error-page div.dialog {
+            width: 95%;
+            max-width: 33em;
+            margin: 4em auto 0;
+        }
+
+        .rails-default-error-page div.dialog > div {
+            border: 1px solid #CCC;
+            border-right-color: #999;
+            border-left-color: #999;
+            border-bottom-color: #BBB;
+            border-top: #B00100 solid 4px;
+            border-top-left-radius: 9px;
+            border-top-right-radius: 9px;
+            background-color: white;
+            padding: 7px 12% 0;
+            box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
+        }
+
+        .rails-default-error-page h1 {
+            font-size: 100%;
+            color: #730E15;
+            line-height: 1.5em;
+        }
+
+        .rails-default-error-page div.dialog > p {
+            margin: 0 0 1em;
+            padding: 1em;
+            background-color: #F7F7F7;
+            border: 1px solid #CCC;
+            border-right-color: #999;
+            border-left-color: #999;
+            border-bottom-color: #999;
+            border-bottom-left-radius: 4px;
+            border-bottom-right-radius: 4px;
+            border-top-color: #DADADA;
+            color: #666;
+            box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
+        }
+    </style>
+</head>
+
+<body class="rails-default-error-page">
+<!-- This file lives in public/500.html -->
+<div class="dialog">
+    <div>
+        <h1>We're sorry, but something went wrong.</h1>
+    </div>
+    <p>If you are the application owner check the logs for more information.</p>
+</div>
+</body>
+</html>
diff --git a/ACSmI/Contracting/public/404.html b/ACSmI/Contracting/public/404.html
index 00431b8878cc60b29dff3c264a17ab68794fc834..b612547fc21d079889046e65d1fb135ec6921eaa 100644
--- a/ACSmI/Contracting/public/404.html
+++ b/ACSmI/Contracting/public/404.html
@@ -1,67 +1,67 @@
-<!DOCTYPE html>
-<html>
-<head>
-  <title>The page you were looking for doesn't exist (404)</title>
-  <meta name="viewport" content="width=device-width,initial-scale=1">
-  <style>
-  body {
-    background-color: #EFEFEF;
-    color: #2E2F30;
-    text-align: center;
-    font-family: arial, sans-serif;
-    margin: 0;
-  }
-
-  div.dialog {
-    width: 95%;
-    max-width: 33em;
-    margin: 4em auto 0;
-  }
-
-  div.dialog > div {
-    border: 1px solid #CCC;
-    border-right-color: #999;
-    border-left-color: #999;
-    border-bottom-color: #BBB;
-    border-top: #B00100 solid 4px;
-    border-top-left-radius: 9px;
-    border-top-right-radius: 9px;
-    background-color: white;
-    padding: 7px 12% 0;
-    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
-  }
-
-  h1 {
-    font-size: 100%;
-    color: #730E15;
-    line-height: 1.5em;
-  }
-
-  div.dialog > p {
-    margin: 0 0 1em;
-    padding: 1em;
-    background-color: #F7F7F7;
-    border: 1px solid #CCC;
-    border-right-color: #999;
-    border-left-color: #999;
-    border-bottom-color: #999;
-    border-bottom-left-radius: 4px;
-    border-bottom-right-radius: 4px;
-    border-top-color: #DADADA;
-    color: #666;
-    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
-  }
-  </style>
-</head>
-
-<body>
-  <!-- This file lives in public/404.html -->
-  <div class="dialog">
-    <div>
-      <h1>The page you were looking for doesn't exist.</h1>
-      <p>You may have mistyped the address or the page may have moved.</p>
-    </div>
-    <p>If you are the application owner check the logs for more information.</p>
-  </div>
-</body>
-</html>
+<!DOCTYPE html>
+<html>
+<head>
+  <title>The page you were looking for doesn't exist (404)</title>
+  <meta name="viewport" content="width=device-width,initial-scale=1">
+  <style>
+  body {
+    background-color: #EFEFEF;
+    color: #2E2F30;
+    text-align: center;
+    font-family: arial, sans-serif;
+    margin: 0;
+  }
+
+  div.dialog {
+    width: 95%;
+    max-width: 33em;
+    margin: 4em auto 0;
+  }
+
+  div.dialog > div {
+    border: 1px solid #CCC;
+    border-right-color: #999;
+    border-left-color: #999;
+    border-bottom-color: #BBB;
+    border-top: #B00100 solid 4px;
+    border-top-left-radius: 9px;
+    border-top-right-radius: 9px;
+    background-color: white;
+    padding: 7px 12% 0;
+    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
+  }
+
+  h1 {
+    font-size: 100%;
+    color: #730E15;
+    line-height: 1.5em;
+  }
+
+  div.dialog > p {
+    margin: 0 0 1em;
+    padding: 1em;
+    background-color: #F7F7F7;
+    border: 1px solid #CCC;
+    border-right-color: #999;
+    border-left-color: #999;
+    border-bottom-color: #999;
+    border-bottom-left-radius: 4px;
+    border-bottom-right-radius: 4px;
+    border-top-color: #DADADA;
+    color: #666;
+    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
+  }
+  </style>
+</head>
+
+<body>
+  <!-- This file lives in public/404.html -->
+  <div class="dialog">
+    <div>
+      <h1>The page you were looking for doesn't exist.</h1>
+      <p>You may have mistyped the address or the page may have moved.</p>
+    </div>
+    <p>If you are the application owner check the logs for more information.</p>
+  </div>
+</body>
+</html>
diff --git a/ACSmI/Contracting/public/422.html b/ACSmI/Contracting/public/422.html
index f31378653b56f8a2c446b1e0f9aae6b148324ba1..a21f82b3bdb817ecbc43f74c6fe360300739418a 100644
--- a/ACSmI/Contracting/public/422.html
+++ b/ACSmI/Contracting/public/422.html
@@ -1,67 +1,67 @@
-<!DOCTYPE html>
-<html>
-<head>
-  <title>The change you wanted was rejected (422)</title>
-  <meta name="viewport" content="width=device-width,initial-scale=1">
-  <style>
-  body {
-    background-color: #EFEFEF;
-    color: #2E2F30;
-    text-align: center;
-    font-family: arial, sans-serif;
-    margin: 0;
-  }
-
-  div.dialog {
-    width: 95%;
-    max-width: 33em;
-    margin: 4em auto 0;
-  }
-
-  div.dialog > div {
-    border: 1px solid #CCC;
-    border-right-color: #999;
-    border-left-color: #999;
-    border-bottom-color: #BBB;
-    border-top: #B00100 solid 4px;
-    border-top-left-radius: 9px;
-    border-top-right-radius: 9px;
-    background-color: white;
-    padding: 7px 12% 0;
-    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
-  }
-
-  h1 {
-    font-size: 100%;
-    color: #730E15;
-    line-height: 1.5em;
-  }
-
-  div.dialog > p {
-    margin: 0 0 1em;
-    padding: 1em;
-    background-color: #F7F7F7;
-    border: 1px solid #CCC;
-    border-right-color: #999;
-    border-left-color: #999;
-    border-bottom-color: #999;
-    border-bottom-left-radius: 4px;
-    border-bottom-right-radius: 4px;
-    border-top-color: #DADADA;
-    color: #666;
-    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
-  }
-  </style>
-</head>
-
-<body>
-  <!-- This file lives in public/422.html -->
-  <div class="dialog">
-    <div>
-      <h1>The change you wanted was rejected.</h1>
-      <p>Maybe you tried to change something you didn't have access to.</p>
-    </div>
-    <p>If you are the application owner check the logs for more information.</p>
-  </div>
-</body>
-</html>
+<!DOCTYPE html>
+<html>
+<head>
+  <title>The change you wanted was rejected (422)</title>
+  <meta name="viewport" content="width=device-width,initial-scale=1">
+  <style>
+  body {
+    background-color: #EFEFEF;
+    color: #2E2F30;
+    text-align: center;
+    font-family: arial, sans-serif;
+    margin: 0;
+  }
+
+  div.dialog {
+    width: 95%;
+    max-width: 33em;
+    margin: 4em auto 0;
+  }
+
+  div.dialog > div {
+    border: 1px solid #CCC;
+    border-right-color: #999;
+    border-left-color: #999;
+    border-bottom-color: #BBB;
+    border-top: #B00100 solid 4px;
+    border-top-left-radius: 9px;
+    border-top-right-radius: 9px;
+    background-color: white;
+    padding: 7px 12% 0;
+    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
+  }
+
+  h1 {
+    font-size: 100%;
+    color: #730E15;
+    line-height: 1.5em;
+  }
+
+  div.dialog > p {
+    margin: 0 0 1em;
+    padding: 1em;
+    background-color: #F7F7F7;
+    border: 1px solid #CCC;
+    border-right-color: #999;
+    border-left-color: #999;
+    border-bottom-color: #999;
+    border-bottom-left-radius: 4px;
+    border-bottom-right-radius: 4px;
+    border-top-color: #DADADA;
+    color: #666;
+    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
+  }
+  </style>
+</head>
+
+<body>
+  <!-- This file lives in public/422.html -->
+  <div class="dialog">
+    <div>
+      <h1>The change you wanted was rejected.</h1>
+      <p>Maybe you tried to change something you didn't have access to.</p>
+    </div>
+    <p>If you are the application owner check the logs for more information.</p>
+  </div>
+</body>
+</html>
diff --git a/ACSmI/Contracting/public/500.html b/ACSmI/Contracting/public/500.html
index 860aefd95e68a1cbb1a312730d5195c72213600c..061abc587dcac4cdb1d62a890e4fd4bb20b8cb61 100644
--- a/ACSmI/Contracting/public/500.html
+++ b/ACSmI/Contracting/public/500.html
@@ -1,66 +1,66 @@
-<!DOCTYPE html>
-<html>
-<head>
-  <title>We're sorry, but something went wrong (500)</title>
-  <meta name="viewport" content="width=device-width,initial-scale=1">
-  <style>
-  body {
-    background-color: #EFEFEF;
-    color: #2E2F30;
-    text-align: center;
-    font-family: arial, sans-serif;
-    margin: 0;
-  }
-
-  div.dialog {
-    width: 95%;
-    max-width: 33em;
-    margin: 4em auto 0;
-  }
-
-  div.dialog > div {
-    border: 1px solid #CCC;
-    border-right-color: #999;
-    border-left-color: #999;
-    border-bottom-color: #BBB;
-    border-top: #B00100 solid 4px;
-    border-top-left-radius: 9px;
-    border-top-right-radius: 9px;
-    background-color: white;
-    padding: 7px 12% 0;
-    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
-  }
-
-  h1 {
-    font-size: 100%;
-    color: #730E15;
-    line-height: 1.5em;
-  }
-
-  div.dialog > p {
-    margin: 0 0 1em;
-    padding: 1em;
-    background-color: #F7F7F7;
-    border: 1px solid #CCC;
-    border-right-color: #999;
-    border-left-color: #999;
-    border-bottom-color: #999;
-    border-bottom-left-radius: 4px;
-    border-bottom-right-radius: 4px;
-    border-top-color: #DADADA;
-    color: #666;
-    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
-  }
-  </style>
-</head>
-
-<body>
-  <!-- This file lives in public/500.html -->
-  <div class="dialog">
-    <div>
-      <h1>We're sorry, but something went wrong.</h1>
-    </div>
-    <p>If you are the application owner check the logs for more information.</p>
-  </div>
-</body>
-</html>
+<!DOCTYPE html>
+<html>
+<head>
+  <title>We're sorry, but something went wrong (500)</title>
+  <meta name="viewport" content="width=device-width,initial-scale=1">
+  <style>
+  body {
+    background-color: #EFEFEF;
+    color: #2E2F30;
+    text-align: center;
+    font-family: arial, sans-serif;
+    margin: 0;
+  }
+
+  div.dialog {
+    width: 95%;
+    max-width: 33em;
+    margin: 4em auto 0;
+  }
+
+  div.dialog > div {
+    border: 1px solid #CCC;
+    border-right-color: #999;
+    border-left-color: #999;
+    border-bottom-color: #BBB;
+    border-top: #B00100 solid 4px;
+    border-top-left-radius: 9px;
+    border-top-right-radius: 9px;
+    background-color: white;
+    padding: 7px 12% 0;
+    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
+  }
+
+  h1 {
+    font-size: 100%;
+    color: #730E15;
+    line-height: 1.5em;
+  }
+
+  div.dialog > p {
+    margin: 0 0 1em;
+    padding: 1em;
+    background-color: #F7F7F7;
+    border: 1px solid #CCC;
+    border-right-color: #999;
+    border-left-color: #999;
+    border-bottom-color: #999;
+    border-bottom-left-radius: 4px;
+    border-bottom-right-radius: 4px;
+    border-top-color: #DADADA;
+    color: #666;
+    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
+  }
+  </style>
+</head>
+
+<body>
+  <!-- This file lives in public/500.html -->
+  <div class="dialog">
+    <div>
+      <h1>We're sorry, but something went wrong.</h1>
+    </div>
+    <p>If you are the application owner check the logs for more information.</p>
+  </div>
+</body>
+</html>
diff --git a/ACSmI/Contracting/public/robots.txt b/ACSmI/Contracting/public/robots.txt
index 33838cdf1b1e6ecd6fcba86dc2aa925d8a5d0ace..3c9c7c01f30b90e009de2d15952ae83230f8e37a 100644
--- a/ACSmI/Contracting/public/robots.txt
+++ b/ACSmI/Contracting/public/robots.txt
@@ -1,5 +1,5 @@
-# See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file
-#
-# To ban all spiders from the entire site uncomment the next two lines:
-# User-agent: *
-# Disallow: /
+# See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file
+#
+# To ban all spiders from the entire site uncomment the next two lines:
+# User-agent: *
+# Disallow: /
diff --git a/ACSmI/Contracting/spec/rails_helper.rb b/ACSmI/Contracting/spec/rails_helper.rb
index 97fb6e74c72e9cec1d4cfe11eb6a3c455f3f956f..7fd785914403d81df201b7c89a59fd5ab7640416 100644
--- a/ACSmI/Contracting/spec/rails_helper.rb
+++ b/ACSmI/Contracting/spec/rails_helper.rb
@@ -1,55 +1,55 @@
-# This file is copied to spec/ when you run 'rails generate rspec:install'
-Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
-require 'spec_helper'
-ENV['RAILS_ENV'] ||= 'test'
-require File.expand_path('../../config/environment', __FILE__)
-# Prevent database truncation if the environment is production
-abort("The Rails environment is running in production mode!") if Rails.env.production?
-require 'rspec/rails'
-# Add additional requires below this line. Rails is not loaded until this point!
-
-# Requires supporting ruby files with custom matchers and macros, etc, in
-# spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are
-# run as spec files by default. This means that files in spec/support that end
-# in _spec.rb will both be required and run as specs, causing the specs to be
-# run twice. It is recommended that you do not name files matching this glob to
-# end with _spec.rb. You can configure this pattern with the --pattern
-# option on the command line or in ~/.rspec, .rspec or `.rspec-local`.
-#
-# The following line is provided for convenience purposes. It has the downside
-# of increasing the boot-up time by auto-requiring all files in the support
-# directory. Alternatively, in the individual `*_spec.rb` files, manually
-# require only the support files necessary.
-#
-# Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
-
-# Checks for pending migration and applies them before tests are run.
-# If you are not using ActiveRecord, you can remove this line.
-ActiveRecord::Migration.maintain_test_schema!
-
-RSpec.configure do |config|
-  # If you're not using ActiveRecord, or you'd prefer not to run each of your
-  # examples within a transaction, remove the following line or assign false
-  # instead of true.
-  config.use_transactional_fixtures = true
-
-  # RSpec Rails can automatically mix in different behaviours to your tests
-  # based on their file location, for example enabling you to call `get` and
-  # `post` in specs under `spec/controllers`.
-  #
-  # You can disable this behaviour by removing the line below, and instead
-  # explicitly tag your specs with their type, e.g.:
-  #
-  #     RSpec.describe UsersController, :type => :controller do
-  #       # ...
-  #     end
-  #
-  # The different available types are documented in the features, such as in
-  # https://relishapp.com/rspec/rspec-rails/docs
-  config.infer_spec_type_from_file_location!
-
-  # Filter lines from Rails gems in backtraces.
-  config.filter_rails_from_backtrace!
-  # arbitrary gems may also be filtered via:
-  # config.filter_gems_from_backtrace("gem name")
-end
+# This file is copied to spec/ when you run 'rails generate rspec:install'
+Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
+require 'spec_helper'
+ENV['RAILS_ENV'] ||= 'test'
+require File.expand_path('../../config/environment', __FILE__)
+# Prevent database truncation if the environment is production
+abort("The Rails environment is running in production mode!") if Rails.env.production?
+require 'rspec/rails'
+# Add additional requires below this line. Rails is not loaded until this point!
+
+# Requires supporting ruby files with custom matchers and macros, etc, in
+# spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are
+# run as spec files by default. This means that files in spec/support that end
+# in _spec.rb will both be required and run as specs, causing the specs to be
+# run twice. It is recommended that you do not name files matching this glob to
+# end with _spec.rb. You can configure this pattern with the --pattern
+# option on the command line or in ~/.rspec, .rspec or `.rspec-local`.
+#
+# The following line is provided for convenience purposes. It has the downside
+# of increasing the boot-up time by auto-requiring all files in the support
+# directory. Alternatively, in the individual `*_spec.rb` files, manually
+# require only the support files necessary.
+#
+# Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
+
+# Checks for pending migration and applies them before tests are run.
+# If you are not using ActiveRecord, you can remove this line.
+ActiveRecord::Migration.maintain_test_schema!
+
+RSpec.configure do |config|
+  # If you're not using ActiveRecord, or you'd prefer not to run each of your
+  # examples within a transaction, remove the following line or assign false
+  # instead of true.
+  config.use_transactional_fixtures = true
+
+  # RSpec Rails can automatically mix in different behaviours to your tests
+  # based on their file location, for example enabling you to call `get` and
+  # `post` in specs under `spec/controllers`.
+  #
+  # You can disable this behaviour by removing the line below, and instead
+  # explicitly tag your specs with their type, e.g.:
+  #
+  #     RSpec.describe UsersController, :type => :controller do
+  #       # ...
+  #     end
+  #
+  # The different available types are documented in the features, such as in
+  # https://relishapp.com/rspec/rspec-rails/docs
+  config.infer_spec_type_from_file_location!
+
+  # Filter lines from Rails gems in backtraces.
+  config.filter_rails_from_backtrace!
+  # arbitrary gems may also be filtered via:
+  # config.filter_gems_from_backtrace("gem name")
+end
diff --git a/ACSmI/Contracting/spec/spec_helper.rb b/ACSmI/Contracting/spec/spec_helper.rb
index d2d8936be472fab6a8fd77ed96c9258ad07b0f4f..ce33d66df6929946abe9cfb7d5824010ae09fb35 100644
--- a/ACSmI/Contracting/spec/spec_helper.rb
+++ b/ACSmI/Contracting/spec/spec_helper.rb
@@ -1,96 +1,96 @@
-# This file was generated by the `rails generate rspec:install` command. Conventionally, all
-# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
-# The generated `.rspec` file contains `--require spec_helper` which will cause
-# this file to always be loaded, without a need to explicitly require it in any
-# files.
-#
-# Given that it is always loaded, you are encouraged to keep this file as
-# light-weight as possible. Requiring heavyweight dependencies from this file
-# will add to the boot time of your test suite on EVERY test run, even for an
-# individual file that may not need all of that loaded. Instead, consider making
-# a separate helper file that requires the additional dependencies and performs
-# the additional setup, and require it from the spec files that actually need
-# it.
-#
-# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
-RSpec.configure do |config|
-  # rspec-expectations config goes here. You can use an alternate
-  # assertion/expectation library such as wrong or the stdlib/minitest
-  # assertions if you prefer.
-  config.expect_with :rspec do |expectations|
-    # This option will default to `true` in RSpec 4. It makes the `description`
-    # and `failure_message` of custom matchers include text for helper methods
-    # defined using `chain`, e.g.:
-    #     be_bigger_than(2).and_smaller_than(4).description
-    #     # => "be bigger than 2 and smaller than 4"
-    # ...rather than:
-    #     # => "be bigger than 2"
-    expectations.include_chain_clauses_in_custom_matcher_descriptions = true
-  end
-
-  # rspec-mocks config goes here. You can use an alternate test double
-  # library (such as bogus or mocha) by changing the `mock_with` option here.
-  config.mock_with :rspec do |mocks|
-    # Prevents you from mocking or stubbing a method that does not exist on
-    # a real object. This is generally recommended, and will default to
-    # `true` in RSpec 4.
-    mocks.verify_partial_doubles = true
-  end
-
-  # This option will default to `:apply_to_host_groups` in RSpec 4 (and will
-  # have no way to turn it off -- the option exists only for backwards
-  # compatibility in RSpec 3). It causes shared context metadata to be
-  # inherited by the metadata hash of host groups and examples, rather than
-  # triggering implicit auto-inclusion in groups with matching metadata.
-  config.shared_context_metadata_behavior = :apply_to_host_groups
-
-# The settings below are suggested to provide a good initial experience
-# with RSpec, but feel free to customize to your heart's content.
-=begin
-  # This allows you to limit a spec run to individual examples or groups
-  # you care about by tagging them with `:focus` metadata. When nothing
-  # is tagged with `:focus`, all examples get run. RSpec also provides
-  # aliases for `it`, `describe`, and `context` that include `:focus`
-  # metadata: `fit`, `fdescribe` and `fcontext`, respectively.
-  config.filter_run_when_matching :focus
-
-  # Allows RSpec to persist some state between runs in order to support
-  # the `--only-failures` and `--next-failure` CLI options. We recommend
-  # you configure your source control system to ignore this file.
-  config.example_status_persistence_file_path = "spec/examples.txt"
-
-  # Limits the available syntax to the non-monkey patched syntax that is
-  # recommended. For more details, see:
-  #   - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/
-  #   - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
-  #   - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode
-  config.disable_monkey_patching!
-
-  # Many RSpec users commonly either run the entire suite or an individual
-  # file, and it's useful to allow more verbose output when running an
-  # individual spec file.
-  if config.files_to_run.one?
-    # Use the documentation formatter for detailed output,
-    # unless a formatter has already been configured
-    # (e.g. via a command-line flag).
-    config.default_formatter = "doc"
-  end
-
-  # Print the 10 slowest examples and example groups at the
-  # end of the spec run, to help surface which specs are running
-  # particularly slow.
-  config.profile_examples = 10
-
-  # Run specs in random order to surface order dependencies. If you find an
-  # order dependency and want to debug it, you can fix the order by providing
-  # the seed, which is printed after each run.
-  #     --seed 1234
-  config.order = :random
-
-  # Seed global randomization in this process using the `--seed` CLI option.
-  # Setting this allows you to use `--seed` to deterministically reproduce
-  # test failures related to randomization by passing the same `--seed` value
-  # as the one that triggered the failure.
-  Kernel.srand config.seed
-=end
-end
+# This file was generated by the `rails generate rspec:install` command. Conventionally, all
+# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
+# The generated `.rspec` file contains `--require spec_helper` which will cause
+# this file to always be loaded, without a need to explicitly require it in any
+# files.
+#
+# Given that it is always loaded, you are encouraged to keep this file as
+# light-weight as possible. Requiring heavyweight dependencies from this file
+# will add to the boot time of your test suite on EVERY test run, even for an
+# individual file that may not need all of that loaded. Instead, consider making
+# a separate helper file that requires the additional dependencies and performs
+# the additional setup, and require it from the spec files that actually need
+# it.
+#
+# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
+RSpec.configure do |config|
+  # rspec-expectations config goes here. You can use an alternate
+  # assertion/expectation library such as wrong or the stdlib/minitest
+  # assertions if you prefer.
+  config.expect_with :rspec do |expectations|
+    # This option will default to `true` in RSpec 4. It makes the `description`
+    # and `failure_message` of custom matchers include text for helper methods
+    # defined using `chain`, e.g.:
+    #     be_bigger_than(2).and_smaller_than(4).description
+    #     # => "be bigger than 2 and smaller than 4"
+    # ...rather than:
+    #     # => "be bigger than 2"
+    expectations.include_chain_clauses_in_custom_matcher_descriptions = true
+  end
+
+  # rspec-mocks config goes here. You can use an alternate test double
+  # library (such as bogus or mocha) by changing the `mock_with` option here.
+  config.mock_with :rspec do |mocks|
+    # Prevents you from mocking or stubbing a method that does not exist on
+    # a real object. This is generally recommended, and will default to
+    # `true` in RSpec 4.
+    mocks.verify_partial_doubles = true
+  end
+
+  # This option will default to `:apply_to_host_groups` in RSpec 4 (and will
+  # have no way to turn it off -- the option exists only for backwards
+  # compatibility in RSpec 3). It causes shared context metadata to be
+  # inherited by the metadata hash of host groups and examples, rather than
+  # triggering implicit auto-inclusion in groups with matching metadata.
+  config.shared_context_metadata_behavior = :apply_to_host_groups
+
+# The settings below are suggested to provide a good initial experience
+# with RSpec, but feel free to customize to your heart's content.
+=begin
+  # This allows you to limit a spec run to individual examples or groups
+  # you care about by tagging them with `:focus` metadata. When nothing
+  # is tagged with `:focus`, all examples get run. RSpec also provides
+  # aliases for `it`, `describe`, and `context` that include `:focus`
+  # metadata: `fit`, `fdescribe` and `fcontext`, respectively.
+  config.filter_run_when_matching :focus
+
+  # Allows RSpec to persist some state between runs in order to support
+  # the `--only-failures` and `--next-failure` CLI options. We recommend
+  # you configure your source control system to ignore this file.
+  config.example_status_persistence_file_path = "spec/examples.txt"
+
+  # Limits the available syntax to the non-monkey patched syntax that is
+  # recommended. For more details, see:
+  #   - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/
+  #   - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
+  #   - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode
+  config.disable_monkey_patching!
+
+  # Many RSpec users commonly either run the entire suite or an individual
+  # file, and it's useful to allow more verbose output when running an
+  # individual spec file.
+  if config.files_to_run.one?
+    # Use the documentation formatter for detailed output,
+    # unless a formatter has already been configured
+    # (e.g. via a command-line flag).
+    config.default_formatter = "doc"
+  end
+
+  # Print the 10 slowest examples and example groups at the
+  # end of the spec run, to help surface which specs are running
+  # particularly slow.
+  config.profile_examples = 10
+
+  # Run specs in random order to surface order dependencies. If you find an
+  # order dependency and want to debug it, you can fix the order by providing
+  # the seed, which is printed after each run.
+  #     --seed 1234
+  config.order = :random
+
+  # Seed global randomization in this process using the `--seed` CLI option.
+  # Setting this allows you to use `--seed` to deterministically reproduce
+  # test failures related to randomization by passing the same `--seed` value
+  # as the one that triggered the failure.
+  Kernel.srand config.seed
+=end
+end
diff --git a/ACSmI/Contracting/spec/support/factory_girl.rb b/ACSmI/Contracting/spec/support/factory_girl.rb
index 2b4e81cec2fc215a5952114e18b6bea05af078f0..00debe60384fb4eeb1e8b9eb888737afa7482403 100644
--- a/ACSmI/Contracting/spec/support/factory_girl.rb
+++ b/ACSmI/Contracting/spec/support/factory_girl.rb
@@ -1,4 +1,4 @@
-# spec/support/factory_girl.rb
-RSpec.configure do |config|
-  config.include FactoryGirl::Syntax::Methods
+# spec/support/factory_girl.rb
+RSpec.configure do |config|
+  config.include FactoryGirl::Syntax::Methods
 end
\ No newline at end of file
diff --git a/ACSmI/Contracting/test/controllers/resource_registration_controller_test.rb b/ACSmI/Contracting/test/controllers/resource_registration_controller_test.rb
new file mode 100644
index 0000000000000000000000000000000000000000..be93b15c4273ad5321767bced49d33d151fdaf63
--- /dev/null
+++ b/ACSmI/Contracting/test/controllers/resource_registration_controller_test.rb
@@ -0,0 +1,7 @@
+require 'test_helper'
+
+class ResourceRegistrationControllerTest < ActionController::TestCase
+  # test "the truth" do
+  #   assert true
+  # end
+end
diff --git a/ACSmI/Contracting/test/fixtures/resource_infos.yml b/ACSmI/Contracting/test/fixtures/resource_infos.yml
new file mode 100644
index 0000000000000000000000000000000000000000..0aba04af751e7c19e7606c041fa13792580e6823
--- /dev/null
+++ b/ACSmI/Contracting/test/fixtures/resource_infos.yml
@@ -0,0 +1,9 @@
+# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
+
+one:
+  amazon_customer_agreement_link: MyString
+  string: MyString
+
+two:
+  amazon_customer_agreement_link: MyString
+  string: MyString
diff --git a/ACSmI/Contracting/test/jobs/amazon_sms_verify_job_test.rb b/ACSmI/Contracting/test/jobs/amazon_sms_verify_job_test.rb
new file mode 100644
index 0000000000000000000000000000000000000000..89cb752fd71ad7e4e0c29d8b2f160590e9d9470c
--- /dev/null
+++ b/ACSmI/Contracting/test/jobs/amazon_sms_verify_job_test.rb
@@ -0,0 +1,7 @@
+require 'test_helper'
+
+class AmazonSmsVerifyJobTest < ActiveJob::TestCase
+  # test "the truth" do
+  #   assert true
+  # end
+end
diff --git a/ACSmI/Contracting/test/models/resource_info_test.rb b/ACSmI/Contracting/test/models/resource_info_test.rb
new file mode 100644
index 0000000000000000000000000000000000000000..6ca65dcb5f814b8bd9a5ff9e176484bd4a9ea89a
--- /dev/null
+++ b/ACSmI/Contracting/test/models/resource_info_test.rb
@@ -0,0 +1,7 @@
+require 'test_helper'
+
+class ResourceInfoTest < ActiveSupport::TestCase
+  # test "the truth" do
+  #   assert true
+  # end
+end
diff --git a/ACSmI/Discovery/.gitignore b/ACSmI/Discovery/.gitignore
index 31e22da69a5078a4b432c0e6c72ed5f4856d8467..b5c4e0f164e9584608b127f0f1cb1ade2d2f86f0 100644
--- a/ACSmI/Discovery/.gitignore
+++ b/ACSmI/Discovery/.gitignore
@@ -1,9 +1,10 @@
-**/bin/
-**/sources/
-**/target/
-**/generated/
-**/.classpath
-**/.settings/
-**/node_modules/
-jhipster-jdl.jh
-**/*.log
+**/bin/
+**/sources/
+!**/sources/sources.json
+**/target/
+**/generated/
+**/.classpath
+**/.settings/
+**/node_modules/
+jhipster-jdl.jh
+**/*.log
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/.project b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/.project
index 4960e469fd380a26e4693f9cb7e2973b5b4a2351..193a7edec7a004e42d993a11491f4611677c33e9 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/.project
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/.project
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <projectDescription>
-	<name>eu.decideh2020.ACSmI.discovery.backend.client</name>
+	<name>eu.decideh2020.acsmi.backend.services.client</name>
 	<comment></comment>
 	<projects>
 	</projects>
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/acsmi.discovery.client.generate.sh b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/acsmi.discovery.client.generate.sh
index 92fbeeaa149d9ff43da92d7433397965aeff4af4..3e097d36a1b4db8418a710a2774256c2fdd46a25 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/acsmi.discovery.client.generate.sh
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/acsmi.discovery.client.generate.sh
@@ -2,7 +2,8 @@
 echo "Generation acsmi discovery client jaxrs script"
 #apt-get update
 #apt-get install -y wget
-URL="http://localhost:12080/acsmiservices/v2/api-docs"
+#URL="http://85.91.40.245:8087/acsmiservices/v2/api-docs"
+URL="http://localhost:8080/acsmiservices/v2/api-docs"
 
 BASE_PATH=$(cygpath $CURRENT_DIR)
 TMP_RELATIVE_NAME="tmp/eu.decideh2020.acsmi.backend.services.client"
@@ -45,7 +46,7 @@ if !  $( java -version 2>&1 >/dev/null | grep -q "Runtime Environment" ) ; then
 	apt-get install -y default-jdk
 fi
 
-java -jar $CURRENT_DIR/swagger-codegen/modules/swagger-codegen-cli/target/swagger-codegen-cli.jar generate -i $WIN_ORIG_FILE -l jaxrs-cxf-client -o $WIN_TMP_DIR -c $WIN_ORIG_CONFIG_FILE
+java -jar $CURRENT_DIR\swaggerCodegenCli64\swagger-codegen-cli.jar generate -i $WIN_ORIG_FILE -l jaxrs-cxf-client -o $WIN_TMP_DIR -c $WIN_ORIG_CONFIG_FILE
 
 CHANGED=0
 
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/pom.xml b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/pom.xml
index 5dbf84531ff39d4cdfed9ef737fc6ad15e2ea10e..25038243c7010bbe0639ddf70e90486aa9a06d41 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/pom.xml
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/pom.xml
@@ -1,174 +1,174 @@
-<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/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <groupId>eu.decideh2020</groupId>
-  <artifactId>eu.decideh2020.ACSmI.discovery.backend.client</artifactId>
-  <packaging>jar</packaging>
-  <name>eu.decideh2020.ACSmI.discovery.backend.client</name>
-  <description>acsmiservices API documentation</description>
-  <version>1.0.0</version>
-  <build>
-    <sourceDirectory>src/main/java</sourceDirectory>
-    <plugins>
-      <plugin>
-        <artifactId>maven-failsafe-plugin</artifactId>
-        <version>2.6</version>
-        <executions>
-          <execution>
-            <goals>
-              <goal>integration-test</goal>
-              <goal>verify</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-      <!--plugin>
-        <groupId>org.eclipse.jetty</groupId>
-        <artifactId>jetty-maven-plugin</artifactId>
-        <version>${jetty-version}</version>
-        <configuration>
-          <webApp>
-            <contextPath>/</contextPath>
-          </webApp>
-          <webAppSourceDirectory>target/${project.artifactId}-${project.version}</webAppSourceDirectory>
-          <stopPort>8079</stopPort>
-          <stopKey>stopit</stopKey>
-          <httpConnector>
-            <port></port>
-            <idleTimeout>60000</idleTimeout>
-          </httpConnector>
-        </configuration>
-        <executions>
-          <execution>
-            <id>start-jetty</id>
-            <phase>pre-integration-test</phase>
-            <goals>
-              <goal>start</goal>
-            </goals>
-            <configuration>
-              <scanIntervalSeconds>0</scanIntervalSeconds>
-              <daemon>true</daemon>
-            </configuration>
-          </execution>
-          <execution>
-            <id>stop-jetty</id>
-            <phase>post-integration-test</phase>
-            <goals>
-              <goal>stop</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin-->
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>build-helper-maven-plugin</artifactId>
-        <version>1.9.1</version>
-        <executions>
-          <execution>
-            <id>add-source</id>
-            <phase>generate-sources</phase>
-            <goals>
-              <goal>add-source</goal>
-            </goals>
-            <configuration>
-              <sources>
-                <source>src/gen/java</source>
-              </sources>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-  <dependencies>
-    <dependency>
-      <groupId>io.swagger</groupId>
-      <artifactId>swagger-jaxrs</artifactId>
-      <scope>compile</scope>
-      <version>${swagger-core-version}</version>
-    </dependency>
-    <dependency>
-      <groupId>ch.qos.logback</groupId>
-      <artifactId>logback-classic</artifactId>
-      <version>${logback-version}</version>
-      <scope>compile</scope>
-    </dependency>
-    <dependency>
-      <groupId>ch.qos.logback</groupId>
-      <artifactId>logback-core</artifactId>
-      <version>${logback-version}</version>
-      <scope>compile</scope>
-    </dependency>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <version>${junit-version}</version>
-      <scope>test</scope>
-    </dependency>
-    <!-- CXF Client -->
-    <dependency>
-        <groupId>org.apache.cxf</groupId>
-        <artifactId>cxf-rt-rs-client</artifactId>
-        <version>${cxf-version}</version>
-        <scope>test</scope>
-    </dependency>
-    
-     <!-- CXF server -->
-    <dependency>
-        <groupId>org.apache.cxf</groupId>
-        <artifactId>cxf-rt-frontend-jaxrs</artifactId>
-        <version>${cxf-version}</version>
-        <scope>compile</scope>
-    </dependency>
-    <dependency>
-        <groupId>org.apache.cxf</groupId>
-        <artifactId>cxf-rt-rs-service-description</artifactId>
-        <version>${cxf-version}</version>
-        <scope>compile</scope>
-    </dependency>
-    <dependency>
-        <groupId>org.apache.cxf</groupId>
-        <artifactId>cxf-rt-ws-policy</artifactId>
-        <version>${cxf-version}</version>
-        <scope>compile</scope>
-    </dependency>
-    <dependency>
-        <groupId>org.apache.cxf</groupId>
-        <artifactId>cxf-rt-wsdl</artifactId>
-        <version>${cxf-version}</version>
-        <scope>compile</scope>
-    </dependency>
-    <dependency>
-        <groupId>com.fasterxml.jackson.jaxrs</groupId>
-        <artifactId>jackson-jaxrs-json-provider</artifactId>
-        <version>${jackson-jaxrs-version}</version>
-        <scope>compile</scope>
-    </dependency>
-    <dependency>
-        <groupId>com.fasterxml.jackson.datatype</groupId>
-        <artifactId>jackson-datatype-joda</artifactId>
-        <version>${jackson-jaxrs-version}</version>
-    </dependency>
-  </dependencies>
-  <repositories>
-    <repository>
-      <id>sonatype-snapshots</id>
-      <url>https://oss.sonatype.org/content/repositories/snapshots</url>
-      <snapshots>
-        <enabled>true</enabled>
-      </snapshots>
-    </repository>
-  </repositories>
-  <properties>
-    <java.version>1.7</java.version>
-    <maven.compiler.source>${java.version}</maven.compiler.source>
-    <maven.compiler.target>${java.version}</maven.compiler.target>
-    <swagger-core-version>1.5.18</swagger-core-version>
-    <jetty-version>9.2.9.v20150224</jetty-version>
-    <junit-version>4.12</junit-version>
-    <logback-version>1.1.7</logback-version>
-    <servlet-api-version>2.5</servlet-api-version>
-    <cxf-version>3.2.1</cxf-version>
-    <jackson-jaxrs-version>2.9.1</jackson-jaxrs-version>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-  </properties>
-</project>
+<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/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>eu.decideh2020</groupId>
+  <artifactId>eu.decideh2020.ACSmI.discovery.backend.client</artifactId>
+  <packaging>jar</packaging>
+  <name>eu.decideh2020.ACSmI.discovery.backend.client</name>
+  <version>1.0.0</version>
+  <build>
+    <sourceDirectory>src/main/java</sourceDirectory>
+    <plugins>
+      <plugin>
+        <artifactId>maven-failsafe-plugin</artifactId>
+        <version>2.6</version>
+        <executions>
+          <execution>
+            <goals>
+              <goal>integration-test</goal>
+              <goal>verify</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+      <!--plugin>
+        <groupId>org.eclipse.jetty</groupId>
+        <artifactId>jetty-maven-plugin</artifactId>
+        <version>${jetty-version}</version>
+        <configuration>
+          <webApp>
+            <contextPath>/</contextPath>
+          </webApp>
+          <webAppSourceDirectory>target/${project.artifactId}-${project.version}</webAppSourceDirectory>
+          <stopPort>8079</stopPort>
+          <stopKey>stopit</stopKey>
+          <httpConnector>
+            <port></port>
+            <idleTimeout>60000</idleTimeout>
+          </httpConnector>
+        </configuration>
+        <executions>
+          <execution>
+            <id>start-jetty</id>
+            <phase>pre-integration-test</phase>
+            <goals>
+              <goal>start</goal>
+            </goals>
+            <configuration>
+              <scanIntervalSeconds>0</scanIntervalSeconds>
+              <daemon>true</daemon>
+            </configuration>
+          </execution>
+          <execution>
+            <id>stop-jetty</id>
+            <phase>post-integration-test</phase>
+            <goals>
+              <goal>stop</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin-->
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>build-helper-maven-plugin</artifactId>
+        <version>1.9.1</version>
+        <executions>
+          <execution>
+            <id>add-source</id>
+            <phase>generate-sources</phase>
+            <goals>
+              <goal>add-source</goal>
+            </goals>
+            <configuration>
+              <sources>
+                <source>src/gen/java</source>
+              </sources>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+  <dependencies>
+    <dependency>
+      <groupId>io.swagger</groupId>
+      <artifactId>swagger-jaxrs</artifactId>
+      <scope>compile</scope>
+      <version>${swagger-core-version}</version>
+    </dependency>
+    <dependency>
+      <groupId>ch.qos.logback</groupId>
+      <artifactId>logback-classic</artifactId>
+      <version>${logback-version}</version>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>ch.qos.logback</groupId>
+      <artifactId>logback-core</artifactId>
+      <version>${logback-version}</version>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>${junit-version}</version>
+      <scope>test</scope>
+    </dependency>
+    <!-- CXF Client -->
+    <dependency>
+        <groupId>org.apache.cxf</groupId>
+        <artifactId>cxf-rt-rs-client</artifactId>
+        <version>${cxf-version}</version>
+        <scope>test</scope>
+    </dependency>
+    
+     <!-- CXF server -->
+    <dependency>
+        <groupId>org.apache.cxf</groupId>
+        <artifactId>cxf-rt-frontend-jaxrs</artifactId>
+        <version>${cxf-version}</version>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.apache.cxf</groupId>
+        <artifactId>cxf-rt-rs-service-description</artifactId>
+        <version>${cxf-version}</version>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.apache.cxf</groupId>
+        <artifactId>cxf-rt-ws-policy</artifactId>
+        <version>${cxf-version}</version>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.apache.cxf</groupId>
+        <artifactId>cxf-rt-wsdl</artifactId>
+        <version>${cxf-version}</version>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>com.fasterxml.jackson.jaxrs</groupId>
+        <artifactId>jackson-jaxrs-json-provider</artifactId>
+        <version>${jackson-jaxrs-version}</version>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+       <groupId>com.fasterxml.jackson.datatype</groupId>
+       <artifactId>jackson-datatype-joda</artifactId>
+       <version>${jackson-jaxrs-version}</version>
+       <scope>compile</scope>
+    </dependency>
+  </dependencies>
+  <repositories>
+    <repository>
+      <id>sonatype-snapshots</id>
+      <url>https://oss.sonatype.org/content/repositories/snapshots</url>
+      <snapshots>
+        <enabled>true</enabled>
+      </snapshots>
+    </repository>
+  </repositories>
+  <properties>
+    <java.version>1.7</java.version>
+    <maven.compiler.source>${java.version}</maven.compiler.source>
+    <maven.compiler.target>${java.version}</maven.compiler.target>
+    <swagger-core-version>1.5.15</swagger-core-version>
+    <jetty-version>9.2.9.v20150224</jetty-version>
+    <junit-version>4.12</junit-version>
+    <logback-version>1.1.7</logback-version>
+    <servlet-api-version>2.5</servlet-api-version>
+    <cxf-version>3.1.11</cxf-version>
+    <jackson-jaxrs-version>2.8.9</jackson-jaxrs-version>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+</project>
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/api/DefinitionResourceApi.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/api/DefinitionResourceApi.java
index 97f2e1834db95ff0bb3ea611346cde259e98b3cc..cb139e00d85820fd1052dfb04df601bd0d02559d 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/api/DefinitionResourceApi.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/api/DefinitionResourceApi.java
@@ -1,62 +1,60 @@
-package eu.decideh2020.ACSmI.discovery.backend.client.api;
-
-import eu.decideh2020.ACSmI.discovery.backend.client.model.Definition;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.List;
-import java.util.Map;
-import javax.ws.rs.*;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.MediaType;
-import org.apache.cxf.jaxrs.ext.multipart.*;
-
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiResponses;
-import io.swagger.annotations.ApiResponse;
-import io.swagger.jaxrs.PATCH;
-
-/**
- * acsmiservices API
- *
- * <p>acsmiservices API documentation
- *
- */
-@Path("/")
-@Api(value = "/", description = "")
-public interface DefinitionResourceApi  {
-
-    /**
-     * getAllDefinitions
-     *
-     */
-    @GET
-    @Path("/api/definitions")
-    @Consumes({ "application/json" })
-    @Produces({ "*/*" })
-    @ApiOperation(value = "getAllDefinitions", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK", response = Definition.class, responseContainer = "List"),
-        @ApiResponse(code = 401, message = "Unauthorized"),
-        @ApiResponse(code = 403, message = "Forbidden"),
-        @ApiResponse(code = 404, message = "Not Found") })
-    public List<Definition> getAllDefinitionsUsingGET();
-
-    /**
-     * getDefinition
-     *
-     */
-    @GET
-    @Path("/api/definitions/{id}")
-    @Consumes({ "application/json" })
-    @Produces({ "*/*" })
-    @ApiOperation(value = "getDefinition", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK", response = Definition.class),
-        @ApiResponse(code = 401, message = "Unauthorized"),
-        @ApiResponse(code = 403, message = "Forbidden"),
-        @ApiResponse(code = 404, message = "Not Found") })
-    public Definition getDefinitionUsingGET(@PathParam("id") Long id);
-}
-
+package eu.decideh2020.ACSmI.discovery.backend.client.api;
+
+import eu.decideh2020.ACSmI.discovery.backend.client.model.Definition;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.List;
+import java.util.Map;
+import javax.ws.rs.*;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.MediaType;
+import org.apache.cxf.jaxrs.ext.multipart.*;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponses;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.jaxrs.PATCH;
+
+@Path("/")
+@Api(value = "/", description = "")
+public interface DefinitionResourceApi  {
+
+    @GET
+    @Path("/api/definitions")
+    @Consumes({ "application/json" })
+    @Produces({ "*/*" })
+    @ApiOperation(value = "getAllDefinitions", tags={  })
+    @ApiResponses(value = { 
+        @ApiResponse(code = 200, message = "OK", response = Definition.class, responseContainer = "array"),
+        @ApiResponse(code = 401, message = "Unauthorized", response =Void.class),
+        @ApiResponse(code = 403, message = "Forbidden", response =Void.class),
+        @ApiResponse(code = 404, message = "Not Found", response =Void.class) })
+    public List<Definition> getAllDefinitionsUsingGET();
+
+    @GET
+    @Path("/api/definitions/{id}")
+    @Consumes({ "application/json" })
+    @Produces({ "*/*" })
+    @ApiOperation(value = "getDefinition", tags={  })
+    @ApiResponses(value = { 
+        @ApiResponse(code = 200, message = "OK", response = Definition.class),
+        @ApiResponse(code = 401, message = "Unauthorized", response =Void.class),
+        @ApiResponse(code = 403, message = "Forbidden", response =Void.class),
+        @ApiResponse(code = 404, message = "Not Found", response =Void.class) })
+    public Definition getDefinitionUsingGET(@PathParam("id") Long id);
+
+    @GET
+    @Path("/api/definitions-by-attribute")
+    @Consumes({ "application/json" })
+    @Produces({ "application/json" })
+    @ApiOperation(value = "getDefinitionsByAttribute", tags={  })
+    @ApiResponses(value = { 
+        @ApiResponse(code = 200, message = "OK", response = Definition.class, responseContainer = "array"),
+        @ApiResponse(code = 401, message = "Unauthorized", response =Void.class),
+        @ApiResponse(code = 403, message = "Forbidden", response =Void.class),
+        @ApiResponse(code = 404, message = "Not Found", response =Void.class) })
+    public List<Definition> getDefinitionsByAttributeUsingGET(@QueryParam("typeid")Long typeid);
+}
+
diff --git a/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/api/ProfileInfoResourceApi.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/api/LegalAnswerResourceApi.java
similarity index 59%
rename from OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/api/ProfileInfoResourceApi.java
rename to ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/api/LegalAnswerResourceApi.java
index 7151da656e421390a3106de74aff9b56ebaece99..3da6b654cc61ef6aa6439a0aba64adc92c11bd57 100644
--- a/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/api/ProfileInfoResourceApi.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/api/LegalAnswerResourceApi.java
@@ -1,46 +1,36 @@
-package eu.decideh2020.acsmi.client.api;
-
-import eu.decideh2020.acsmi.client.model.ProfileInfoVM;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.List;
-import java.util.Map;
-import javax.ws.rs.*;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.MediaType;
-import org.apache.cxf.jaxrs.ext.multipart.*;
-
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiResponses;
-import io.swagger.annotations.ApiResponse;
-import io.swagger.jaxrs.PATCH;
-
-/**
- * acsmiservices API
- *
- * <p>acsmiservices API documentation
- *
- */
-@Path("/")
-@Api(value = "/", description = "")
-public interface ProfileInfoResourceApi  {
-
-    /**
-     * getActiveProfiles
-     *
-     */
-    @GET
-    @Path("/api/profile-info")
-    @Consumes({ "application/json" })
-    @Produces({ "*/*" })
-    @ApiOperation(value = "getActiveProfiles", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK", response = ProfileInfoVM.class),
-        @ApiResponse(code = 401, message = "Unauthorized", response = void.class),
-        @ApiResponse(code = 403, message = "Forbidden", response = void.class),
-        @ApiResponse(code = 404, message = "Not Found", response = void.class) })
-    public ProfileInfoVM getActiveProfilesUsingGET();
-}
-
+package eu.decideh2020.ACSmI.discovery.backend.client.api;
+
+import eu.decideh2020.ACSmI.discovery.backend.client.model.LegalAnswer;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.List;
+import java.util.Map;
+import javax.ws.rs.*;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.MediaType;
+import org.apache.cxf.jaxrs.ext.multipart.*;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponses;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.jaxrs.PATCH;
+
+@Path("/")
+@Api(value = "/", description = "")
+public interface LegalAnswerResourceApi  {
+
+    @GET
+    @Path("/api/legal-answers")
+    @Consumes({ "application/json" })
+    @Produces({ "*/*" })
+    @ApiOperation(value = "getAllLegalAnswers", tags={  })
+    @ApiResponses(value = { 
+        @ApiResponse(code = 200, message = "OK", response = LegalAnswer.class, responseContainer = "array"),
+        @ApiResponse(code = 401, message = "Unauthorized", response =Void.class),
+        @ApiResponse(code = 403, message = "Forbidden", response =Void.class),
+        @ApiResponse(code = 404, message = "Not Found", response =Void.class) })
+    public List<LegalAnswer> getAllLegalAnswersUsingGET();
+}
+
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/api/LegalQuestionResourceApi.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/api/LegalQuestionResourceApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..afe2d5332a409512420ab305571390f68038dfad
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/api/LegalQuestionResourceApi.java
@@ -0,0 +1,36 @@
+package eu.decideh2020.ACSmI.discovery.backend.client.api;
+
+import eu.decideh2020.ACSmI.discovery.backend.client.model.LegalQuestion;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.List;
+import java.util.Map;
+import javax.ws.rs.*;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.MediaType;
+import org.apache.cxf.jaxrs.ext.multipart.*;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponses;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.jaxrs.PATCH;
+
+@Path("/")
+@Api(value = "/", description = "")
+public interface LegalQuestionResourceApi  {
+
+    @GET
+    @Path("/api/legal-questions")
+    @Consumes({ "application/json" })
+    @Produces({ "*/*" })
+    @ApiOperation(value = "getAllLegalQuestions", tags={  })
+    @ApiResponses(value = { 
+        @ApiResponse(code = 200, message = "OK", response = LegalQuestion.class, responseContainer = "array"),
+        @ApiResponse(code = 401, message = "Unauthorized", response =Void.class),
+        @ApiResponse(code = 403, message = "Forbidden", response =Void.class),
+        @ApiResponse(code = 404, message = "Not Found", response =Void.class) })
+    public List<LegalQuestion> getAllLegalQuestionsUsingGET();
+}
+
diff --git a/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/api/DefinitionResourceApi.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/api/LegalQuestionnaireResourceApi.java
similarity index 54%
rename from OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/api/DefinitionResourceApi.java
rename to ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/api/LegalQuestionnaireResourceApi.java
index 330ce87e18414221dc5df1afef86b439448f74a3..5a46100c56aee921c490d5c8240eb1b80a58f489 100644
--- a/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/api/DefinitionResourceApi.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/api/LegalQuestionnaireResourceApi.java
@@ -1,62 +1,48 @@
-package eu.decideh2020.acsmi.client.api;
-
-import eu.decideh2020.acsmi.client.model.Definition;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.List;
-import java.util.Map;
-import javax.ws.rs.*;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.MediaType;
-import org.apache.cxf.jaxrs.ext.multipart.*;
-
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiResponses;
-import io.swagger.annotations.ApiResponse;
-import io.swagger.jaxrs.PATCH;
-
-/**
- * acsmiservices API
- *
- * <p>acsmiservices API documentation
- *
- */
-@Path("/")
-@Api(value = "/", description = "")
-public interface DefinitionResourceApi  {
-
-    /**
-     * getAllDefinitions
-     *
-     */
-    @GET
-    @Path("/api/definitions")
-    @Consumes({ "application/json" })
-    @Produces({ "*/*" })
-    @ApiOperation(value = "getAllDefinitions", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK", response = Definition.class, responseContainer = "array"),
-        @ApiResponse(code = 401, message = "Unauthorized", response = void.class),
-        @ApiResponse(code = 403, message = "Forbidden", response = void.class),
-        @ApiResponse(code = 404, message = "Not Found", response = void.class) })
-    public List<Definition> getAllDefinitionsUsingGET();
-
-    /**
-     * getDefinition
-     *
-     */
-    @GET
-    @Path("/api/definitions/{id}")
-    @Consumes({ "application/json" })
-    @Produces({ "*/*" })
-    @ApiOperation(value = "getDefinition", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK", response = Definition.class),
-        @ApiResponse(code = 401, message = "Unauthorized", response = void.class),
-        @ApiResponse(code = 403, message = "Forbidden", response = void.class),
-        @ApiResponse(code = 404, message = "Not Found", response = void.class) })
-    public Definition getDefinitionUsingGET(@PathParam("id") Long id);
-}
-
+package eu.decideh2020.ACSmI.discovery.backend.client.api;
+
+import eu.decideh2020.ACSmI.discovery.backend.client.model.LegalQuestionnaire;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.List;
+import java.util.Map;
+import javax.ws.rs.*;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.MediaType;
+import org.apache.cxf.jaxrs.ext.multipart.*;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponses;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.jaxrs.PATCH;
+
+@Path("/")
+@Api(value = "/", description = "")
+public interface LegalQuestionnaireResourceApi  {
+
+    @GET
+    @Path("/api/legal-questionnaires/full")
+    @Consumes({ "application/json" })
+    @Produces({ "*/*" })
+    @ApiOperation(value = "getFullLegalQuestionnaire", tags={  })
+    @ApiResponses(value = { 
+        @ApiResponse(code = 200, message = "OK", response = LegalQuestionnaire.class),
+        @ApiResponse(code = 401, message = "Unauthorized", response =Void.class),
+        @ApiResponse(code = 403, message = "Forbidden", response =Void.class),
+        @ApiResponse(code = 404, message = "Not Found", response =Void.class) })
+    public LegalQuestionnaire getFullLegalQuestionnaireUsingGET();
+
+    @GET
+    @Path("/api/legal-questionnaires")
+    @Consumes({ "application/json" })
+    @Produces({ "*/*" })
+    @ApiOperation(value = "getLegalQuestionnaire", tags={  })
+    @ApiResponses(value = { 
+        @ApiResponse(code = 200, message = "OK", response = LegalQuestionnaire.class, responseContainer = "array"),
+        @ApiResponse(code = 401, message = "Unauthorized", response =Void.class),
+        @ApiResponse(code = 403, message = "Forbidden", response =Void.class),
+        @ApiResponse(code = 404, message = "Not Found", response =Void.class) })
+    public List<LegalQuestionnaire> getLegalQuestionnaireUsingGET();
+}
+
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/api/LegalTopicResourceApi.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/api/LegalTopicResourceApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..f6657be34f13c793b0eb3570cd9420b595ab3378
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/api/LegalTopicResourceApi.java
@@ -0,0 +1,36 @@
+package eu.decideh2020.ACSmI.discovery.backend.client.api;
+
+import eu.decideh2020.ACSmI.discovery.backend.client.model.LegalTopic;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.List;
+import java.util.Map;
+import javax.ws.rs.*;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.MediaType;
+import org.apache.cxf.jaxrs.ext.multipart.*;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponses;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.jaxrs.PATCH;
+
+@Path("/")
+@Api(value = "/", description = "")
+public interface LegalTopicResourceApi  {
+
+    @GET
+    @Path("/api/legal-topics")
+    @Consumes({ "application/json" })
+    @Produces({ "*/*" })
+    @ApiOperation(value = "getAllLegalTopics", tags={  })
+    @ApiResponses(value = { 
+        @ApiResponse(code = 200, message = "OK", response = LegalTopic.class, responseContainer = "array"),
+        @ApiResponse(code = 401, message = "Unauthorized", response =Void.class),
+        @ApiResponse(code = 403, message = "Forbidden", response =Void.class),
+        @ApiResponse(code = 404, message = "Not Found", response =Void.class) })
+    public List<LegalTopic> getAllLegalTopicsUsingGET();
+}
+
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/api/ProfileInfoResourceApi.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/api/ProfileInfoResourceApi.java
index 043ae64a476db9540d9a406cb26ab33c7b4dd94b..0a67ec95b7152c43c76f71216cf0aca268375c0d 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/api/ProfileInfoResourceApi.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/api/ProfileInfoResourceApi.java
@@ -1,46 +1,36 @@
-package eu.decideh2020.ACSmI.discovery.backend.client.api;
-
-import eu.decideh2020.ACSmI.discovery.backend.client.model.ProfileInfoVM;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.List;
-import java.util.Map;
-import javax.ws.rs.*;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.MediaType;
-import org.apache.cxf.jaxrs.ext.multipart.*;
-
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiResponses;
-import io.swagger.annotations.ApiResponse;
-import io.swagger.jaxrs.PATCH;
-
-/**
- * acsmiservices API
- *
- * <p>acsmiservices API documentation
- *
- */
-@Path("/")
-@Api(value = "/", description = "")
-public interface ProfileInfoResourceApi  {
-
-    /**
-     * getActiveProfiles
-     *
-     */
-    @GET
-    @Path("/api/profile-info")
-    @Consumes({ "application/json" })
-    @Produces({ "*/*" })
-    @ApiOperation(value = "getActiveProfiles", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK", response = ProfileInfoVM.class),
-        @ApiResponse(code = 401, message = "Unauthorized"),
-        @ApiResponse(code = 403, message = "Forbidden"),
-        @ApiResponse(code = 404, message = "Not Found") })
-    public ProfileInfoVM getActiveProfilesUsingGET();
-}
-
+package eu.decideh2020.ACSmI.discovery.backend.client.api;
+
+import eu.decideh2020.ACSmI.discovery.backend.client.model.ProfileInfoVM;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.List;
+import java.util.Map;
+import javax.ws.rs.*;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.MediaType;
+import org.apache.cxf.jaxrs.ext.multipart.*;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponses;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.jaxrs.PATCH;
+
+@Path("/")
+@Api(value = "/", description = "")
+public interface ProfileInfoResourceApi  {
+
+    @GET
+    @Path("/api/profile-info")
+    @Consumes({ "application/json" })
+    @Produces({ "*/*" })
+    @ApiOperation(value = "getActiveProfiles", tags={  })
+    @ApiResponses(value = { 
+        @ApiResponse(code = 200, message = "OK", response = ProfileInfoVM.class),
+        @ApiResponse(code = 401, message = "Unauthorized", response =Void.class),
+        @ApiResponse(code = 403, message = "Forbidden", response =Void.class),
+        @ApiResponse(code = 404, message = "Not Found", response =Void.class) })
+    public ProfileInfoVM getActiveProfilesUsingGET();
+}
+
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/api/ServiceAttributeTypeResourceApi.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/api/ServiceAttributeTypeResourceApi.java
index 4ed1e1b6f16b78ea0149792d24081141ba8dff9e..d1ebbde7764d11dce7ccd152a839aacb7353cb47 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/api/ServiceAttributeTypeResourceApi.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/api/ServiceAttributeTypeResourceApi.java
@@ -1,62 +1,48 @@
-package eu.decideh2020.ACSmI.discovery.backend.client.api;
-
-import eu.decideh2020.ACSmI.discovery.backend.client.model.ServiceAttributeType;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.List;
-import java.util.Map;
-import javax.ws.rs.*;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.MediaType;
-import org.apache.cxf.jaxrs.ext.multipart.*;
-
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiResponses;
-import io.swagger.annotations.ApiResponse;
-import io.swagger.jaxrs.PATCH;
-
-/**
- * acsmiservices API
- *
- * <p>acsmiservices API documentation
- *
- */
-@Path("/")
-@Api(value = "/", description = "")
-public interface ServiceAttributeTypeResourceApi  {
-
-    /**
-     * findServiceAttributeTypes
-     *
-     */
-    @GET
-    @Path("/api/service-attribute-types")
-    @Consumes({ "application/json" })
-    @Produces({ "*/*" })
-    @ApiOperation(value = "findServiceAttributeTypes", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK", response = ServiceAttributeType.class, responseContainer = "List"),
-        @ApiResponse(code = 401, message = "Unauthorized"),
-        @ApiResponse(code = 403, message = "Forbidden"),
-        @ApiResponse(code = 404, message = "Not Found") })
-    public List<ServiceAttributeType> findServiceAttributeTypesUsingGET(@QueryParam("classid")String classid);
-
-    /**
-     * getServiceAttributeType
-     *
-     */
-    @GET
-    @Path("/api/service-attribute-types/{id}")
-    @Consumes({ "application/json" })
-    @Produces({ "*/*" })
-    @ApiOperation(value = "getServiceAttributeType", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK", response = ServiceAttributeType.class),
-        @ApiResponse(code = 401, message = "Unauthorized"),
-        @ApiResponse(code = 403, message = "Forbidden"),
-        @ApiResponse(code = 404, message = "Not Found") })
-    public ServiceAttributeType getServiceAttributeTypeUsingGET(@PathParam("id") Long id);
-}
-
+package eu.decideh2020.ACSmI.discovery.backend.client.api;
+
+import eu.decideh2020.ACSmI.discovery.backend.client.model.ServiceAttributeType;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.List;
+import java.util.Map;
+import javax.ws.rs.*;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.MediaType;
+import org.apache.cxf.jaxrs.ext.multipart.*;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponses;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.jaxrs.PATCH;
+
+@Path("/")
+@Api(value = "/", description = "")
+public interface ServiceAttributeTypeResourceApi  {
+
+    @GET
+    @Path("/api/service-attribute-types")
+    @Consumes({ "application/json" })
+    @Produces({ "*/*" })
+    @ApiOperation(value = "findServiceAttributeTypes", tags={  })
+    @ApiResponses(value = { 
+        @ApiResponse(code = 200, message = "OK", response = ServiceAttributeType.class, responseContainer = "array"),
+        @ApiResponse(code = 401, message = "Unauthorized", response =Void.class),
+        @ApiResponse(code = 403, message = "Forbidden", response =Void.class),
+        @ApiResponse(code = 404, message = "Not Found", response =Void.class) })
+    public List<ServiceAttributeType> findServiceAttributeTypesUsingGET(@QueryParam("classid")String classid);
+
+    @GET
+    @Path("/api/service-attribute-types/{id}")
+    @Consumes({ "application/json" })
+    @Produces({ "*/*" })
+    @ApiOperation(value = "getServiceAttributeType", tags={  })
+    @ApiResponses(value = { 
+        @ApiResponse(code = 200, message = "OK", response = ServiceAttributeType.class),
+        @ApiResponse(code = 401, message = "Unauthorized", response =Void.class),
+        @ApiResponse(code = 403, message = "Forbidden", response =Void.class),
+        @ApiResponse(code = 404, message = "Not Found", response =Void.class) })
+    public ServiceAttributeType getServiceAttributeTypeUsingGET(@PathParam("id") Long id);
+}
+
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/api/ServiceAttributeValueResourceApi.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/api/ServiceAttributeValueResourceApi.java
index 36f61bab3d913a6cac663435f07df9885d210f64..9e6c50259f6fdfc34b986073184d3175b339a910 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/api/ServiceAttributeValueResourceApi.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/api/ServiceAttributeValueResourceApi.java
@@ -1,96 +1,74 @@
-package eu.decideh2020.ACSmI.discovery.backend.client.api;
-
-import eu.decideh2020.ACSmI.discovery.backend.client.model.ServiceAttributeValue;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.List;
-import java.util.Map;
-import javax.ws.rs.*;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.MediaType;
-import org.apache.cxf.jaxrs.ext.multipart.*;
-
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiResponses;
-import io.swagger.annotations.ApiResponse;
-import io.swagger.jaxrs.PATCH;
-
-/**
- * acsmiservices API
- *
- * <p>acsmiservices API documentation
- *
- */
-@Path("/")
-@Api(value = "/", description = "")
-public interface ServiceAttributeValueResourceApi  {
-
-    /**
-     * createServiceAttributeValue
-     *
-     */
-    @POST
-    @Path("/api/service-attribute-values")
-    @Consumes({ "application/json" })
-    @Produces({ "*/*" })
-    @ApiOperation(value = "createServiceAttributeValue", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK", response = ServiceAttributeValue.class),
-        @ApiResponse(code = 201, message = "Created"),
-        @ApiResponse(code = 401, message = "Unauthorized"),
-        @ApiResponse(code = 403, message = "Forbidden"),
-        @ApiResponse(code = 404, message = "Not Found") })
-    public ServiceAttributeValue createServiceAttributeValueUsingPOST(ServiceAttributeValue serviceAttributeValue);
-
-    /**
-     * deleteServiceAttributeValue
-     *
-     */
-    @DELETE
-    @Path("/api/service-attribute-values/{id}")
-    @Consumes({ "application/json" })
-    @Produces({ "*/*" })
-    @ApiOperation(value = "deleteServiceAttributeValue", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK"),
-        @ApiResponse(code = 204, message = "No Content"),
-        @ApiResponse(code = 401, message = "Unauthorized"),
-        @ApiResponse(code = 403, message = "Forbidden") })
-    public void deleteServiceAttributeValueUsingDELETE(@PathParam("id") Long id, @QueryParam("forcedelete")String forcedelete);
-
-    /**
-     * getServiceAttributeValue
-     *
-     */
-    @GET
-    @Path("/api/service-attribute-values/{id}")
-    @Consumes({ "application/json" })
-    @Produces({ "*/*" })
-    @ApiOperation(value = "getServiceAttributeValue", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK", response = ServiceAttributeValue.class),
-        @ApiResponse(code = 401, message = "Unauthorized"),
-        @ApiResponse(code = 403, message = "Forbidden"),
-        @ApiResponse(code = 404, message = "Not Found") })
-    public ServiceAttributeValue getServiceAttributeValueUsingGET(@PathParam("id") Long id);
-
-    /**
-     * updateServiceAttributeValue
-     *
-     */
-    @PUT
-    @Path("/api/service-attribute-values")
-    @Consumes({ "application/json" })
-    @Produces({ "*/*" })
-    @ApiOperation(value = "updateServiceAttributeValue", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK", response = ServiceAttributeValue.class),
-        @ApiResponse(code = 201, message = "Created"),
-        @ApiResponse(code = 401, message = "Unauthorized"),
-        @ApiResponse(code = 403, message = "Forbidden"),
-        @ApiResponse(code = 404, message = "Not Found") })
-    public ServiceAttributeValue updateServiceAttributeValueUsingPUT(ServiceAttributeValue serviceAttributeValue);
-}
-
+package eu.decideh2020.ACSmI.discovery.backend.client.api;
+
+import eu.decideh2020.ACSmI.discovery.backend.client.model.ServiceAttributeValue;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.List;
+import java.util.Map;
+import javax.ws.rs.*;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.MediaType;
+import org.apache.cxf.jaxrs.ext.multipart.*;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponses;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.jaxrs.PATCH;
+
+@Path("/")
+@Api(value = "/", description = "")
+public interface ServiceAttributeValueResourceApi  {
+
+    @POST
+    @Path("/api/service-attribute-values")
+    @Consumes({ "application/json" })
+    @Produces({ "*/*" })
+    @ApiOperation(value = "createServiceAttributeValue", tags={  })
+    @ApiResponses(value = { 
+        @ApiResponse(code = 200, message = "OK", response = ServiceAttributeValue.class),
+        @ApiResponse(code = 201, message = "Created", response =Void.class),
+        @ApiResponse(code = 401, message = "Unauthorized", response =Void.class),
+        @ApiResponse(code = 403, message = "Forbidden", response =Void.class),
+        @ApiResponse(code = 404, message = "Not Found", response =Void.class) })
+    public ServiceAttributeValue createServiceAttributeValueUsingPOST(ServiceAttributeValue serviceAttributeValue);
+
+    @DELETE
+    @Path("/api/service-attribute-values/{id}")
+    @Consumes({ "application/json" })
+    @Produces({ "*/*" })
+    @ApiOperation(value = "deleteServiceAttributeValue", tags={  })
+    @ApiResponses(value = { 
+        @ApiResponse(code = 200, message = "OK", response =Void.class),
+        @ApiResponse(code = 204, message = "No Content", response =Void.class),
+        @ApiResponse(code = 401, message = "Unauthorized", response =Void.class),
+        @ApiResponse(code = 403, message = "Forbidden", response =Void.class) })
+    public void deleteServiceAttributeValueUsingDELETE(@PathParam("id") Long id, @QueryParam("forcedelete")String forcedelete);
+
+    @GET
+    @Path("/api/service-attribute-values/{id}")
+    @Consumes({ "application/json" })
+    @Produces({ "*/*" })
+    @ApiOperation(value = "getServiceAttributeValue", tags={  })
+    @ApiResponses(value = { 
+        @ApiResponse(code = 200, message = "OK", response = ServiceAttributeValue.class),
+        @ApiResponse(code = 401, message = "Unauthorized", response =Void.class),
+        @ApiResponse(code = 403, message = "Forbidden", response =Void.class),
+        @ApiResponse(code = 404, message = "Not Found", response =Void.class) })
+    public ServiceAttributeValue getServiceAttributeValueUsingGET(@PathParam("id") Long id);
+
+    @PUT
+    @Path("/api/service-attribute-values")
+    @Consumes({ "application/json" })
+    @Produces({ "*/*" })
+    @ApiOperation(value = "updateServiceAttributeValue", tags={  })
+    @ApiResponses(value = { 
+        @ApiResponse(code = 200, message = "OK", response = ServiceAttributeValue.class),
+        @ApiResponse(code = 201, message = "Created", response =Void.class),
+        @ApiResponse(code = 401, message = "Unauthorized", response =Void.class),
+        @ApiResponse(code = 403, message = "Forbidden", response =Void.class),
+        @ApiResponse(code = 404, message = "Not Found", response =Void.class) })
+    public ServiceAttributeValue updateServiceAttributeValueUsingPUT(ServiceAttributeValue serviceAttributeValue);
+}
+
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/api/ServiceClassAttributeResourceApi.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/api/ServiceClassAttributeResourceApi.java
index 1b35dd496f62dd805120d15616991f22f3b2912e..c977c12663f01c2dfb50f8ddc98cb06aa15a4700 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/api/ServiceClassAttributeResourceApi.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/api/ServiceClassAttributeResourceApi.java
@@ -1,62 +1,48 @@
-package eu.decideh2020.ACSmI.discovery.backend.client.api;
-
-import eu.decideh2020.ACSmI.discovery.backend.client.model.ServiceClassAttribute;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.List;
-import java.util.Map;
-import javax.ws.rs.*;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.MediaType;
-import org.apache.cxf.jaxrs.ext.multipart.*;
-
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiResponses;
-import io.swagger.annotations.ApiResponse;
-import io.swagger.jaxrs.PATCH;
-
-/**
- * acsmiservices API
- *
- * <p>acsmiservices API documentation
- *
- */
-@Path("/")
-@Api(value = "/", description = "")
-public interface ServiceClassAttributeResourceApi  {
-
-    /**
-     * getAllServiceClassAttributes
-     *
-     */
-    @GET
-    @Path("/api/service-class-attributes")
-    @Consumes({ "application/json" })
-    @Produces({ "*/*" })
-    @ApiOperation(value = "getAllServiceClassAttributes", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK", response = ServiceClassAttribute.class, responseContainer = "List"),
-        @ApiResponse(code = 401, message = "Unauthorized"),
-        @ApiResponse(code = 403, message = "Forbidden"),
-        @ApiResponse(code = 404, message = "Not Found") })
-    public List<ServiceClassAttribute> getAllServiceClassAttributesUsingGET(@QueryParam("classid")String classid);
-
-    /**
-     * getServiceClassAttribute
-     *
-     */
-    @GET
-    @Path("/api/service-class-attributes/{id}")
-    @Consumes({ "application/json" })
-    @Produces({ "*/*" })
-    @ApiOperation(value = "getServiceClassAttribute", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK", response = ServiceClassAttribute.class),
-        @ApiResponse(code = 401, message = "Unauthorized"),
-        @ApiResponse(code = 403, message = "Forbidden"),
-        @ApiResponse(code = 404, message = "Not Found") })
-    public ServiceClassAttribute getServiceClassAttributeUsingGET(@PathParam("id") Long id);
-}
-
+package eu.decideh2020.ACSmI.discovery.backend.client.api;
+
+import eu.decideh2020.ACSmI.discovery.backend.client.model.ServiceClassAttribute;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.List;
+import java.util.Map;
+import javax.ws.rs.*;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.MediaType;
+import org.apache.cxf.jaxrs.ext.multipart.*;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponses;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.jaxrs.PATCH;
+
+@Path("/")
+@Api(value = "/", description = "")
+public interface ServiceClassAttributeResourceApi  {
+
+    @GET
+    @Path("/api/service-class-attributes")
+    @Consumes({ "application/json" })
+    @Produces({ "*/*" })
+    @ApiOperation(value = "getAllServiceClassAttributes", tags={  })
+    @ApiResponses(value = { 
+        @ApiResponse(code = 200, message = "OK", response = ServiceClassAttribute.class, responseContainer = "array"),
+        @ApiResponse(code = 401, message = "Unauthorized", response =Void.class),
+        @ApiResponse(code = 403, message = "Forbidden", response =Void.class),
+        @ApiResponse(code = 404, message = "Not Found", response =Void.class) })
+    public List<ServiceClassAttribute> getAllServiceClassAttributesUsingGET(@QueryParam("classid")String classid);
+
+    @GET
+    @Path("/api/service-class-attributes/{id}")
+    @Consumes({ "application/json" })
+    @Produces({ "*/*" })
+    @ApiOperation(value = "getServiceClassAttribute", tags={  })
+    @ApiResponses(value = { 
+        @ApiResponse(code = 200, message = "OK", response = ServiceClassAttribute.class),
+        @ApiResponse(code = 401, message = "Unauthorized", response =Void.class),
+        @ApiResponse(code = 403, message = "Forbidden", response =Void.class),
+        @ApiResponse(code = 404, message = "Not Found", response =Void.class) })
+    public ServiceClassAttribute getServiceClassAttributeUsingGET(@PathParam("id") Long id);
+}
+
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/api/ServiceClassResourceApi.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/api/ServiceClassResourceApi.java
index e9c2fc4e39002df943ea35b9cb879a71a8503c6e..418665474d9d83990726e2bc5f92491f32bc94c3 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/api/ServiceClassResourceApi.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/api/ServiceClassResourceApi.java
@@ -1,78 +1,60 @@
-package eu.decideh2020.ACSmI.discovery.backend.client.api;
-
-import eu.decideh2020.ACSmI.discovery.backend.client.model.ServiceClass;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.List;
-import java.util.Map;
-import javax.ws.rs.*;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.MediaType;
-import org.apache.cxf.jaxrs.ext.multipart.*;
-
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiResponses;
-import io.swagger.annotations.ApiResponse;
-import io.swagger.jaxrs.PATCH;
-
-/**
- * acsmiservices API
- *
- * <p>acsmiservices API documentation
- *
- */
-@Path("/")
-@Api(value = "/", description = "")
-public interface ServiceClassResourceApi  {
-
-    /**
-     * getAllServiceClassesFullInfo
-     *
-     */
-    @GET
-    @Path("/api/service-classes/full")
-    @Consumes({ "application/json" })
-    @Produces({ "*/*" })
-    @ApiOperation(value = "getAllServiceClassesFullInfo", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK", response = ServiceClass.class, responseContainer = "List"),
-        @ApiResponse(code = 401, message = "Unauthorized"),
-        @ApiResponse(code = 403, message = "Forbidden"),
-        @ApiResponse(code = 404, message = "Not Found") })
-    public List<ServiceClass> getAllServiceClassesFullInfoUsingGET();
-
-    /**
-     * getAllServiceClasses
-     *
-     */
-    @GET
-    @Path("/api/service-classes")
-    @Consumes({ "application/json" })
-    @Produces({ "*/*" })
-    @ApiOperation(value = "getAllServiceClasses", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK", response = ServiceClass.class, responseContainer = "List"),
-        @ApiResponse(code = 401, message = "Unauthorized"),
-        @ApiResponse(code = 403, message = "Forbidden"),
-        @ApiResponse(code = 404, message = "Not Found") })
-    public List<ServiceClass> getAllServiceClassesUsingGET();
-
-    /**
-     * getServiceClass
-     *
-     */
-    @GET
-    @Path("/api/service-classes/{id}")
-    @Consumes({ "application/json" })
-    @Produces({ "*/*" })
-    @ApiOperation(value = "getServiceClass", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK", response = ServiceClass.class),
-        @ApiResponse(code = 401, message = "Unauthorized"),
-        @ApiResponse(code = 403, message = "Forbidden"),
-        @ApiResponse(code = 404, message = "Not Found") })
-    public ServiceClass getServiceClassUsingGET(@PathParam("id") Long id);
-}
-
+package eu.decideh2020.ACSmI.discovery.backend.client.api;
+
+import eu.decideh2020.ACSmI.discovery.backend.client.model.ServiceClass;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.List;
+import java.util.Map;
+import javax.ws.rs.*;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.MediaType;
+import org.apache.cxf.jaxrs.ext.multipart.*;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponses;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.jaxrs.PATCH;
+
+@Path("/")
+@Api(value = "/", description = "")
+public interface ServiceClassResourceApi  {
+
+    @GET
+    @Path("/api/service-classes/full")
+    @Consumes({ "application/json" })
+    @Produces({ "*/*" })
+    @ApiOperation(value = "getAllServiceClassesFullInfo", tags={  })
+    @ApiResponses(value = { 
+        @ApiResponse(code = 200, message = "OK", response = ServiceClass.class, responseContainer = "array"),
+        @ApiResponse(code = 401, message = "Unauthorized", response =Void.class),
+        @ApiResponse(code = 403, message = "Forbidden", response =Void.class),
+        @ApiResponse(code = 404, message = "Not Found", response =Void.class) })
+    public List<ServiceClass> getAllServiceClassesFullInfoUsingGET();
+
+    @GET
+    @Path("/api/service-classes")
+    @Consumes({ "application/json" })
+    @Produces({ "*/*" })
+    @ApiOperation(value = "getAllServiceClasses", tags={  })
+    @ApiResponses(value = { 
+        @ApiResponse(code = 200, message = "OK", response = ServiceClass.class, responseContainer = "array"),
+        @ApiResponse(code = 401, message = "Unauthorized", response =Void.class),
+        @ApiResponse(code = 403, message = "Forbidden", response =Void.class),
+        @ApiResponse(code = 404, message = "Not Found", response =Void.class) })
+    public List<ServiceClass> getAllServiceClassesUsingGET();
+
+    @GET
+    @Path("/api/service-classes/{id}")
+    @Consumes({ "application/json" })
+    @Produces({ "*/*" })
+    @ApiOperation(value = "getServiceClass", tags={  })
+    @ApiResponses(value = { 
+        @ApiResponse(code = 200, message = "OK", response = ServiceClass.class),
+        @ApiResponse(code = 401, message = "Unauthorized", response =Void.class),
+        @ApiResponse(code = 403, message = "Forbidden", response =Void.class),
+        @ApiResponse(code = 404, message = "Not Found", response =Void.class) })
+    public ServiceClass getServiceClassUsingGET(@PathParam("id") Long id);
+}
+
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/api/ServiceIncidenceResourceApi.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/api/ServiceIncidenceResourceApi.java
index 7a50affd04d3375428f78ceba29c64d025d0807b..ab3c03efbcd598d3584d0adaac7b9224fb15550f 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/api/ServiceIncidenceResourceApi.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/api/ServiceIncidenceResourceApi.java
@@ -1,63 +1,49 @@
-package eu.decideh2020.ACSmI.discovery.backend.client.api;
-
-import eu.decideh2020.ACSmI.discovery.backend.client.model.ServiceIncidence;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.List;
-import java.util.Map;
-import javax.ws.rs.*;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.MediaType;
-import org.apache.cxf.jaxrs.ext.multipart.*;
-
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiResponses;
-import io.swagger.annotations.ApiResponse;
-import io.swagger.jaxrs.PATCH;
-
-/**
- * acsmiservices API
- *
- * <p>acsmiservices API documentation
- *
- */
-@Path("/")
-@Api(value = "/", description = "")
-public interface ServiceIncidenceResourceApi  {
-
-    /**
-     * createServiceIncidence
-     *
-     */
-    @POST
-    @Path("/api/service-incidences")
-    @Consumes({ "application/json" })
-    @Produces({ "application/json" })
-    @ApiOperation(value = "createServiceIncidence", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK", response = ServiceIncidence.class),
-        @ApiResponse(code = 201, message = "Created"),
-        @ApiResponse(code = 401, message = "Unauthorized"),
-        @ApiResponse(code = 403, message = "Forbidden"),
-        @ApiResponse(code = 404, message = "Not Found") })
-    public ServiceIncidence createServiceIncidenceUsingPOST(ServiceIncidence serviceIncidence);
-
-    /**
-     * getAllServiceIncidences
-     *
-     */
-    @GET
-    @Path("/api/service-incidences/{id}")
-    @Consumes({ "application/json" })
-    @Produces({ "application/json" })
-    @ApiOperation(value = "getAllServiceIncidences", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK", response = ServiceIncidence.class, responseContainer = "List"),
-        @ApiResponse(code = 401, message = "Unauthorized"),
-        @ApiResponse(code = 403, message = "Forbidden"),
-        @ApiResponse(code = 404, message = "Not Found") })
-    public List<ServiceIncidence> getAllServiceIncidencesUsingGET(@PathParam("id") Long id);
-}
-
+package eu.decideh2020.ACSmI.discovery.backend.client.api;
+
+import eu.decideh2020.ACSmI.discovery.backend.client.model.ServiceIncidence;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.List;
+import java.util.Map;
+import javax.ws.rs.*;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.MediaType;
+import org.apache.cxf.jaxrs.ext.multipart.*;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponses;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.jaxrs.PATCH;
+
+@Path("/")
+@Api(value = "/", description = "")
+public interface ServiceIncidenceResourceApi  {
+
+    @POST
+    @Path("/api/service-incidences")
+    @Consumes({ "application/json" })
+    @Produces({ "application/json" })
+    @ApiOperation(value = "createServiceIncidence", tags={  })
+    @ApiResponses(value = { 
+        @ApiResponse(code = 200, message = "OK", response = ServiceIncidence.class),
+        @ApiResponse(code = 201, message = "Created", response =Void.class),
+        @ApiResponse(code = 401, message = "Unauthorized", response =Void.class),
+        @ApiResponse(code = 403, message = "Forbidden", response =Void.class),
+        @ApiResponse(code = 404, message = "Not Found", response =Void.class) })
+    public ServiceIncidence createServiceIncidenceUsingPOST(ServiceIncidence serviceIncidence);
+
+    @GET
+    @Path("/api/service-incidences/{id}")
+    @Consumes({ "application/json" })
+    @Produces({ "application/json" })
+    @ApiOperation(value = "getAllServiceIncidences", tags={  })
+    @ApiResponses(value = { 
+        @ApiResponse(code = 200, message = "OK", response = ServiceIncidence.class, responseContainer = "array"),
+        @ApiResponse(code = 401, message = "Unauthorized", response =Void.class),
+        @ApiResponse(code = 403, message = "Forbidden", response =Void.class),
+        @ApiResponse(code = 404, message = "Not Found", response =Void.class) })
+    public List<ServiceIncidence> getAllServiceIncidencesUsingGET(@PathParam("id") Long id);
+}
+
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/api/ServiceResourceApi.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/api/ServiceResourceApi.java
index 2278a7dc6d53eac306ec86645d57ce2b3aa2c341..4f90eaeeb8201c0a7010526b40f234377aa534e5 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/api/ServiceResourceApi.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/api/ServiceResourceApi.java
@@ -1,194 +1,148 @@
-package eu.decideh2020.ACSmI.discovery.backend.client.api;
-
-import eu.decideh2020.ACSmI.discovery.backend.client.model.Service;
-import eu.decideh2020.ACSmI.discovery.backend.client.model.ServiceDevOpsInfoVO;
-import eu.decideh2020.ACSmI.discovery.backend.client.model.ServiceNFRInfoVO;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.List;
-import java.util.Map;
-import javax.ws.rs.*;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.MediaType;
-import org.apache.cxf.jaxrs.ext.multipart.*;
-
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiResponses;
-import io.swagger.annotations.ApiResponse;
-import io.swagger.jaxrs.PATCH;
-
-/**
- * acsmiservices API
- *
- * <p>acsmiservices API documentation
- *
- */
-@Path("/")
-@Api(value = "/", description = "")
-public interface ServiceResourceApi  {
-
-    /**
-     * createService
-     *
-     */
-    @POST
-    @Path("/api/services")
-    @Consumes({ "application/json" })
-    @Produces({ "application/json" })
-    @ApiOperation(value = "createService", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK", response = Service.class),
-        @ApiResponse(code = 201, message = "Created"),
-        @ApiResponse(code = 401, message = "Unauthorized"),
-        @ApiResponse(code = 403, message = "Forbidden"),
-        @ApiResponse(code = 404, message = "Not Found") })
-    public Service createServiceUsingPOST(Service service, @QueryParam("attributes")List<String> attributes);
-
-    /**
-     * deleteService
-     *
-     */
-    @DELETE
-    @Path("/api/services/{id}")
-    @Consumes({ "application/json" })
-    @Produces({ "application/json" })
-    @ApiOperation(value = "deleteService", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK"),
-        @ApiResponse(code = 204, message = "No Content"),
-        @ApiResponse(code = 401, message = "Unauthorized"),
-        @ApiResponse(code = 403, message = "Forbidden") })
-    public void deleteServiceUsingDELETE(@PathParam("id") Long id, @QueryParam("forcedelete")String forcedelete);
-
-    /**
-     * findServicesByCSP
-     *
-     */
-    @GET
-    @Path("/api/services/cspservices")
-    @Consumes({ "application/json" })
-    @Produces({ "application/json" })
-    @ApiOperation(value = "findServicesByCSP", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK", response = Service.class, responseContainer = "List"),
-        @ApiResponse(code = 401, message = "Unauthorized"),
-        @ApiResponse(code = 403, message = "Forbidden"),
-        @ApiResponse(code = 404, message = "Not Found") })
-    public List<Service> findServicesByCSPUsingGET(@QueryParam("cspname")String cspname);
-
-    /**
-     * findServices
-     *
-     */
-    @GET
-    @Path("/api/services/find")
-    @Consumes({ "application/json" })
-    @Produces({ "application/json" })
-    @ApiOperation(value = "findServices", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK", response = Service.class, responseContainer = "List"),
-        @ApiResponse(code = 401, message = "Unauthorized"),
-        @ApiResponse(code = 403, message = "Forbidden"),
-        @ApiResponse(code = 404, message = "Not Found") })
-    public List<Service> findServicesUsingGET(@QueryParam("filter")String filter);
-
-    /**
-     * getAllServices
-     *
-     */
-    @GET
-    @Path("/api/services")
-    @Consumes({ "application/json" })
-    @Produces({ "application/json" })
-    @ApiOperation(value = "getAllServices", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK", response = Service.class, responseContainer = "List"),
-        @ApiResponse(code = 401, message = "Unauthorized"),
-        @ApiResponse(code = 403, message = "Forbidden"),
-        @ApiResponse(code = 404, message = "Not Found") })
-    public List<Service> getAllServicesUsingGET();
-
-    /**
-     * getDevOpsInfo
-     *
-     */
-    @GET
-    @Path("/api/services/devops")
-    @Consumes({ "application/json" })
-    @Produces({ "application/json" })
-    @ApiOperation(value = "getDevOpsInfo", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK", response = ServiceDevOpsInfoVO.class, responseContainer = "List"),
-        @ApiResponse(code = 401, message = "Unauthorized"),
-        @ApiResponse(code = 403, message = "Forbidden"),
-        @ApiResponse(code = 404, message = "Not Found") })
-    public List<ServiceDevOpsInfoVO> getDevOpsInfoUsingGET();
-
-    /**
-     * getOptimusInfo
-     *
-     */
-    @GET
-    @Path("/api/services/optimus")
-    @Consumes({ "application/json" })
-    @Produces({ "application/json" })
-    @ApiOperation(value = "getOptimusInfo", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK", response = Service.class, responseContainer = "List"),
-        @ApiResponse(code = 401, message = "Unauthorized"),
-        @ApiResponse(code = 403, message = "Forbidden"),
-        @ApiResponse(code = 404, message = "Not Found") })
-    public List<Service> getOptimusInfoUsingGET(@QueryParam("serviceids")List<Long> serviceids);
-
-    /**
-     * getServiceNfrInfo
-     *
-     */
-    @GET
-    @Path("/api/services/nfr")
-    @Consumes({ "application/json" })
-    @Produces({ "application/json" })
-    @ApiOperation(value = "getServiceNfrInfo", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK", response = ServiceNFRInfoVO.class, responseContainer = "List"),
-        @ApiResponse(code = 401, message = "Unauthorized"),
-        @ApiResponse(code = 403, message = "Forbidden"),
-        @ApiResponse(code = 404, message = "Not Found") })
-    public List<ServiceNFRInfoVO> getServiceNfrInfoUsingGET(@QueryParam("serviceids")List<Long> serviceids);
-
-    /**
-     * getService
-     *
-     */
-    @GET
-    @Path("/api/services/{id}")
-    @Consumes({ "application/json" })
-    @Produces({ "application/json" })
-    @ApiOperation(value = "getService", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK", response = Service.class),
-        @ApiResponse(code = 401, message = "Unauthorized"),
-        @ApiResponse(code = 403, message = "Forbidden"),
-        @ApiResponse(code = 404, message = "Not Found") })
-    public Service getServiceUsingGET(@PathParam("id") Long id);
-
-    /**
-     * updateService
-     *
-     */
-    @PUT
-    @Path("/api/services")
-    @Consumes({ "application/json" })
-    @Produces({ "application/json" })
-    @ApiOperation(value = "updateService", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK", response = Service.class),
-        @ApiResponse(code = 201, message = "Created"),
-        @ApiResponse(code = 401, message = "Unauthorized"),
-        @ApiResponse(code = 403, message = "Forbidden"),
-        @ApiResponse(code = 404, message = "Not Found") })
-    public Service updateServiceUsingPUT(Service service, @QueryParam("attributes")List<String> attributes);
-}
-
+package eu.decideh2020.ACSmI.discovery.backend.client.api;
+
+import eu.decideh2020.ACSmI.discovery.backend.client.model.Service;
+import eu.decideh2020.ACSmI.discovery.backend.client.model.ServiceDevOpsInfoVO;
+import eu.decideh2020.ACSmI.discovery.backend.client.model.ServiceNFRInfoVO;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.List;
+import java.util.Map;
+import javax.ws.rs.*;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.MediaType;
+import org.apache.cxf.jaxrs.ext.multipart.*;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponses;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.jaxrs.PATCH;
+
+@Path("/")
+@Api(value = "/", description = "")
+public interface ServiceResourceApi  {
+
+    @POST
+    @Path("/api/services")
+    @Consumes({ "application/json" })
+    @Produces({ "application/json" })
+    @ApiOperation(value = "createService", tags={  })
+    @ApiResponses(value = { 
+        @ApiResponse(code = 200, message = "OK", response = Service.class),
+        @ApiResponse(code = 201, message = "Created", response =Void.class),
+        @ApiResponse(code = 401, message = "Unauthorized", response =Void.class),
+        @ApiResponse(code = 403, message = "Forbidden", response =Void.class),
+        @ApiResponse(code = 404, message = "Not Found", response =Void.class) })
+    public Service createServiceUsingPOST(Service service, @QueryParam("attributes")List<String> attributes);
+
+    @DELETE
+    @Path("/api/services/{id}")
+    @Consumes({ "application/json" })
+    @Produces({ "application/json" })
+    @ApiOperation(value = "deleteService", tags={  })
+    @ApiResponses(value = { 
+        @ApiResponse(code = 200, message = "OK", response =Void.class),
+        @ApiResponse(code = 204, message = "No Content", response =Void.class),
+        @ApiResponse(code = 401, message = "Unauthorized", response =Void.class),
+        @ApiResponse(code = 403, message = "Forbidden", response =Void.class) })
+    public void deleteServiceUsingDELETE(@PathParam("id") Long id, @QueryParam("forcedelete")String forcedelete);
+
+    @GET
+    @Path("/api/services/cspservices")
+    @Consumes({ "application/json" })
+    @Produces({ "application/json" })
+    @ApiOperation(value = "findServicesByCSP", tags={  })
+    @ApiResponses(value = { 
+        @ApiResponse(code = 200, message = "OK", response = Service.class, responseContainer = "array"),
+        @ApiResponse(code = 401, message = "Unauthorized", response =Void.class),
+        @ApiResponse(code = 403, message = "Forbidden", response =Void.class),
+        @ApiResponse(code = 404, message = "Not Found", response =Void.class) })
+    public List<Service> findServicesByCSPUsingGET(@QueryParam("cspname")String cspname);
+
+    @GET
+    @Path("/api/services/find")
+    @Consumes({ "application/json" })
+    @Produces({ "application/json" })
+    @ApiOperation(value = "findServices", tags={  })
+    @ApiResponses(value = { 
+        @ApiResponse(code = 200, message = "OK", response = Service.class, responseContainer = "array"),
+        @ApiResponse(code = 401, message = "Unauthorized", response =Void.class),
+        @ApiResponse(code = 403, message = "Forbidden", response =Void.class),
+        @ApiResponse(code = 404, message = "Not Found", response =Void.class) })
+    public List<Service> findServicesUsingGET(@QueryParam("filter")String filter);
+
+    @GET
+    @Path("/api/services")
+    @Consumes({ "application/json" })
+    @Produces({ "application/json" })
+    @ApiOperation(value = "getAllServices", tags={  })
+    @ApiResponses(value = { 
+        @ApiResponse(code = 200, message = "OK", response = Service.class, responseContainer = "array"),
+        @ApiResponse(code = 401, message = "Unauthorized", response =Void.class),
+        @ApiResponse(code = 403, message = "Forbidden", response =Void.class),
+        @ApiResponse(code = 404, message = "Not Found", response =Void.class) })
+    public List<Service> getAllServicesUsingGET();
+
+    @GET
+    @Path("/api/services/devops")
+    @Consumes({ "application/json" })
+    @Produces({ "application/json" })
+    @ApiOperation(value = "getDevOpsInfo", tags={  })
+    @ApiResponses(value = { 
+        @ApiResponse(code = 200, message = "OK", response = ServiceDevOpsInfoVO.class, responseContainer = "array"),
+        @ApiResponse(code = 401, message = "Unauthorized", response =Void.class),
+        @ApiResponse(code = 403, message = "Forbidden", response =Void.class),
+        @ApiResponse(code = 404, message = "Not Found", response =Void.class) })
+    public List<ServiceDevOpsInfoVO> getDevOpsInfoUsingGET();
+
+    @GET
+    @Path("/api/services/optimus")
+    @Consumes({ "application/json" })
+    @Produces({ "application/json" })
+    @ApiOperation(value = "getOptimusInfo", tags={  })
+    @ApiResponses(value = { 
+        @ApiResponse(code = 200, message = "OK", response = Service.class, responseContainer = "array"),
+        @ApiResponse(code = 401, message = "Unauthorized", response =Void.class),
+        @ApiResponse(code = 403, message = "Forbidden", response =Void.class),
+        @ApiResponse(code = 404, message = "Not Found", response =Void.class) })
+    public List<Service> getOptimusInfoUsingGET(@QueryParam("serviceids")List<Long> serviceids);
+
+    @GET
+    @Path("/api/services/nfr")
+    @Consumes({ "application/json" })
+    @Produces({ "application/json" })
+    @ApiOperation(value = "getServiceNfrInfo", tags={  })
+    @ApiResponses(value = { 
+        @ApiResponse(code = 200, message = "OK", response = ServiceNFRInfoVO.class, responseContainer = "array"),
+        @ApiResponse(code = 401, message = "Unauthorized", response =Void.class),
+        @ApiResponse(code = 403, message = "Forbidden", response =Void.class),
+        @ApiResponse(code = 404, message = "Not Found", response =Void.class) })
+    public List<ServiceNFRInfoVO> getServiceNfrInfoUsingGET(@QueryParam("serviceids")List<Long> serviceids);
+
+    @GET
+    @Path("/api/services/{id}")
+    @Consumes({ "application/json" })
+    @Produces({ "application/json" })
+    @ApiOperation(value = "getService", tags={  })
+    @ApiResponses(value = { 
+        @ApiResponse(code = 200, message = "OK", response = Service.class),
+        @ApiResponse(code = 401, message = "Unauthorized", response =Void.class),
+        @ApiResponse(code = 403, message = "Forbidden", response =Void.class),
+        @ApiResponse(code = 404, message = "Not Found", response =Void.class) })
+    public Service getServiceUsingGET(@PathParam("id") Long id);
+
+    @PUT
+    @Path("/api/services")
+    @Consumes({ "application/json" })
+    @Produces({ "application/json" })
+    @ApiOperation(value = "updateService", tags={  })
+    @ApiResponses(value = { 
+        @ApiResponse(code = 200, message = "OK", response = Service.class),
+        @ApiResponse(code = 201, message = "Created", response =Void.class),
+        @ApiResponse(code = 401, message = "Unauthorized", response =Void.class),
+        @ApiResponse(code = 403, message = "Forbidden", response =Void.class),
+        @ApiResponse(code = 404, message = "Not Found", response =Void.class) })
+    public Service updateServiceUsingPUT(Service service, @QueryParam("attributes")List<String> attributes);
+}
+
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/AttributeVO.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/AttributeVO.java
index 6909430cc7f90be9125f36a34e0c4e8850ce914f..e16e2481fd539159ff89c34e823d2d7f7ea3b60a 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/AttributeVO.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/AttributeVO.java
@@ -1,498 +1,457 @@
-package eu.decideh2020.ACSmI.discovery.backend.client.model;
-
-
-import io.swagger.annotations.ApiModelProperty;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlType;
-import javax.xml.bind.annotation.XmlEnum;
-import javax.xml.bind.annotation.XmlEnumValue;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public class AttributeVO  {
-  
-  @ApiModelProperty(value = "")
-  private String checklistevalrule = null;
-
-  @ApiModelProperty(value = "")
-  private String checklistvalue = null;
-
-  @ApiModelProperty(value = "")
-  private Long childid = null;
-
-  @ApiModelProperty(value = "")
-  private Long classattributeid = null;
-
-  @ApiModelProperty(value = "")
-  private String human = null;
-
-  @ApiModelProperty(value = "")
-  private Boolean ischecklist = null;
-
-  @ApiModelProperty(value = "")
-  private Boolean iscommon = null;
-
-  @ApiModelProperty(value = "")
-  private Boolean isenumeration = null;
-
-  @ApiModelProperty(value = "")
-  private Boolean isfunctionalrequirement = null;
-
-  @ApiModelProperty(value = "")
-  private Boolean ismandatory = null;
-
-  @ApiModelProperty(value = "")
-  private String name = null;
-
-  @ApiModelProperty(value = "")
-  private String nfrname = null;
-
-  @ApiModelProperty(value = "")
-  private Long parentid = null;
-
-  @ApiModelProperty(value = "")
-  private Long typeid = null;
-
-  @ApiModelProperty(value = "")
-  private String unitfactor = null;
-
-  @ApiModelProperty(value = "")
-  private String unitrule = null;
-
-  @ApiModelProperty(value = "")
-  private String units = null;
-
-  @ApiModelProperty(value = "")
-  private String unitvalue = null;
-
-  @ApiModelProperty(value = "")
-  private String value = null;
-
-  @ApiModelProperty(value = "")
-  private Long valueid = null;
-
-  @ApiModelProperty(value = "")
-  private Integer weight = null;
- /**
-   * Get checklistevalrule
-   * @return checklistevalrule
-  **/
-  @JsonProperty("checklistevalrule")
-  public String getChecklistevalrule() {
-    return checklistevalrule;
-  }
-
-  public void setChecklistevalrule(String checklistevalrule) {
-    this.checklistevalrule = checklistevalrule;
-  }
-
-  public AttributeVO checklistevalrule(String checklistevalrule) {
-    this.checklistevalrule = checklistevalrule;
-    return this;
-  }
-
- /**
-   * Get checklistvalue
-   * @return checklistvalue
-  **/
-  @JsonProperty("checklistvalue")
-  public String getChecklistvalue() {
-    return checklistvalue;
-  }
-
-  public void setChecklistvalue(String checklistvalue) {
-    this.checklistvalue = checklistvalue;
-  }
-
-  public AttributeVO checklistvalue(String checklistvalue) {
-    this.checklistvalue = checklistvalue;
-    return this;
-  }
-
- /**
-   * Get childid
-   * @return childid
-  **/
-  @JsonProperty("childid")
-  public Long getChildid() {
-    return childid;
-  }
-
-  public void setChildid(Long childid) {
-    this.childid = childid;
-  }
-
-  public AttributeVO childid(Long childid) {
-    this.childid = childid;
-    return this;
-  }
-
- /**
-   * Get classattributeid
-   * @return classattributeid
-  **/
-  @JsonProperty("classattributeid")
-  public Long getClassattributeid() {
-    return classattributeid;
-  }
-
-  public void setClassattributeid(Long classattributeid) {
-    this.classattributeid = classattributeid;
-  }
-
-  public AttributeVO classattributeid(Long classattributeid) {
-    this.classattributeid = classattributeid;
-    return this;
-  }
-
- /**
-   * Get human
-   * @return human
-  **/
-  @JsonProperty("human")
-  public String getHuman() {
-    return human;
-  }
-
-  public void setHuman(String human) {
-    this.human = human;
-  }
-
-  public AttributeVO human(String human) {
-    this.human = human;
-    return this;
-  }
-
- /**
-   * Get ischecklist
-   * @return ischecklist
-  **/
-  @JsonProperty("ischecklist")
-  public Boolean isIschecklist() {
-    return ischecklist;
-  }
-
-  public void setIschecklist(Boolean ischecklist) {
-    this.ischecklist = ischecklist;
-  }
-
-  public AttributeVO ischecklist(Boolean ischecklist) {
-    this.ischecklist = ischecklist;
-    return this;
-  }
-
- /**
-   * Get iscommon
-   * @return iscommon
-  **/
-  @JsonProperty("iscommon")
-  public Boolean isIscommon() {
-    return iscommon;
-  }
-
-  public void setIscommon(Boolean iscommon) {
-    this.iscommon = iscommon;
-  }
-
-  public AttributeVO iscommon(Boolean iscommon) {
-    this.iscommon = iscommon;
-    return this;
-  }
-
- /**
-   * Get isenumeration
-   * @return isenumeration
-  **/
-  @JsonProperty("isenumeration")
-  public Boolean isIsenumeration() {
-    return isenumeration;
-  }
-
-  public void setIsenumeration(Boolean isenumeration) {
-    this.isenumeration = isenumeration;
-  }
-
-  public AttributeVO isenumeration(Boolean isenumeration) {
-    this.isenumeration = isenumeration;
-    return this;
-  }
-
- /**
-   * Get isfunctionalrequirement
-   * @return isfunctionalrequirement
-  **/
-  @JsonProperty("isfunctionalrequirement")
-  public Boolean isIsfunctionalrequirement() {
-    return isfunctionalrequirement;
-  }
-
-  public void setIsfunctionalrequirement(Boolean isfunctionalrequirement) {
-    this.isfunctionalrequirement = isfunctionalrequirement;
-  }
-
-  public AttributeVO isfunctionalrequirement(Boolean isfunctionalrequirement) {
-    this.isfunctionalrequirement = isfunctionalrequirement;
-    return this;
-  }
-
- /**
-   * Get ismandatory
-   * @return ismandatory
-  **/
-  @JsonProperty("ismandatory")
-  public Boolean isIsmandatory() {
-    return ismandatory;
-  }
-
-  public void setIsmandatory(Boolean ismandatory) {
-    this.ismandatory = ismandatory;
-  }
-
-  public AttributeVO ismandatory(Boolean ismandatory) {
-    this.ismandatory = ismandatory;
-    return this;
-  }
-
- /**
-   * Get name
-   * @return name
-  **/
-  @JsonProperty("name")
-  public String getName() {
-    return name;
-  }
-
-  public void setName(String name) {
-    this.name = name;
-  }
-
-  public AttributeVO name(String name) {
-    this.name = name;
-    return this;
-  }
-
- /**
-   * Get nfrname
-   * @return nfrname
-  **/
-  @JsonProperty("nfrname")
-  public String getNfrname() {
-    return nfrname;
-  }
-
-  public void setNfrname(String nfrname) {
-    this.nfrname = nfrname;
-  }
-
-  public AttributeVO nfrname(String nfrname) {
-    this.nfrname = nfrname;
-    return this;
-  }
-
- /**
-   * Get parentid
-   * @return parentid
-  **/
-  @JsonProperty("parentid")
-  public Long getParentid() {
-    return parentid;
-  }
-
-  public void setParentid(Long parentid) {
-    this.parentid = parentid;
-  }
-
-  public AttributeVO parentid(Long parentid) {
-    this.parentid = parentid;
-    return this;
-  }
-
- /**
-   * Get typeid
-   * @return typeid
-  **/
-  @JsonProperty("typeid")
-  public Long getTypeid() {
-    return typeid;
-  }
-
-  public void setTypeid(Long typeid) {
-    this.typeid = typeid;
-  }
-
-  public AttributeVO typeid(Long typeid) {
-    this.typeid = typeid;
-    return this;
-  }
-
- /**
-   * Get unitfactor
-   * @return unitfactor
-  **/
-  @JsonProperty("unitfactor")
-  public String getUnitfactor() {
-    return unitfactor;
-  }
-
-  public void setUnitfactor(String unitfactor) {
-    this.unitfactor = unitfactor;
-  }
-
-  public AttributeVO unitfactor(String unitfactor) {
-    this.unitfactor = unitfactor;
-    return this;
-  }
-
- /**
-   * Get unitrule
-   * @return unitrule
-  **/
-  @JsonProperty("unitrule")
-  public String getUnitrule() {
-    return unitrule;
-  }
-
-  public void setUnitrule(String unitrule) {
-    this.unitrule = unitrule;
-  }
-
-  public AttributeVO unitrule(String unitrule) {
-    this.unitrule = unitrule;
-    return this;
-  }
-
- /**
-   * Get units
-   * @return units
-  **/
-  @JsonProperty("units")
-  public String getUnits() {
-    return units;
-  }
-
-  public void setUnits(String units) {
-    this.units = units;
-  }
-
-  public AttributeVO units(String units) {
-    this.units = units;
-    return this;
-  }
-
- /**
-   * Get unitvalue
-   * @return unitvalue
-  **/
-  @JsonProperty("unitvalue")
-  public String getUnitvalue() {
-    return unitvalue;
-  }
-
-  public void setUnitvalue(String unitvalue) {
-    this.unitvalue = unitvalue;
-  }
-
-  public AttributeVO unitvalue(String unitvalue) {
-    this.unitvalue = unitvalue;
-    return this;
-  }
-
- /**
-   * Get value
-   * @return value
-  **/
-  @JsonProperty("value")
-  public String getValue() {
-    return value;
-  }
-
-  public void setValue(String value) {
-    this.value = value;
-  }
-
-  public AttributeVO value(String value) {
-    this.value = value;
-    return this;
-  }
-
- /**
-   * Get valueid
-   * @return valueid
-  **/
-  @JsonProperty("valueid")
-  public Long getValueid() {
-    return valueid;
-  }
-
-  public void setValueid(Long valueid) {
-    this.valueid = valueid;
-  }
-
-  public AttributeVO valueid(Long valueid) {
-    this.valueid = valueid;
-    return this;
-  }
-
- /**
-   * Get weight
-   * @return weight
-  **/
-  @JsonProperty("weight")
-  public Integer getWeight() {
-    return weight;
-  }
-
-  public void setWeight(Integer weight) {
-    this.weight = weight;
-  }
-
-  public AttributeVO weight(Integer weight) {
-    this.weight = weight;
-    return this;
-  }
-
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("class AttributeVO {\n");
-    
-    sb.append("    checklistevalrule: ").append(toIndentedString(checklistevalrule)).append("\n");
-    sb.append("    checklistvalue: ").append(toIndentedString(checklistvalue)).append("\n");
-    sb.append("    childid: ").append(toIndentedString(childid)).append("\n");
-    sb.append("    classattributeid: ").append(toIndentedString(classattributeid)).append("\n");
-    sb.append("    human: ").append(toIndentedString(human)).append("\n");
-    sb.append("    ischecklist: ").append(toIndentedString(ischecklist)).append("\n");
-    sb.append("    iscommon: ").append(toIndentedString(iscommon)).append("\n");
-    sb.append("    isenumeration: ").append(toIndentedString(isenumeration)).append("\n");
-    sb.append("    isfunctionalrequirement: ").append(toIndentedString(isfunctionalrequirement)).append("\n");
-    sb.append("    ismandatory: ").append(toIndentedString(ismandatory)).append("\n");
-    sb.append("    name: ").append(toIndentedString(name)).append("\n");
-    sb.append("    nfrname: ").append(toIndentedString(nfrname)).append("\n");
-    sb.append("    parentid: ").append(toIndentedString(parentid)).append("\n");
-    sb.append("    typeid: ").append(toIndentedString(typeid)).append("\n");
-    sb.append("    unitfactor: ").append(toIndentedString(unitfactor)).append("\n");
-    sb.append("    unitrule: ").append(toIndentedString(unitrule)).append("\n");
-    sb.append("    units: ").append(toIndentedString(units)).append("\n");
-    sb.append("    unitvalue: ").append(toIndentedString(unitvalue)).append("\n");
-    sb.append("    value: ").append(toIndentedString(value)).append("\n");
-    sb.append("    valueid: ").append(toIndentedString(valueid)).append("\n");
-    sb.append("    weight: ").append(toIndentedString(weight)).append("\n");
-    sb.append("}");
-    return sb.toString();
-  }
-
-  /**
-   * Convert the given object to string with each line indented by 4 spaces
-   * (except the first line).
-   */
-  private static String toIndentedString(java.lang.Object o) {
-    if (o == null) {
-      return "null";
-    }
-    return o.toString().replace("\n", "\n    ");
-  }
-}
-
+package eu.decideh2020.ACSmI.discovery.backend.client.model;
+
+
+import io.swagger.annotations.ApiModelProperty;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlEnum;
+import javax.xml.bind.annotation.XmlEnumValue;
+
+public class AttributeVO  {
+  
+  @ApiModelProperty(value = "")
+  private String checklistvalue = null;
+  @ApiModelProperty(value = "")
+  private Long childid = null;
+  @ApiModelProperty(value = "")
+  private Long classattributeid = null;
+  @ApiModelProperty(value = "")
+  private String evalrule = null;
+  @ApiModelProperty(value = "")
+  private String human = null;
+  @ApiModelProperty(value = "")
+  private Boolean ischecklist = null;
+  @ApiModelProperty(value = "")
+  private Boolean iscommon = null;
+  @ApiModelProperty(value = "")
+  private Boolean isenumeration = null;
+  @ApiModelProperty(value = "")
+  private Boolean isfunctionalrequirement = null;
+  @ApiModelProperty(value = "")
+  private Boolean ismandatory = null;
+  @ApiModelProperty(value = "")
+  private String name = null;
+  @ApiModelProperty(value = "")
+  private String nfrname = null;
+  @ApiModelProperty(value = "")
+  private Long parentid = null;
+  @ApiModelProperty(value = "")
+  private Long typeid = null;
+  @ApiModelProperty(value = "")
+  private String unitfactor = null;
+  @ApiModelProperty(value = "")
+  private String unitrule = null;
+  @ApiModelProperty(value = "")
+  private String units = null;
+  @ApiModelProperty(value = "")
+  private String unitvalue = null;
+  @ApiModelProperty(value = "")
+  private String value = null;
+  @ApiModelProperty(value = "")
+  private Long valueid = null;
+  @ApiModelProperty(value = "")
+  private Integer weight = null;
+
+ /**
+   * Get checklistvalue
+   * @return checklistvalue
+  **/
+  public String getChecklistvalue() {
+    return checklistvalue;
+  }
+
+  public void setChecklistvalue(String checklistvalue) {
+    this.checklistvalue = checklistvalue;
+  }
+
+  public AttributeVO checklistvalue(String checklistvalue) {
+    this.checklistvalue = checklistvalue;
+    return this;
+  }
+
+ /**
+   * Get childid
+   * @return childid
+  **/
+  public Long getChildid() {
+    return childid;
+  }
+
+  public void setChildid(Long childid) {
+    this.childid = childid;
+  }
+
+  public AttributeVO childid(Long childid) {
+    this.childid = childid;
+    return this;
+  }
+
+ /**
+   * Get classattributeid
+   * @return classattributeid
+  **/
+  public Long getClassattributeid() {
+    return classattributeid;
+  }
+
+  public void setClassattributeid(Long classattributeid) {
+    this.classattributeid = classattributeid;
+  }
+
+  public AttributeVO classattributeid(Long classattributeid) {
+    this.classattributeid = classattributeid;
+    return this;
+  }
+
+ /**
+   * Get evalrule
+   * @return evalrule
+  **/
+  public String getEvalrule() {
+    return evalrule;
+  }
+
+  public void setEvalrule(String evalrule) {
+    this.evalrule = evalrule;
+  }
+
+  public AttributeVO evalrule(String evalrule) {
+    this.evalrule = evalrule;
+    return this;
+  }
+
+ /**
+   * Get human
+   * @return human
+  **/
+  public String getHuman() {
+    return human;
+  }
+
+  public void setHuman(String human) {
+    this.human = human;
+  }
+
+  public AttributeVO human(String human) {
+    this.human = human;
+    return this;
+  }
+
+ /**
+   * Get ischecklist
+   * @return ischecklist
+  **/
+  public Boolean isIschecklist() {
+    return ischecklist;
+  }
+
+  public void setIschecklist(Boolean ischecklist) {
+    this.ischecklist = ischecklist;
+  }
+
+  public AttributeVO ischecklist(Boolean ischecklist) {
+    this.ischecklist = ischecklist;
+    return this;
+  }
+
+ /**
+   * Get iscommon
+   * @return iscommon
+  **/
+  public Boolean isIscommon() {
+    return iscommon;
+  }
+
+  public void setIscommon(Boolean iscommon) {
+    this.iscommon = iscommon;
+  }
+
+  public AttributeVO iscommon(Boolean iscommon) {
+    this.iscommon = iscommon;
+    return this;
+  }
+
+ /**
+   * Get isenumeration
+   * @return isenumeration
+  **/
+  public Boolean isIsenumeration() {
+    return isenumeration;
+  }
+
+  public void setIsenumeration(Boolean isenumeration) {
+    this.isenumeration = isenumeration;
+  }
+
+  public AttributeVO isenumeration(Boolean isenumeration) {
+    this.isenumeration = isenumeration;
+    return this;
+  }
+
+ /**
+   * Get isfunctionalrequirement
+   * @return isfunctionalrequirement
+  **/
+  public Boolean isIsfunctionalrequirement() {
+    return isfunctionalrequirement;
+  }
+
+  public void setIsfunctionalrequirement(Boolean isfunctionalrequirement) {
+    this.isfunctionalrequirement = isfunctionalrequirement;
+  }
+
+  public AttributeVO isfunctionalrequirement(Boolean isfunctionalrequirement) {
+    this.isfunctionalrequirement = isfunctionalrequirement;
+    return this;
+  }
+
+ /**
+   * Get ismandatory
+   * @return ismandatory
+  **/
+  public Boolean isIsmandatory() {
+    return ismandatory;
+  }
+
+  public void setIsmandatory(Boolean ismandatory) {
+    this.ismandatory = ismandatory;
+  }
+
+  public AttributeVO ismandatory(Boolean ismandatory) {
+    this.ismandatory = ismandatory;
+    return this;
+  }
+
+ /**
+   * Get name
+   * @return name
+  **/
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  public AttributeVO name(String name) {
+    this.name = name;
+    return this;
+  }
+
+ /**
+   * Get nfrname
+   * @return nfrname
+  **/
+  public String getNfrname() {
+    return nfrname;
+  }
+
+  public void setNfrname(String nfrname) {
+    this.nfrname = nfrname;
+  }
+
+  public AttributeVO nfrname(String nfrname) {
+    this.nfrname = nfrname;
+    return this;
+  }
+
+ /**
+   * Get parentid
+   * @return parentid
+  **/
+  public Long getParentid() {
+    return parentid;
+  }
+
+  public void setParentid(Long parentid) {
+    this.parentid = parentid;
+  }
+
+  public AttributeVO parentid(Long parentid) {
+    this.parentid = parentid;
+    return this;
+  }
+
+ /**
+   * Get typeid
+   * @return typeid
+  **/
+  public Long getTypeid() {
+    return typeid;
+  }
+
+  public void setTypeid(Long typeid) {
+    this.typeid = typeid;
+  }
+
+  public AttributeVO typeid(Long typeid) {
+    this.typeid = typeid;
+    return this;
+  }
+
+ /**
+   * Get unitfactor
+   * @return unitfactor
+  **/
+  public String getUnitfactor() {
+    return unitfactor;
+  }
+
+  public void setUnitfactor(String unitfactor) {
+    this.unitfactor = unitfactor;
+  }
+
+  public AttributeVO unitfactor(String unitfactor) {
+    this.unitfactor = unitfactor;
+    return this;
+  }
+
+ /**
+   * Get unitrule
+   * @return unitrule
+  **/
+  public String getUnitrule() {
+    return unitrule;
+  }
+
+  public void setUnitrule(String unitrule) {
+    this.unitrule = unitrule;
+  }
+
+  public AttributeVO unitrule(String unitrule) {
+    this.unitrule = unitrule;
+    return this;
+  }
+
+ /**
+   * Get units
+   * @return units
+  **/
+  public String getUnits() {
+    return units;
+  }
+
+  public void setUnits(String units) {
+    this.units = units;
+  }
+
+  public AttributeVO units(String units) {
+    this.units = units;
+    return this;
+  }
+
+ /**
+   * Get unitvalue
+   * @return unitvalue
+  **/
+  public String getUnitvalue() {
+    return unitvalue;
+  }
+
+  public void setUnitvalue(String unitvalue) {
+    this.unitvalue = unitvalue;
+  }
+
+  public AttributeVO unitvalue(String unitvalue) {
+    this.unitvalue = unitvalue;
+    return this;
+  }
+
+ /**
+   * Get value
+   * @return value
+  **/
+  public String getValue() {
+    return value;
+  }
+
+  public void setValue(String value) {
+    this.value = value;
+  }
+
+  public AttributeVO value(String value) {
+    this.value = value;
+    return this;
+  }
+
+ /**
+   * Get valueid
+   * @return valueid
+  **/
+  public Long getValueid() {
+    return valueid;
+  }
+
+  public void setValueid(Long valueid) {
+    this.valueid = valueid;
+  }
+
+  public AttributeVO valueid(Long valueid) {
+    this.valueid = valueid;
+    return this;
+  }
+
+ /**
+   * Get weight
+   * @return weight
+  **/
+  public Integer getWeight() {
+    return weight;
+  }
+
+  public void setWeight(Integer weight) {
+    this.weight = weight;
+  }
+
+  public AttributeVO weight(Integer weight) {
+    this.weight = weight;
+    return this;
+  }
+
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AttributeVO {\n");
+    
+    sb.append("    checklistvalue: ").append(toIndentedString(checklistvalue)).append("\n");
+    sb.append("    childid: ").append(toIndentedString(childid)).append("\n");
+    sb.append("    classattributeid: ").append(toIndentedString(classattributeid)).append("\n");
+    sb.append("    evalrule: ").append(toIndentedString(evalrule)).append("\n");
+    sb.append("    human: ").append(toIndentedString(human)).append("\n");
+    sb.append("    ischecklist: ").append(toIndentedString(ischecklist)).append("\n");
+    sb.append("    iscommon: ").append(toIndentedString(iscommon)).append("\n");
+    sb.append("    isenumeration: ").append(toIndentedString(isenumeration)).append("\n");
+    sb.append("    isfunctionalrequirement: ").append(toIndentedString(isfunctionalrequirement)).append("\n");
+    sb.append("    ismandatory: ").append(toIndentedString(ismandatory)).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("    nfrname: ").append(toIndentedString(nfrname)).append("\n");
+    sb.append("    parentid: ").append(toIndentedString(parentid)).append("\n");
+    sb.append("    typeid: ").append(toIndentedString(typeid)).append("\n");
+    sb.append("    unitfactor: ").append(toIndentedString(unitfactor)).append("\n");
+    sb.append("    unitrule: ").append(toIndentedString(unitrule)).append("\n");
+    sb.append("    units: ").append(toIndentedString(units)).append("\n");
+    sb.append("    unitvalue: ").append(toIndentedString(unitvalue)).append("\n");
+    sb.append("    value: ").append(toIndentedString(value)).append("\n");
+    sb.append("    valueid: ").append(toIndentedString(valueid)).append("\n");
+    sb.append("    weight: ").append(toIndentedString(weight)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private static String toIndentedString(java.lang.Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/Definition.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/Definition.java
index f329aab5f40757b0ff74b1cdb73cd3b73ff51d06..2084287cf89e2ff30f08d7b4821db71800ecbf47 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/Definition.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/Definition.java
@@ -1,235 +1,218 @@
-package eu.decideh2020.ACSmI.discovery.backend.client.model;
-
-import java.util.Date;
-
-import io.swagger.annotations.ApiModelProperty;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlType;
-import javax.xml.bind.annotation.XmlEnum;
-import javax.xml.bind.annotation.XmlEnumValue;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public class Definition  {
-  
-  @ApiModelProperty(required = true, value = "")
-  private String code = null;
-
-  @ApiModelProperty(value = "")
-  private Date createdDate = null;
-
-  @ApiModelProperty(value = "")
-  private Date deleteddate = null;
-
-  @ApiModelProperty(value = "")
-  private Long id = null;
-
-  @ApiModelProperty(required = true, value = "")
-  private Boolean ischeckoption = null;
-
-  @ApiModelProperty(required = true, value = "")
-  private Boolean ismainattribute = null;
-
-  @ApiModelProperty(value = "")
-  private Date lastModifiedDate = null;
-
-  @ApiModelProperty(value = "")
-  private Long typeid = null;
-
-  @ApiModelProperty(required = true, value = "")
-  private String value = null;
- /**
-   * Get code
-   * @return code
-  **/
-  @JsonProperty("code")
-  public String getCode() {
-    return code;
-  }
-
-  public void setCode(String code) {
-    this.code = code;
-  }
-
-  public Definition code(String code) {
-    this.code = code;
-    return this;
-  }
-
- /**
-   * Get createdDate
-   * @return createdDate
-  **/
-  @JsonProperty("createdDate")
-  public Date getCreatedDate() {
-    return createdDate;
-  }
-
-  public void setCreatedDate(Date createdDate) {
-    this.createdDate = createdDate;
-  }
-
-  public Definition createdDate(Date createdDate) {
-    this.createdDate = createdDate;
-    return this;
-  }
-
- /**
-   * Get deleteddate
-   * @return deleteddate
-  **/
-  @JsonProperty("deleteddate")
-  public Date getDeleteddate() {
-    return deleteddate;
-  }
-
-  public void setDeleteddate(Date deleteddate) {
-    this.deleteddate = deleteddate;
-  }
-
-  public Definition deleteddate(Date deleteddate) {
-    this.deleteddate = deleteddate;
-    return this;
-  }
-
- /**
-   * Get id
-   * @return id
-  **/
-  @JsonProperty("id")
-  public Long getId() {
-    return id;
-  }
-
-  public void setId(Long id) {
-    this.id = id;
-  }
-
-  public Definition id(Long id) {
-    this.id = id;
-    return this;
-  }
-
- /**
-   * Get ischeckoption
-   * @return ischeckoption
-  **/
-  @JsonProperty("ischeckoption")
-  public Boolean isIscheckoption() {
-    return ischeckoption;
-  }
-
-  public void setIscheckoption(Boolean ischeckoption) {
-    this.ischeckoption = ischeckoption;
-  }
-
-  public Definition ischeckoption(Boolean ischeckoption) {
-    this.ischeckoption = ischeckoption;
-    return this;
-  }
-
- /**
-   * Get ismainattribute
-   * @return ismainattribute
-  **/
-  @JsonProperty("ismainattribute")
-  public Boolean isIsmainattribute() {
-    return ismainattribute;
-  }
-
-  public void setIsmainattribute(Boolean ismainattribute) {
-    this.ismainattribute = ismainattribute;
-  }
-
-  public Definition ismainattribute(Boolean ismainattribute) {
-    this.ismainattribute = ismainattribute;
-    return this;
-  }
-
- /**
-   * Get lastModifiedDate
-   * @return lastModifiedDate
-  **/
-  @JsonProperty("lastModifiedDate")
-  public Date getLastModifiedDate() {
-    return lastModifiedDate;
-  }
-
-  public void setLastModifiedDate(Date lastModifiedDate) {
-    this.lastModifiedDate = lastModifiedDate;
-  }
-
-  public Definition lastModifiedDate(Date lastModifiedDate) {
-    this.lastModifiedDate = lastModifiedDate;
-    return this;
-  }
-
- /**
-   * Get typeid
-   * @return typeid
-  **/
-  @JsonProperty("typeid")
-  public Long getTypeid() {
-    return typeid;
-  }
-
-  public void setTypeid(Long typeid) {
-    this.typeid = typeid;
-  }
-
-  public Definition typeid(Long typeid) {
-    this.typeid = typeid;
-    return this;
-  }
-
- /**
-   * Get value
-   * @return value
-  **/
-  @JsonProperty("value")
-  public String getValue() {
-    return value;
-  }
-
-  public void setValue(String value) {
-    this.value = value;
-  }
-
-  public Definition value(String value) {
-    this.value = value;
-    return this;
-  }
-
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("class Definition {\n");
-    
-    sb.append("    code: ").append(toIndentedString(code)).append("\n");
-    sb.append("    createdDate: ").append(toIndentedString(createdDate)).append("\n");
-    sb.append("    deleteddate: ").append(toIndentedString(deleteddate)).append("\n");
-    sb.append("    id: ").append(toIndentedString(id)).append("\n");
-    sb.append("    ischeckoption: ").append(toIndentedString(ischeckoption)).append("\n");
-    sb.append("    ismainattribute: ").append(toIndentedString(ismainattribute)).append("\n");
-    sb.append("    lastModifiedDate: ").append(toIndentedString(lastModifiedDate)).append("\n");
-    sb.append("    typeid: ").append(toIndentedString(typeid)).append("\n");
-    sb.append("    value: ").append(toIndentedString(value)).append("\n");
-    sb.append("}");
-    return sb.toString();
-  }
-
-  /**
-   * Convert the given object to string with each line indented by 4 spaces
-   * (except the first line).
-   */
-  private static String toIndentedString(java.lang.Object o) {
-    if (o == null) {
-      return "null";
-    }
-    return o.toString().replace("\n", "\n    ");
-  }
-}
-
+package eu.decideh2020.ACSmI.discovery.backend.client.model;
+
+import java.util.Date;
+
+import io.swagger.annotations.ApiModelProperty;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlEnum;
+import javax.xml.bind.annotation.XmlEnumValue;
+
+public class Definition  {
+  
+  @ApiModelProperty(required = true, value = "")
+  private String code = null;
+  @ApiModelProperty(value = "")
+  private Date createdDate = null;
+  @ApiModelProperty(value = "")
+  private Date deleteddate = null;
+  @ApiModelProperty(value = "")
+  private Long id = null;
+  @ApiModelProperty(required = true, value = "")
+  private Boolean ischeckoption = null;
+  @ApiModelProperty(required = true, value = "")
+  private Boolean ismainattribute = null;
+  @ApiModelProperty(value = "")
+  private Date lastModifiedDate = null;
+  @ApiModelProperty(value = "")
+  private Long typeid = null;
+  @ApiModelProperty(required = true, value = "")
+  private String value = null;
+
+ /**
+   * Get code
+   * @return code
+  **/
+  public String getCode() {
+    return code;
+  }
+
+  public void setCode(String code) {
+    this.code = code;
+  }
+
+  public Definition code(String code) {
+    this.code = code;
+    return this;
+  }
+
+ /**
+   * Get createdDate
+   * @return createdDate
+  **/
+  public Date getCreatedDate() {
+    return createdDate;
+  }
+
+  public void setCreatedDate(Date createdDate) {
+    this.createdDate = createdDate;
+  }
+
+  public Definition createdDate(Date createdDate) {
+    this.createdDate = createdDate;
+    return this;
+  }
+
+ /**
+   * Get deleteddate
+   * @return deleteddate
+  **/
+  public Date getDeleteddate() {
+    return deleteddate;
+  }
+
+  public void setDeleteddate(Date deleteddate) {
+    this.deleteddate = deleteddate;
+  }
+
+  public Definition deleteddate(Date deleteddate) {
+    this.deleteddate = deleteddate;
+    return this;
+  }
+
+ /**
+   * Get id
+   * @return id
+  **/
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public Definition id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+ /**
+   * Get ischeckoption
+   * @return ischeckoption
+  **/
+  public Boolean isIscheckoption() {
+    return ischeckoption;
+  }
+
+  public void setIscheckoption(Boolean ischeckoption) {
+    this.ischeckoption = ischeckoption;
+  }
+
+  public Definition ischeckoption(Boolean ischeckoption) {
+    this.ischeckoption = ischeckoption;
+    return this;
+  }
+
+ /**
+   * Get ismainattribute
+   * @return ismainattribute
+  **/
+  public Boolean isIsmainattribute() {
+    return ismainattribute;
+  }
+
+  public void setIsmainattribute(Boolean ismainattribute) {
+    this.ismainattribute = ismainattribute;
+  }
+
+  public Definition ismainattribute(Boolean ismainattribute) {
+    this.ismainattribute = ismainattribute;
+    return this;
+  }
+
+ /**
+   * Get lastModifiedDate
+   * @return lastModifiedDate
+  **/
+  public Date getLastModifiedDate() {
+    return lastModifiedDate;
+  }
+
+  public void setLastModifiedDate(Date lastModifiedDate) {
+    this.lastModifiedDate = lastModifiedDate;
+  }
+
+  public Definition lastModifiedDate(Date lastModifiedDate) {
+    this.lastModifiedDate = lastModifiedDate;
+    return this;
+  }
+
+ /**
+   * Get typeid
+   * @return typeid
+  **/
+  public Long getTypeid() {
+    return typeid;
+  }
+
+  public void setTypeid(Long typeid) {
+    this.typeid = typeid;
+  }
+
+  public Definition typeid(Long typeid) {
+    this.typeid = typeid;
+    return this;
+  }
+
+ /**
+   * Get value
+   * @return value
+  **/
+  public String getValue() {
+    return value;
+  }
+
+  public void setValue(String value) {
+    this.value = value;
+  }
+
+  public Definition value(String value) {
+    this.value = value;
+    return this;
+  }
+
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Definition {\n");
+    
+    sb.append("    code: ").append(toIndentedString(code)).append("\n");
+    sb.append("    createdDate: ").append(toIndentedString(createdDate)).append("\n");
+    sb.append("    deleteddate: ").append(toIndentedString(deleteddate)).append("\n");
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    ischeckoption: ").append(toIndentedString(ischeckoption)).append("\n");
+    sb.append("    ismainattribute: ").append(toIndentedString(ismainattribute)).append("\n");
+    sb.append("    lastModifiedDate: ").append(toIndentedString(lastModifiedDate)).append("\n");
+    sb.append("    typeid: ").append(toIndentedString(typeid)).append("\n");
+    sb.append("    value: ").append(toIndentedString(value)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private static String toIndentedString(java.lang.Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/LegalAnswer.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/LegalAnswer.java
new file mode 100644
index 0000000000000000000000000000000000000000..8e47744c131050397305691d1f3ba3f02eb1dbd3
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/LegalAnswer.java
@@ -0,0 +1,138 @@
+package eu.decideh2020.ACSmI.discovery.backend.client.model;
+
+import java.util.Date;
+
+import io.swagger.annotations.ApiModelProperty;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlEnum;
+import javax.xml.bind.annotation.XmlEnumValue;
+
+public class LegalAnswer  {
+  
+  @ApiModelProperty(required = true, value = "")
+  private String answer = null;
+  @ApiModelProperty(value = "")
+  private Date createdDate = null;
+  @ApiModelProperty(value = "")
+  private Date deleteddate = null;
+  @ApiModelProperty(value = "")
+  private Long id = null;
+  @ApiModelProperty(value = "")
+  private Date lastModifiedDate = null;
+
+ /**
+   * Get answer
+   * @return answer
+  **/
+  public String getAnswer() {
+    return answer;
+  }
+
+  public void setAnswer(String answer) {
+    this.answer = answer;
+  }
+
+  public LegalAnswer answer(String answer) {
+    this.answer = answer;
+    return this;
+  }
+
+ /**
+   * Get createdDate
+   * @return createdDate
+  **/
+  public Date getCreatedDate() {
+    return createdDate;
+  }
+
+  public void setCreatedDate(Date createdDate) {
+    this.createdDate = createdDate;
+  }
+
+  public LegalAnswer createdDate(Date createdDate) {
+    this.createdDate = createdDate;
+    return this;
+  }
+
+ /**
+   * Get deleteddate
+   * @return deleteddate
+  **/
+  public Date getDeleteddate() {
+    return deleteddate;
+  }
+
+  public void setDeleteddate(Date deleteddate) {
+    this.deleteddate = deleteddate;
+  }
+
+  public LegalAnswer deleteddate(Date deleteddate) {
+    this.deleteddate = deleteddate;
+    return this;
+  }
+
+ /**
+   * Get id
+   * @return id
+  **/
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public LegalAnswer id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+ /**
+   * Get lastModifiedDate
+   * @return lastModifiedDate
+  **/
+  public Date getLastModifiedDate() {
+    return lastModifiedDate;
+  }
+
+  public void setLastModifiedDate(Date lastModifiedDate) {
+    this.lastModifiedDate = lastModifiedDate;
+  }
+
+  public LegalAnswer lastModifiedDate(Date lastModifiedDate) {
+    this.lastModifiedDate = lastModifiedDate;
+    return this;
+  }
+
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class LegalAnswer {\n");
+    
+    sb.append("    answer: ").append(toIndentedString(answer)).append("\n");
+    sb.append("    createdDate: ").append(toIndentedString(createdDate)).append("\n");
+    sb.append("    deleteddate: ").append(toIndentedString(deleteddate)).append("\n");
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    lastModifiedDate: ").append(toIndentedString(lastModifiedDate)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private static String toIndentedString(java.lang.Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/model/ServiceIncidence.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/LegalQuestion.java
similarity index 59%
rename from OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/model/ServiceIncidence.java
rename to ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/LegalQuestion.java
index 103f02a144487c98c55aea7ab190cd3a94033423..701fdbb9e63e284e21dbf4e7d872247d37d5ee0a 100644
--- a/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/model/ServiceIncidence.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/LegalQuestion.java
@@ -1,191 +1,166 @@
-package eu.decideh2020.acsmi.client.model;
-
-import java.util.Date;
-
-import io.swagger.annotations.ApiModelProperty;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlType;
-import javax.xml.bind.annotation.XmlEnum;
-import javax.xml.bind.annotation.XmlEnumValue;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public class ServiceIncidence  {
-  
-  @ApiModelProperty(value = "")
-  private Date createdDate = null;
-
-  @ApiModelProperty(value = "")
-  private Date deleteddate = null;
-
-  @ApiModelProperty(required = true, value = "")
-  private String detail = null;
-
-  @ApiModelProperty(value = "")
-  private Long id = null;
-
-  @ApiModelProperty(value = "")
-  private Date lastModifiedDate = null;
-
-  @ApiModelProperty(required = true, value = "")
-  private Long serviceid = null;
-
-  @ApiModelProperty(required = true, value = "")
-  private Date timestamp = null;
- /**
-   * Get createdDate
-   * @return createdDate
-  **/
-  @JsonProperty("createdDate")
-  public Date getCreatedDate() {
-    return createdDate;
-  }
-
-  public void setCreatedDate(Date createdDate) {
-    this.createdDate = createdDate;
-  }
-
-  public ServiceIncidence createdDate(Date createdDate) {
-    this.createdDate = createdDate;
-    return this;
-  }
-
- /**
-   * Get deleteddate
-   * @return deleteddate
-  **/
-  @JsonProperty("deleteddate")
-  public Date getDeleteddate() {
-    return deleteddate;
-  }
-
-  public void setDeleteddate(Date deleteddate) {
-    this.deleteddate = deleteddate;
-  }
-
-  public ServiceIncidence deleteddate(Date deleteddate) {
-    this.deleteddate = deleteddate;
-    return this;
-  }
-
- /**
-   * Get detail
-   * @return detail
-  **/
-  @JsonProperty("detail")
-  public String getDetail() {
-    return detail;
-  }
-
-  public void setDetail(String detail) {
-    this.detail = detail;
-  }
-
-  public ServiceIncidence detail(String detail) {
-    this.detail = detail;
-    return this;
-  }
-
- /**
-   * Get id
-   * @return id
-  **/
-  @JsonProperty("id")
-  public Long getId() {
-    return id;
-  }
-
-  public void setId(Long id) {
-    this.id = id;
-  }
-
-  public ServiceIncidence id(Long id) {
-    this.id = id;
-    return this;
-  }
-
- /**
-   * Get lastModifiedDate
-   * @return lastModifiedDate
-  **/
-  @JsonProperty("lastModifiedDate")
-  public Date getLastModifiedDate() {
-    return lastModifiedDate;
-  }
-
-  public void setLastModifiedDate(Date lastModifiedDate) {
-    this.lastModifiedDate = lastModifiedDate;
-  }
-
-  public ServiceIncidence lastModifiedDate(Date lastModifiedDate) {
-    this.lastModifiedDate = lastModifiedDate;
-    return this;
-  }
-
- /**
-   * Get serviceid
-   * @return serviceid
-  **/
-  @JsonProperty("serviceid")
-  public Long getServiceid() {
-    return serviceid;
-  }
-
-  public void setServiceid(Long serviceid) {
-    this.serviceid = serviceid;
-  }
-
-  public ServiceIncidence serviceid(Long serviceid) {
-    this.serviceid = serviceid;
-    return this;
-  }
-
- /**
-   * Get timestamp
-   * @return timestamp
-  **/
-  @JsonProperty("timestamp")
-  public Date getTimestamp() {
-    return timestamp;
-  }
-
-  public void setTimestamp(Date timestamp) {
-    this.timestamp = timestamp;
-  }
-
-  public ServiceIncidence timestamp(Date timestamp) {
-    this.timestamp = timestamp;
-    return this;
-  }
-
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("class ServiceIncidence {\n");
-    
-    sb.append("    createdDate: ").append(toIndentedString(createdDate)).append("\n");
-    sb.append("    deleteddate: ").append(toIndentedString(deleteddate)).append("\n");
-    sb.append("    detail: ").append(toIndentedString(detail)).append("\n");
-    sb.append("    id: ").append(toIndentedString(id)).append("\n");
-    sb.append("    lastModifiedDate: ").append(toIndentedString(lastModifiedDate)).append("\n");
-    sb.append("    serviceid: ").append(toIndentedString(serviceid)).append("\n");
-    sb.append("    timestamp: ").append(toIndentedString(timestamp)).append("\n");
-    sb.append("}");
-    return sb.toString();
-  }
-
-  /**
-   * Convert the given object to string with each line indented by 4 spaces
-   * (except the first line).
-   */
-  private static String toIndentedString(java.lang.Object o) {
-    if (o == null) {
-      return "null";
-    }
-    return o.toString().replace("\n", "\n    ");
-  }
-}
-
+package eu.decideh2020.ACSmI.discovery.backend.client.model;
+
+import eu.decideh2020.ACSmI.discovery.backend.client.model.LegalAnswer;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import io.swagger.annotations.ApiModelProperty;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlEnum;
+import javax.xml.bind.annotation.XmlEnumValue;
+
+public class LegalQuestion  {
+  
+  @ApiModelProperty(value = "")
+  private List<LegalAnswer> answers = new ArrayList<LegalAnswer>();
+  @ApiModelProperty(value = "")
+  private Date createdDate = null;
+  @ApiModelProperty(value = "")
+  private Date deleteddate = null;
+  @ApiModelProperty(value = "")
+  private Long id = null;
+  @ApiModelProperty(value = "")
+  private Date lastModifiedDate = null;
+  @ApiModelProperty(required = true, value = "")
+  private String question = null;
+
+ /**
+   * Get answers
+   * @return answers
+  **/
+  public List<LegalAnswer> getAnswers() {
+    return answers;
+  }
+
+  public void setAnswers(List<LegalAnswer> answers) {
+    this.answers = answers;
+  }
+
+  public LegalQuestion answers(List<LegalAnswer> answers) {
+    this.answers = answers;
+    return this;
+  }
+
+  public LegalQuestion addAnswersItem(LegalAnswer answersItem) {
+    this.answers.add(answersItem);
+    return this;
+  }
+
+ /**
+   * Get createdDate
+   * @return createdDate
+  **/
+  public Date getCreatedDate() {
+    return createdDate;
+  }
+
+  public void setCreatedDate(Date createdDate) {
+    this.createdDate = createdDate;
+  }
+
+  public LegalQuestion createdDate(Date createdDate) {
+    this.createdDate = createdDate;
+    return this;
+  }
+
+ /**
+   * Get deleteddate
+   * @return deleteddate
+  **/
+  public Date getDeleteddate() {
+    return deleteddate;
+  }
+
+  public void setDeleteddate(Date deleteddate) {
+    this.deleteddate = deleteddate;
+  }
+
+  public LegalQuestion deleteddate(Date deleteddate) {
+    this.deleteddate = deleteddate;
+    return this;
+  }
+
+ /**
+   * Get id
+   * @return id
+  **/
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public LegalQuestion id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+ /**
+   * Get lastModifiedDate
+   * @return lastModifiedDate
+  **/
+  public Date getLastModifiedDate() {
+    return lastModifiedDate;
+  }
+
+  public void setLastModifiedDate(Date lastModifiedDate) {
+    this.lastModifiedDate = lastModifiedDate;
+  }
+
+  public LegalQuestion lastModifiedDate(Date lastModifiedDate) {
+    this.lastModifiedDate = lastModifiedDate;
+    return this;
+  }
+
+ /**
+   * Get question
+   * @return question
+  **/
+  public String getQuestion() {
+    return question;
+  }
+
+  public void setQuestion(String question) {
+    this.question = question;
+  }
+
+  public LegalQuestion question(String question) {
+    this.question = question;
+    return this;
+  }
+
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class LegalQuestion {\n");
+    
+    sb.append("    answers: ").append(toIndentedString(answers)).append("\n");
+    sb.append("    createdDate: ").append(toIndentedString(createdDate)).append("\n");
+    sb.append("    deleteddate: ").append(toIndentedString(deleteddate)).append("\n");
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    lastModifiedDate: ").append(toIndentedString(lastModifiedDate)).append("\n");
+    sb.append("    question: ").append(toIndentedString(question)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private static String toIndentedString(java.lang.Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/LegalQuestionnaire.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/LegalQuestionnaire.java
new file mode 100644
index 0000000000000000000000000000000000000000..a30d2f8ac4569fb1683d110ed92c937d771204f1
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/LegalQuestionnaire.java
@@ -0,0 +1,286 @@
+package eu.decideh2020.ACSmI.discovery.backend.client.model;
+
+import eu.decideh2020.ACSmI.discovery.backend.client.model.LegalTopic;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import io.swagger.annotations.ApiModelProperty;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlEnum;
+import javax.xml.bind.annotation.XmlEnumValue;
+
+public class LegalQuestionnaire  {
+  
+  @ApiModelProperty(required = true, value = "")
+  private Long answerid = null;
+  @ApiModelProperty(value = "")
+  private String answertext = null;
+  @ApiModelProperty(value = "")
+  private Date createdDate = null;
+  @ApiModelProperty(value = "")
+  private Date deleteddate = null;
+  @ApiModelProperty(value = "")
+  private Long id = null;
+  @ApiModelProperty(value = "")
+  private Date lastModifiedDate = null;
+  @ApiModelProperty(required = true, value = "")
+  private Long questionid = null;
+  @ApiModelProperty(value = "")
+  private String questiontext = null;
+  @ApiModelProperty(required = true, value = "")
+  private Long topicid = null;
+  @ApiModelProperty(value = "")
+  private String topicname = null;
+  @ApiModelProperty(value = "")
+  private List<LegalTopic> topics = new ArrayList<LegalTopic>();
+  @ApiModelProperty(value = "")
+  private Integer topicweight = null;
+
+ /**
+   * Get answerid
+   * @return answerid
+  **/
+  public Long getAnswerid() {
+    return answerid;
+  }
+
+  public void setAnswerid(Long answerid) {
+    this.answerid = answerid;
+  }
+
+  public LegalQuestionnaire answerid(Long answerid) {
+    this.answerid = answerid;
+    return this;
+  }
+
+ /**
+   * Get answertext
+   * @return answertext
+  **/
+  public String getAnswertext() {
+    return answertext;
+  }
+
+  public void setAnswertext(String answertext) {
+    this.answertext = answertext;
+  }
+
+  public LegalQuestionnaire answertext(String answertext) {
+    this.answertext = answertext;
+    return this;
+  }
+
+ /**
+   * Get createdDate
+   * @return createdDate
+  **/
+  public Date getCreatedDate() {
+    return createdDate;
+  }
+
+  public void setCreatedDate(Date createdDate) {
+    this.createdDate = createdDate;
+  }
+
+  public LegalQuestionnaire createdDate(Date createdDate) {
+    this.createdDate = createdDate;
+    return this;
+  }
+
+ /**
+   * Get deleteddate
+   * @return deleteddate
+  **/
+  public Date getDeleteddate() {
+    return deleteddate;
+  }
+
+  public void setDeleteddate(Date deleteddate) {
+    this.deleteddate = deleteddate;
+  }
+
+  public LegalQuestionnaire deleteddate(Date deleteddate) {
+    this.deleteddate = deleteddate;
+    return this;
+  }
+
+ /**
+   * Get id
+   * @return id
+  **/
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public LegalQuestionnaire id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+ /**
+   * Get lastModifiedDate
+   * @return lastModifiedDate
+  **/
+  public Date getLastModifiedDate() {
+    return lastModifiedDate;
+  }
+
+  public void setLastModifiedDate(Date lastModifiedDate) {
+    this.lastModifiedDate = lastModifiedDate;
+  }
+
+  public LegalQuestionnaire lastModifiedDate(Date lastModifiedDate) {
+    this.lastModifiedDate = lastModifiedDate;
+    return this;
+  }
+
+ /**
+   * Get questionid
+   * @return questionid
+  **/
+  public Long getQuestionid() {
+    return questionid;
+  }
+
+  public void setQuestionid(Long questionid) {
+    this.questionid = questionid;
+  }
+
+  public LegalQuestionnaire questionid(Long questionid) {
+    this.questionid = questionid;
+    return this;
+  }
+
+ /**
+   * Get questiontext
+   * @return questiontext
+  **/
+  public String getQuestiontext() {
+    return questiontext;
+  }
+
+  public void setQuestiontext(String questiontext) {
+    this.questiontext = questiontext;
+  }
+
+  public LegalQuestionnaire questiontext(String questiontext) {
+    this.questiontext = questiontext;
+    return this;
+  }
+
+ /**
+   * Get topicid
+   * @return topicid
+  **/
+  public Long getTopicid() {
+    return topicid;
+  }
+
+  public void setTopicid(Long topicid) {
+    this.topicid = topicid;
+  }
+
+  public LegalQuestionnaire topicid(Long topicid) {
+    this.topicid = topicid;
+    return this;
+  }
+
+ /**
+   * Get topicname
+   * @return topicname
+  **/
+  public String getTopicname() {
+    return topicname;
+  }
+
+  public void setTopicname(String topicname) {
+    this.topicname = topicname;
+  }
+
+  public LegalQuestionnaire topicname(String topicname) {
+    this.topicname = topicname;
+    return this;
+  }
+
+ /**
+   * Get topics
+   * @return topics
+  **/
+  public List<LegalTopic> getTopics() {
+    return topics;
+  }
+
+  public void setTopics(List<LegalTopic> topics) {
+    this.topics = topics;
+  }
+
+  public LegalQuestionnaire topics(List<LegalTopic> topics) {
+    this.topics = topics;
+    return this;
+  }
+
+  public LegalQuestionnaire addTopicsItem(LegalTopic topicsItem) {
+    this.topics.add(topicsItem);
+    return this;
+  }
+
+ /**
+   * Get topicweight
+   * @return topicweight
+  **/
+  public Integer getTopicweight() {
+    return topicweight;
+  }
+
+  public void setTopicweight(Integer topicweight) {
+    this.topicweight = topicweight;
+  }
+
+  public LegalQuestionnaire topicweight(Integer topicweight) {
+    this.topicweight = topicweight;
+    return this;
+  }
+
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class LegalQuestionnaire {\n");
+    
+    sb.append("    answerid: ").append(toIndentedString(answerid)).append("\n");
+    sb.append("    answertext: ").append(toIndentedString(answertext)).append("\n");
+    sb.append("    createdDate: ").append(toIndentedString(createdDate)).append("\n");
+    sb.append("    deleteddate: ").append(toIndentedString(deleteddate)).append("\n");
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    lastModifiedDate: ").append(toIndentedString(lastModifiedDate)).append("\n");
+    sb.append("    questionid: ").append(toIndentedString(questionid)).append("\n");
+    sb.append("    questiontext: ").append(toIndentedString(questiontext)).append("\n");
+    sb.append("    topicid: ").append(toIndentedString(topicid)).append("\n");
+    sb.append("    topicname: ").append(toIndentedString(topicname)).append("\n");
+    sb.append("    topics: ").append(toIndentedString(topics)).append("\n");
+    sb.append("    topicweight: ").append(toIndentedString(topicweight)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private static String toIndentedString(java.lang.Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/model/Definition.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/LegalTopic.java
similarity index 51%
rename from OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/model/Definition.java
rename to ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/LegalTopic.java
index 23e90ef52e82105f1159bd785467162a3a1fd805..918c1b75e0700f7f14250714313b0a4cda038297 100644
--- a/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/model/Definition.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/LegalTopic.java
@@ -1,235 +1,186 @@
-package eu.decideh2020.acsmi.client.model;
-
-import java.util.Date;
-
-import io.swagger.annotations.ApiModelProperty;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlType;
-import javax.xml.bind.annotation.XmlEnum;
-import javax.xml.bind.annotation.XmlEnumValue;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public class Definition  {
-  
-  @ApiModelProperty(required = true, value = "")
-  private String code = null;
-
-  @ApiModelProperty(value = "")
-  private Date createdDate = null;
-
-  @ApiModelProperty(value = "")
-  private Date deleteddate = null;
-
-  @ApiModelProperty(value = "")
-  private Long id = null;
-
-  @ApiModelProperty(required = true, value = "")
-  private Boolean ischeckoption = null;
-
-  @ApiModelProperty(required = true, value = "")
-  private Boolean ismainattribute = null;
-
-  @ApiModelProperty(value = "")
-  private Date lastModifiedDate = null;
-
-  @ApiModelProperty(value = "")
-  private Long typeid = null;
-
-  @ApiModelProperty(required = true, value = "")
-  private String value = null;
- /**
-   * Get code
-   * @return code
-  **/
-  @JsonProperty("code")
-  public String getCode() {
-    return code;
-  }
-
-  public void setCode(String code) {
-    this.code = code;
-  }
-
-  public Definition code(String code) {
-    this.code = code;
-    return this;
-  }
-
- /**
-   * Get createdDate
-   * @return createdDate
-  **/
-  @JsonProperty("createdDate")
-  public Date getCreatedDate() {
-    return createdDate;
-  }
-
-  public void setCreatedDate(Date createdDate) {
-    this.createdDate = createdDate;
-  }
-
-  public Definition createdDate(Date createdDate) {
-    this.createdDate = createdDate;
-    return this;
-  }
-
- /**
-   * Get deleteddate
-   * @return deleteddate
-  **/
-  @JsonProperty("deleteddate")
-  public Date getDeleteddate() {
-    return deleteddate;
-  }
-
-  public void setDeleteddate(Date deleteddate) {
-    this.deleteddate = deleteddate;
-  }
-
-  public Definition deleteddate(Date deleteddate) {
-    this.deleteddate = deleteddate;
-    return this;
-  }
-
- /**
-   * Get id
-   * @return id
-  **/
-  @JsonProperty("id")
-  public Long getId() {
-    return id;
-  }
-
-  public void setId(Long id) {
-    this.id = id;
-  }
-
-  public Definition id(Long id) {
-    this.id = id;
-    return this;
-  }
-
- /**
-   * Get ischeckoption
-   * @return ischeckoption
-  **/
-  @JsonProperty("ischeckoption")
-  public Boolean isIscheckoption() {
-    return ischeckoption;
-  }
-
-  public void setIscheckoption(Boolean ischeckoption) {
-    this.ischeckoption = ischeckoption;
-  }
-
-  public Definition ischeckoption(Boolean ischeckoption) {
-    this.ischeckoption = ischeckoption;
-    return this;
-  }
-
- /**
-   * Get ismainattribute
-   * @return ismainattribute
-  **/
-  @JsonProperty("ismainattribute")
-  public Boolean isIsmainattribute() {
-    return ismainattribute;
-  }
-
-  public void setIsmainattribute(Boolean ismainattribute) {
-    this.ismainattribute = ismainattribute;
-  }
-
-  public Definition ismainattribute(Boolean ismainattribute) {
-    this.ismainattribute = ismainattribute;
-    return this;
-  }
-
- /**
-   * Get lastModifiedDate
-   * @return lastModifiedDate
-  **/
-  @JsonProperty("lastModifiedDate")
-  public Date getLastModifiedDate() {
-    return lastModifiedDate;
-  }
-
-  public void setLastModifiedDate(Date lastModifiedDate) {
-    this.lastModifiedDate = lastModifiedDate;
-  }
-
-  public Definition lastModifiedDate(Date lastModifiedDate) {
-    this.lastModifiedDate = lastModifiedDate;
-    return this;
-  }
-
- /**
-   * Get typeid
-   * @return typeid
-  **/
-  @JsonProperty("typeid")
-  public Long getTypeid() {
-    return typeid;
-  }
-
-  public void setTypeid(Long typeid) {
-    this.typeid = typeid;
-  }
-
-  public Definition typeid(Long typeid) {
-    this.typeid = typeid;
-    return this;
-  }
-
- /**
-   * Get value
-   * @return value
-  **/
-  @JsonProperty("value")
-  public String getValue() {
-    return value;
-  }
-
-  public void setValue(String value) {
-    this.value = value;
-  }
-
-  public Definition value(String value) {
-    this.value = value;
-    return this;
-  }
-
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("class Definition {\n");
-    
-    sb.append("    code: ").append(toIndentedString(code)).append("\n");
-    sb.append("    createdDate: ").append(toIndentedString(createdDate)).append("\n");
-    sb.append("    deleteddate: ").append(toIndentedString(deleteddate)).append("\n");
-    sb.append("    id: ").append(toIndentedString(id)).append("\n");
-    sb.append("    ischeckoption: ").append(toIndentedString(ischeckoption)).append("\n");
-    sb.append("    ismainattribute: ").append(toIndentedString(ismainattribute)).append("\n");
-    sb.append("    lastModifiedDate: ").append(toIndentedString(lastModifiedDate)).append("\n");
-    sb.append("    typeid: ").append(toIndentedString(typeid)).append("\n");
-    sb.append("    value: ").append(toIndentedString(value)).append("\n");
-    sb.append("}");
-    return sb.toString();
-  }
-
-  /**
-   * Convert the given object to string with each line indented by 4 spaces
-   * (except the first line).
-   */
-  private static String toIndentedString(java.lang.Object o) {
-    if (o == null) {
-      return "null";
-    }
-    return o.toString().replace("\n", "\n    ");
-  }
-}
-
+package eu.decideh2020.ACSmI.discovery.backend.client.model;
+
+import eu.decideh2020.ACSmI.discovery.backend.client.model.LegalQuestion;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import io.swagger.annotations.ApiModelProperty;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlEnum;
+import javax.xml.bind.annotation.XmlEnumValue;
+
+public class LegalTopic  {
+  
+  @ApiModelProperty(value = "")
+  private Date createdDate = null;
+  @ApiModelProperty(value = "")
+  private Date deleteddate = null;
+  @ApiModelProperty(value = "")
+  private Long id = null;
+  @ApiModelProperty(value = "")
+  private Date lastModifiedDate = null;
+  @ApiModelProperty(required = true, value = "")
+  private String name = null;
+  @ApiModelProperty(value = "")
+  private List<LegalQuestion> questions = new ArrayList<LegalQuestion>();
+  @ApiModelProperty(required = true, value = "")
+  private Integer weight = null;
+
+ /**
+   * Get createdDate
+   * @return createdDate
+  **/
+  public Date getCreatedDate() {
+    return createdDate;
+  }
+
+  public void setCreatedDate(Date createdDate) {
+    this.createdDate = createdDate;
+  }
+
+  public LegalTopic createdDate(Date createdDate) {
+    this.createdDate = createdDate;
+    return this;
+  }
+
+ /**
+   * Get deleteddate
+   * @return deleteddate
+  **/
+  public Date getDeleteddate() {
+    return deleteddate;
+  }
+
+  public void setDeleteddate(Date deleteddate) {
+    this.deleteddate = deleteddate;
+  }
+
+  public LegalTopic deleteddate(Date deleteddate) {
+    this.deleteddate = deleteddate;
+    return this;
+  }
+
+ /**
+   * Get id
+   * @return id
+  **/
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public LegalTopic id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+ /**
+   * Get lastModifiedDate
+   * @return lastModifiedDate
+  **/
+  public Date getLastModifiedDate() {
+    return lastModifiedDate;
+  }
+
+  public void setLastModifiedDate(Date lastModifiedDate) {
+    this.lastModifiedDate = lastModifiedDate;
+  }
+
+  public LegalTopic lastModifiedDate(Date lastModifiedDate) {
+    this.lastModifiedDate = lastModifiedDate;
+    return this;
+  }
+
+ /**
+   * Get name
+   * @return name
+  **/
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  public LegalTopic name(String name) {
+    this.name = name;
+    return this;
+  }
+
+ /**
+   * Get questions
+   * @return questions
+  **/
+  public List<LegalQuestion> getQuestions() {
+    return questions;
+  }
+
+  public void setQuestions(List<LegalQuestion> questions) {
+    this.questions = questions;
+  }
+
+  public LegalTopic questions(List<LegalQuestion> questions) {
+    this.questions = questions;
+    return this;
+  }
+
+  public LegalTopic addQuestionsItem(LegalQuestion questionsItem) {
+    this.questions.add(questionsItem);
+    return this;
+  }
+
+ /**
+   * Get weight
+   * @return weight
+  **/
+  public Integer getWeight() {
+    return weight;
+  }
+
+  public void setWeight(Integer weight) {
+    this.weight = weight;
+  }
+
+  public LegalTopic weight(Integer weight) {
+    this.weight = weight;
+    return this;
+  }
+
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class LegalTopic {\n");
+    
+    sb.append("    createdDate: ").append(toIndentedString(createdDate)).append("\n");
+    sb.append("    deleteddate: ").append(toIndentedString(deleteddate)).append("\n");
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    lastModifiedDate: ").append(toIndentedString(lastModifiedDate)).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("    questions: ").append(toIndentedString(questions)).append("\n");
+    sb.append("    weight: ").append(toIndentedString(weight)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private static String toIndentedString(java.lang.Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/ProfileInfoVM.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/ProfileInfoVM.java
index 0ed5d0806bc9633b992822d44b25a87086b4aba7..08cb1311fa45d0ae3800d5315b972984136a42d5 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/ProfileInfoVM.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/ProfileInfoVM.java
@@ -1,87 +1,84 @@
-package eu.decideh2020.ACSmI.discovery.backend.client.model;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import io.swagger.annotations.ApiModelProperty;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlType;
-import javax.xml.bind.annotation.XmlEnum;
-import javax.xml.bind.annotation.XmlEnumValue;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public class ProfileInfoVM  {
-  
-  @ApiModelProperty(value = "")
-  private List<String> activeProfiles = null;
-
-  @ApiModelProperty(value = "")
-  private String ribbonEnv = null;
- /**
-   * Get activeProfiles
-   * @return activeProfiles
-  **/
-  @JsonProperty("activeProfiles")
-  public List<String> getActiveProfiles() {
-    return activeProfiles;
-  }
-
-  public void setActiveProfiles(List<String> activeProfiles) {
-    this.activeProfiles = activeProfiles;
-  }
-
-  public ProfileInfoVM activeProfiles(List<String> activeProfiles) {
-    this.activeProfiles = activeProfiles;
-    return this;
-  }
-
-  public ProfileInfoVM addActiveProfilesItem(String activeProfilesItem) {
-    this.activeProfiles.add(activeProfilesItem);
-    return this;
-  }
-
- /**
-   * Get ribbonEnv
-   * @return ribbonEnv
-  **/
-  @JsonProperty("ribbonEnv")
-  public String getRibbonEnv() {
-    return ribbonEnv;
-  }
-
-  public void setRibbonEnv(String ribbonEnv) {
-    this.ribbonEnv = ribbonEnv;
-  }
-
-  public ProfileInfoVM ribbonEnv(String ribbonEnv) {
-    this.ribbonEnv = ribbonEnv;
-    return this;
-  }
-
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("class ProfileInfoVM {\n");
-    
-    sb.append("    activeProfiles: ").append(toIndentedString(activeProfiles)).append("\n");
-    sb.append("    ribbonEnv: ").append(toIndentedString(ribbonEnv)).append("\n");
-    sb.append("}");
-    return sb.toString();
-  }
-
-  /**
-   * Convert the given object to string with each line indented by 4 spaces
-   * (except the first line).
-   */
-  private static String toIndentedString(java.lang.Object o) {
-    if (o == null) {
-      return "null";
-    }
-    return o.toString().replace("\n", "\n    ");
-  }
-}
-
+package eu.decideh2020.ACSmI.discovery.backend.client.model;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import io.swagger.annotations.ApiModelProperty;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlEnum;
+import javax.xml.bind.annotation.XmlEnumValue;
+
+public class ProfileInfoVM  {
+  
+  @ApiModelProperty(value = "")
+  private List<String> activeProfiles = new ArrayList<String>();
+  @ApiModelProperty(value = "")
+  private String ribbonEnv = null;
+
+ /**
+   * Get activeProfiles
+   * @return activeProfiles
+  **/
+  public List<String> getActiveProfiles() {
+    return activeProfiles;
+  }
+
+  public void setActiveProfiles(List<String> activeProfiles) {
+    this.activeProfiles = activeProfiles;
+  }
+
+  public ProfileInfoVM activeProfiles(List<String> activeProfiles) {
+    this.activeProfiles = activeProfiles;
+    return this;
+  }
+
+  public ProfileInfoVM addActiveProfilesItem(String activeProfilesItem) {
+    this.activeProfiles.add(activeProfilesItem);
+    return this;
+  }
+
+ /**
+   * Get ribbonEnv
+   * @return ribbonEnv
+  **/
+  public String getRibbonEnv() {
+    return ribbonEnv;
+  }
+
+  public void setRibbonEnv(String ribbonEnv) {
+    this.ribbonEnv = ribbonEnv;
+  }
+
+  public ProfileInfoVM ribbonEnv(String ribbonEnv) {
+    this.ribbonEnv = ribbonEnv;
+    return this;
+  }
+
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ProfileInfoVM {\n");
+    
+    sb.append("    activeProfiles: ").append(toIndentedString(activeProfiles)).append("\n");
+    sb.append("    ribbonEnv: ").append(toIndentedString(ribbonEnv)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private static String toIndentedString(java.lang.Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/Service.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/Service.java
index 5eb18d482c5962166691a69305c3d1f9200c63a8..af136a59ddf924c21ccc0503fd8cbf3020447903 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/Service.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/Service.java
@@ -1,379 +1,352 @@
-package eu.decideh2020.ACSmI.discovery.backend.client.model;
-
-import eu.decideh2020.ACSmI.discovery.backend.client.model.AttributeVO;
-import eu.decideh2020.ACSmI.discovery.backend.client.model.ServiceIncidence;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-
-import io.swagger.annotations.ApiModelProperty;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlType;
-import javax.xml.bind.annotation.XmlEnum;
-import javax.xml.bind.annotation.XmlEnumValue;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public class Service  {
-  
-  @ApiModelProperty(value = "")
-  private List<AttributeVO> attributes = null;
-
-  @ApiModelProperty(value = "")
-  private Date createdDate = null;
-
-  @ApiModelProperty(value = "")
-  private Date deleteddate = null;
-
-  @ApiModelProperty(value = "")
-  private List<byte[]> firstcontract = null;
-
-  @ApiModelProperty(value = "")
-  private Long id = null;
-
-  @ApiModelProperty(value = "")
-  private List<ServiceIncidence> incidences = null;
-
-  @ApiModelProperty(value = "")
-  private Date lastModifiedDate = null;
-
-  @ApiModelProperty(value = "")
-  private Double match = null;
-
-  @ApiModelProperty(value = "")
-  private List<String> matchingattributelist = null;
-
-  @ApiModelProperty(value = "")
-  private List<byte[]> secondcontract = null;
-
-  @ApiModelProperty(required = true, value = "")
-  private Long serviceclassid = null;
-
-  @ApiModelProperty(value = "")
-  private String serviceclassname = null;
-
-  @ApiModelProperty(required = true, value = "")
-  private String servicename = null;
-
-  @ApiModelProperty(value = "")
-  private List<byte[]> thirdcontract = null;
- /**
-   * Get attributes
-   * @return attributes
-  **/
-  @JsonProperty("attributes")
-  public List<AttributeVO> getAttributes() {
-    return attributes;
-  }
-
-  public void setAttributes(List<AttributeVO> attributes) {
-    this.attributes = attributes;
-  }
-
-  public Service attributes(List<AttributeVO> attributes) {
-    this.attributes = attributes;
-    return this;
-  }
-
-  public Service addAttributesItem(AttributeVO attributesItem) {
-    this.attributes.add(attributesItem);
-    return this;
-  }
-
- /**
-   * Get createdDate
-   * @return createdDate
-  **/
-  @JsonProperty("createdDate")
-  public Date getCreatedDate() {
-    return createdDate;
-  }
-
-  public void setCreatedDate(Date createdDate) {
-    this.createdDate = createdDate;
-  }
-
-  public Service createdDate(Date createdDate) {
-    this.createdDate = createdDate;
-    return this;
-  }
-
- /**
-   * Get deleteddate
-   * @return deleteddate
-  **/
-  @JsonProperty("deleteddate")
-  public Date getDeleteddate() {
-    return deleteddate;
-  }
-
-  public void setDeleteddate(Date deleteddate) {
-    this.deleteddate = deleteddate;
-  }
-
-  public Service deleteddate(Date deleteddate) {
-    this.deleteddate = deleteddate;
-    return this;
-  }
-
- /**
-   * Get firstcontract
-   * @return firstcontract
-  **/
-  @JsonProperty("firstcontract")
-  public List<byte[]> getFirstcontract() {
-    return firstcontract;
-  }
-
-  public void setFirstcontract(List<byte[]> firstcontract) {
-    this.firstcontract = firstcontract;
-  }
-
-  public Service firstcontract(List<byte[]> firstcontract) {
-    this.firstcontract = firstcontract;
-    return this;
-  }
-
-  public Service addFirstcontractItem(byte[] firstcontractItem) {
-    this.firstcontract.add(firstcontractItem);
-    return this;
-  }
-
- /**
-   * Get id
-   * @return id
-  **/
-  @JsonProperty("id")
-  public Long getId() {
-    return id;
-  }
-
-  public void setId(Long id) {
-    this.id = id;
-  }
-
-  public Service id(Long id) {
-    this.id = id;
-    return this;
-  }
-
- /**
-   * Get incidences
-   * @return incidences
-  **/
-  @JsonProperty("incidences")
-  public List<ServiceIncidence> getIncidences() {
-    return incidences;
-  }
-
-  public void setIncidences(List<ServiceIncidence> incidences) {
-    this.incidences = incidences;
-  }
-
-  public Service incidences(List<ServiceIncidence> incidences) {
-    this.incidences = incidences;
-    return this;
-  }
-
-  public Service addIncidencesItem(ServiceIncidence incidencesItem) {
-    this.incidences.add(incidencesItem);
-    return this;
-  }
-
- /**
-   * Get lastModifiedDate
-   * @return lastModifiedDate
-  **/
-  @JsonProperty("lastModifiedDate")
-  public Date getLastModifiedDate() {
-    return lastModifiedDate;
-  }
-
-  public void setLastModifiedDate(Date lastModifiedDate) {
-    this.lastModifiedDate = lastModifiedDate;
-  }
-
-  public Service lastModifiedDate(Date lastModifiedDate) {
-    this.lastModifiedDate = lastModifiedDate;
-    return this;
-  }
-
- /**
-   * Get match
-   * @return match
-  **/
-  @JsonProperty("match")
-  public Double getMatch() {
-    return match;
-  }
-
-  public void setMatch(Double match) {
-    this.match = match;
-  }
-
-  public Service match(Double match) {
-    this.match = match;
-    return this;
-  }
-
- /**
-   * Get matchingattributelist
-   * @return matchingattributelist
-  **/
-  @JsonProperty("matchingattributelist")
-  public List<String> getMatchingattributelist() {
-    return matchingattributelist;
-  }
-
-  public void setMatchingattributelist(List<String> matchingattributelist) {
-    this.matchingattributelist = matchingattributelist;
-  }
-
-  public Service matchingattributelist(List<String> matchingattributelist) {
-    this.matchingattributelist = matchingattributelist;
-    return this;
-  }
-
-  public Service addMatchingattributelistItem(String matchingattributelistItem) {
-    this.matchingattributelist.add(matchingattributelistItem);
-    return this;
-  }
-
- /**
-   * Get secondcontract
-   * @return secondcontract
-  **/
-  @JsonProperty("secondcontract")
-  public List<byte[]> getSecondcontract() {
-    return secondcontract;
-  }
-
-  public void setSecondcontract(List<byte[]> secondcontract) {
-    this.secondcontract = secondcontract;
-  }
-
-  public Service secondcontract(List<byte[]> secondcontract) {
-    this.secondcontract = secondcontract;
-    return this;
-  }
-
-  public Service addSecondcontractItem(byte[] secondcontractItem) {
-    this.secondcontract.add(secondcontractItem);
-    return this;
-  }
-
- /**
-   * Get serviceclassid
-   * @return serviceclassid
-  **/
-  @JsonProperty("serviceclassid")
-  public Long getServiceclassid() {
-    return serviceclassid;
-  }
-
-  public void setServiceclassid(Long serviceclassid) {
-    this.serviceclassid = serviceclassid;
-  }
-
-  public Service serviceclassid(Long serviceclassid) {
-    this.serviceclassid = serviceclassid;
-    return this;
-  }
-
- /**
-   * Get serviceclassname
-   * @return serviceclassname
-  **/
-  @JsonProperty("serviceclassname")
-  public String getServiceclassname() {
-    return serviceclassname;
-  }
-
-  public void setServiceclassname(String serviceclassname) {
-    this.serviceclassname = serviceclassname;
-  }
-
-  public Service serviceclassname(String serviceclassname) {
-    this.serviceclassname = serviceclassname;
-    return this;
-  }
-
- /**
-   * Get servicename
-   * @return servicename
-  **/
-  @JsonProperty("servicename")
-  public String getServicename() {
-    return servicename;
-  }
-
-  public void setServicename(String servicename) {
-    this.servicename = servicename;
-  }
-
-  public Service servicename(String servicename) {
-    this.servicename = servicename;
-    return this;
-  }
-
- /**
-   * Get thirdcontract
-   * @return thirdcontract
-  **/
-  @JsonProperty("thirdcontract")
-  public List<byte[]> getThirdcontract() {
-    return thirdcontract;
-  }
-
-  public void setThirdcontract(List<byte[]> thirdcontract) {
-    this.thirdcontract = thirdcontract;
-  }
-
-  public Service thirdcontract(List<byte[]> thirdcontract) {
-    this.thirdcontract = thirdcontract;
-    return this;
-  }
-
-  public Service addThirdcontractItem(byte[] thirdcontractItem) {
-    this.thirdcontract.add(thirdcontractItem);
-    return this;
-  }
-
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("class Service {\n");
-    
-    sb.append("    attributes: ").append(toIndentedString(attributes)).append("\n");
-    sb.append("    createdDate: ").append(toIndentedString(createdDate)).append("\n");
-    sb.append("    deleteddate: ").append(toIndentedString(deleteddate)).append("\n");
-    sb.append("    firstcontract: ").append(toIndentedString(firstcontract)).append("\n");
-    sb.append("    id: ").append(toIndentedString(id)).append("\n");
-    sb.append("    incidences: ").append(toIndentedString(incidences)).append("\n");
-    sb.append("    lastModifiedDate: ").append(toIndentedString(lastModifiedDate)).append("\n");
-    sb.append("    match: ").append(toIndentedString(match)).append("\n");
-    sb.append("    matchingattributelist: ").append(toIndentedString(matchingattributelist)).append("\n");
-    sb.append("    secondcontract: ").append(toIndentedString(secondcontract)).append("\n");
-    sb.append("    serviceclassid: ").append(toIndentedString(serviceclassid)).append("\n");
-    sb.append("    serviceclassname: ").append(toIndentedString(serviceclassname)).append("\n");
-    sb.append("    servicename: ").append(toIndentedString(servicename)).append("\n");
-    sb.append("    thirdcontract: ").append(toIndentedString(thirdcontract)).append("\n");
-    sb.append("}");
-    return sb.toString();
-  }
-
-  /**
-   * Convert the given object to string with each line indented by 4 spaces
-   * (except the first line).
-   */
-  private static String toIndentedString(java.lang.Object o) {
-    if (o == null) {
-      return "null";
-    }
-    return o.toString().replace("\n", "\n    ");
-  }
-}
-
+package eu.decideh2020.ACSmI.discovery.backend.client.model;
+
+import eu.decideh2020.ACSmI.discovery.backend.client.model.AttributeVO;
+import eu.decideh2020.ACSmI.discovery.backend.client.model.ServiceIncidence;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import io.swagger.annotations.ApiModelProperty;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlEnum;
+import javax.xml.bind.annotation.XmlEnumValue;
+
+public class Service  {
+  
+  @ApiModelProperty(value = "")
+  private List<AttributeVO> attributes = new ArrayList<AttributeVO>();
+  @ApiModelProperty(value = "")
+  private Date createdDate = null;
+  @ApiModelProperty(value = "")
+  private Date deleteddate = null;
+  @ApiModelProperty(value = "")
+  private List<byte[]> firstcontract = new ArrayList<byte[]>();
+  @ApiModelProperty(value = "")
+  private Long id = null;
+  @ApiModelProperty(value = "")
+  private List<ServiceIncidence> incidences = new ArrayList<ServiceIncidence>();
+  @ApiModelProperty(value = "")
+  private Date lastModifiedDate = null;
+  @ApiModelProperty(value = "")
+  private Double match = null;
+  @ApiModelProperty(value = "")
+  private List<String> matchingattributelist = new ArrayList<String>();
+  @ApiModelProperty(value = "")
+  private List<byte[]> secondcontract = new ArrayList<byte[]>();
+  @ApiModelProperty(required = true, value = "")
+  private Long serviceclassid = null;
+  @ApiModelProperty(value = "")
+  private String serviceclassname = null;
+  @ApiModelProperty(required = true, value = "")
+  private String servicename = null;
+  @ApiModelProperty(value = "")
+  private List<byte[]> thirdcontract = new ArrayList<byte[]>();
+
+ /**
+   * Get attributes
+   * @return attributes
+  **/
+  public List<AttributeVO> getAttributes() {
+    return attributes;
+  }
+
+  public void setAttributes(List<AttributeVO> attributes) {
+    this.attributes = attributes;
+  }
+
+  public Service attributes(List<AttributeVO> attributes) {
+    this.attributes = attributes;
+    return this;
+  }
+
+  public Service addAttributesItem(AttributeVO attributesItem) {
+    this.attributes.add(attributesItem);
+    return this;
+  }
+
+ /**
+   * Get createdDate
+   * @return createdDate
+  **/
+  public Date getCreatedDate() {
+    return createdDate;
+  }
+
+  public void setCreatedDate(Date createdDate) {
+    this.createdDate = createdDate;
+  }
+
+  public Service createdDate(Date createdDate) {
+    this.createdDate = createdDate;
+    return this;
+  }
+
+ /**
+   * Get deleteddate
+   * @return deleteddate
+  **/
+  public Date getDeleteddate() {
+    return deleteddate;
+  }
+
+  public void setDeleteddate(Date deleteddate) {
+    this.deleteddate = deleteddate;
+  }
+
+  public Service deleteddate(Date deleteddate) {
+    this.deleteddate = deleteddate;
+    return this;
+  }
+
+ /**
+   * Get firstcontract
+   * @return firstcontract
+  **/
+  public List<byte[]> getFirstcontract() {
+    return firstcontract;
+  }
+
+  public void setFirstcontract(List<byte[]> firstcontract) {
+    this.firstcontract = firstcontract;
+  }
+
+  public Service firstcontract(List<byte[]> firstcontract) {
+    this.firstcontract = firstcontract;
+    return this;
+  }
+
+  public Service addFirstcontractItem(byte[] firstcontractItem) {
+    this.firstcontract.add(firstcontractItem);
+    return this;
+  }
+
+ /**
+   * Get id
+   * @return id
+  **/
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public Service id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+ /**
+   * Get incidences
+   * @return incidences
+  **/
+  public List<ServiceIncidence> getIncidences() {
+    return incidences;
+  }
+
+  public void setIncidences(List<ServiceIncidence> incidences) {
+    this.incidences = incidences;
+  }
+
+  public Service incidences(List<ServiceIncidence> incidences) {
+    this.incidences = incidences;
+    return this;
+  }
+
+  public Service addIncidencesItem(ServiceIncidence incidencesItem) {
+    this.incidences.add(incidencesItem);
+    return this;
+  }
+
+ /**
+   * Get lastModifiedDate
+   * @return lastModifiedDate
+  **/
+  public Date getLastModifiedDate() {
+    return lastModifiedDate;
+  }
+
+  public void setLastModifiedDate(Date lastModifiedDate) {
+    this.lastModifiedDate = lastModifiedDate;
+  }
+
+  public Service lastModifiedDate(Date lastModifiedDate) {
+    this.lastModifiedDate = lastModifiedDate;
+    return this;
+  }
+
+ /**
+   * Get match
+   * @return match
+  **/
+  public Double getMatch() {
+    return match;
+  }
+
+  public void setMatch(Double match) {
+    this.match = match;
+  }
+
+  public Service match(Double match) {
+    this.match = match;
+    return this;
+  }
+
+ /**
+   * Get matchingattributelist
+   * @return matchingattributelist
+  **/
+  public List<String> getMatchingattributelist() {
+    return matchingattributelist;
+  }
+
+  public void setMatchingattributelist(List<String> matchingattributelist) {
+    this.matchingattributelist = matchingattributelist;
+  }
+
+  public Service matchingattributelist(List<String> matchingattributelist) {
+    this.matchingattributelist = matchingattributelist;
+    return this;
+  }
+
+  public Service addMatchingattributelistItem(String matchingattributelistItem) {
+    this.matchingattributelist.add(matchingattributelistItem);
+    return this;
+  }
+
+ /**
+   * Get secondcontract
+   * @return secondcontract
+  **/
+  public List<byte[]> getSecondcontract() {
+    return secondcontract;
+  }
+
+  public void setSecondcontract(List<byte[]> secondcontract) {
+    this.secondcontract = secondcontract;
+  }
+
+  public Service secondcontract(List<byte[]> secondcontract) {
+    this.secondcontract = secondcontract;
+    return this;
+  }
+
+  public Service addSecondcontractItem(byte[] secondcontractItem) {
+    this.secondcontract.add(secondcontractItem);
+    return this;
+  }
+
+ /**
+   * Get serviceclassid
+   * @return serviceclassid
+  **/
+  public Long getServiceclassid() {
+    return serviceclassid;
+  }
+
+  public void setServiceclassid(Long serviceclassid) {
+    this.serviceclassid = serviceclassid;
+  }
+
+  public Service serviceclassid(Long serviceclassid) {
+    this.serviceclassid = serviceclassid;
+    return this;
+  }
+
+ /**
+   * Get serviceclassname
+   * @return serviceclassname
+  **/
+  public String getServiceclassname() {
+    return serviceclassname;
+  }
+
+  public void setServiceclassname(String serviceclassname) {
+    this.serviceclassname = serviceclassname;
+  }
+
+  public Service serviceclassname(String serviceclassname) {
+    this.serviceclassname = serviceclassname;
+    return this;
+  }
+
+ /**
+   * Get servicename
+   * @return servicename
+  **/
+  public String getServicename() {
+    return servicename;
+  }
+
+  public void setServicename(String servicename) {
+    this.servicename = servicename;
+  }
+
+  public Service servicename(String servicename) {
+    this.servicename = servicename;
+    return this;
+  }
+
+ /**
+   * Get thirdcontract
+   * @return thirdcontract
+  **/
+  public List<byte[]> getThirdcontract() {
+    return thirdcontract;
+  }
+
+  public void setThirdcontract(List<byte[]> thirdcontract) {
+    this.thirdcontract = thirdcontract;
+  }
+
+  public Service thirdcontract(List<byte[]> thirdcontract) {
+    this.thirdcontract = thirdcontract;
+    return this;
+  }
+
+  public Service addThirdcontractItem(byte[] thirdcontractItem) {
+    this.thirdcontract.add(thirdcontractItem);
+    return this;
+  }
+
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Service {\n");
+    
+    sb.append("    attributes: ").append(toIndentedString(attributes)).append("\n");
+    sb.append("    createdDate: ").append(toIndentedString(createdDate)).append("\n");
+    sb.append("    deleteddate: ").append(toIndentedString(deleteddate)).append("\n");
+    sb.append("    firstcontract: ").append(toIndentedString(firstcontract)).append("\n");
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    incidences: ").append(toIndentedString(incidences)).append("\n");
+    sb.append("    lastModifiedDate: ").append(toIndentedString(lastModifiedDate)).append("\n");
+    sb.append("    match: ").append(toIndentedString(match)).append("\n");
+    sb.append("    matchingattributelist: ").append(toIndentedString(matchingattributelist)).append("\n");
+    sb.append("    secondcontract: ").append(toIndentedString(secondcontract)).append("\n");
+    sb.append("    serviceclassid: ").append(toIndentedString(serviceclassid)).append("\n");
+    sb.append("    serviceclassname: ").append(toIndentedString(serviceclassname)).append("\n");
+    sb.append("    servicename: ").append(toIndentedString(servicename)).append("\n");
+    sb.append("    thirdcontract: ").append(toIndentedString(thirdcontract)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private static String toIndentedString(java.lang.Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/ServiceAttributeType.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/ServiceAttributeType.java
index 452f94546b698d7a391ad6d7874e2c7a071cbfb4..5f99a61d9cc68b59fbc2a8173c55354cf31fec60 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/ServiceAttributeType.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/ServiceAttributeType.java
@@ -1,389 +1,358 @@
-package eu.decideh2020.ACSmI.discovery.backend.client.model;
-
-import java.util.Date;
-
-import io.swagger.annotations.ApiModelProperty;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlType;
-import javax.xml.bind.annotation.XmlEnum;
-import javax.xml.bind.annotation.XmlEnumValue;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public class ServiceAttributeType  {
-  
-  @ApiModelProperty(value = "")
-  private String checklistevalrule = null;
-
-  @ApiModelProperty(value = "")
-  private Long childid = null;
-
-  @ApiModelProperty(value = "")
-  private Date createdDate = null;
-
-  @ApiModelProperty(value = "")
-  private Date deleteddate = null;
-
-  @ApiModelProperty(value = "")
-  private Long id = null;
-
-  @ApiModelProperty(required = true, value = "")
-  private Boolean ischecklist = null;
-
-  @ApiModelProperty(required = true, value = "")
-  private Boolean iscommon = null;
-
-  @ApiModelProperty(required = true, value = "")
-  private Boolean isenumeration = null;
-
-  @ApiModelProperty(required = true, value = "")
-  private Boolean isfunctionalrequirement = null;
-
-  @ApiModelProperty(value = "")
-  private Date lastModifiedDate = null;
-
-  @ApiModelProperty(required = true, value = "")
-  private String name = null;
-
-  @ApiModelProperty(value = "")
-  private String nfrname = null;
-
-  @ApiModelProperty(value = "")
-  private Long parentid = null;
-
-  @ApiModelProperty(value = "")
-  private String unitfactor = null;
-
-  @ApiModelProperty(value = "")
-  private String unitrule = null;
-
-  @ApiModelProperty(value = "")
-  private String units = null;
- /**
-   * Get checklistevalrule
-   * @return checklistevalrule
-  **/
-  @JsonProperty("checklistevalrule")
-  public String getChecklistevalrule() {
-    return checklistevalrule;
-  }
-
-  public void setChecklistevalrule(String checklistevalrule) {
-    this.checklistevalrule = checklistevalrule;
-  }
-
-  public ServiceAttributeType checklistevalrule(String checklistevalrule) {
-    this.checklistevalrule = checklistevalrule;
-    return this;
-  }
-
- /**
-   * Get childid
-   * @return childid
-  **/
-  @JsonProperty("childid")
-  public Long getChildid() {
-    return childid;
-  }
-
-  public void setChildid(Long childid) {
-    this.childid = childid;
-  }
-
-  public ServiceAttributeType childid(Long childid) {
-    this.childid = childid;
-    return this;
-  }
-
- /**
-   * Get createdDate
-   * @return createdDate
-  **/
-  @JsonProperty("createdDate")
-  public Date getCreatedDate() {
-    return createdDate;
-  }
-
-  public void setCreatedDate(Date createdDate) {
-    this.createdDate = createdDate;
-  }
-
-  public ServiceAttributeType createdDate(Date createdDate) {
-    this.createdDate = createdDate;
-    return this;
-  }
-
- /**
-   * Get deleteddate
-   * @return deleteddate
-  **/
-  @JsonProperty("deleteddate")
-  public Date getDeleteddate() {
-    return deleteddate;
-  }
-
-  public void setDeleteddate(Date deleteddate) {
-    this.deleteddate = deleteddate;
-  }
-
-  public ServiceAttributeType deleteddate(Date deleteddate) {
-    this.deleteddate = deleteddate;
-    return this;
-  }
-
- /**
-   * Get id
-   * @return id
-  **/
-  @JsonProperty("id")
-  public Long getId() {
-    return id;
-  }
-
-  public void setId(Long id) {
-    this.id = id;
-  }
-
-  public ServiceAttributeType id(Long id) {
-    this.id = id;
-    return this;
-  }
-
- /**
-   * Get ischecklist
-   * @return ischecklist
-  **/
-  @JsonProperty("ischecklist")
-  public Boolean isIschecklist() {
-    return ischecklist;
-  }
-
-  public void setIschecklist(Boolean ischecklist) {
-    this.ischecklist = ischecklist;
-  }
-
-  public ServiceAttributeType ischecklist(Boolean ischecklist) {
-    this.ischecklist = ischecklist;
-    return this;
-  }
-
- /**
-   * Get iscommon
-   * @return iscommon
-  **/
-  @JsonProperty("iscommon")
-  public Boolean isIscommon() {
-    return iscommon;
-  }
-
-  public void setIscommon(Boolean iscommon) {
-    this.iscommon = iscommon;
-  }
-
-  public ServiceAttributeType iscommon(Boolean iscommon) {
-    this.iscommon = iscommon;
-    return this;
-  }
-
- /**
-   * Get isenumeration
-   * @return isenumeration
-  **/
-  @JsonProperty("isenumeration")
-  public Boolean isIsenumeration() {
-    return isenumeration;
-  }
-
-  public void setIsenumeration(Boolean isenumeration) {
-    this.isenumeration = isenumeration;
-  }
-
-  public ServiceAttributeType isenumeration(Boolean isenumeration) {
-    this.isenumeration = isenumeration;
-    return this;
-  }
-
- /**
-   * Get isfunctionalrequirement
-   * @return isfunctionalrequirement
-  **/
-  @JsonProperty("isfunctionalrequirement")
-  public Boolean isIsfunctionalrequirement() {
-    return isfunctionalrequirement;
-  }
-
-  public void setIsfunctionalrequirement(Boolean isfunctionalrequirement) {
-    this.isfunctionalrequirement = isfunctionalrequirement;
-  }
-
-  public ServiceAttributeType isfunctionalrequirement(Boolean isfunctionalrequirement) {
-    this.isfunctionalrequirement = isfunctionalrequirement;
-    return this;
-  }
-
- /**
-   * Get lastModifiedDate
-   * @return lastModifiedDate
-  **/
-  @JsonProperty("lastModifiedDate")
-  public Date getLastModifiedDate() {
-    return lastModifiedDate;
-  }
-
-  public void setLastModifiedDate(Date lastModifiedDate) {
-    this.lastModifiedDate = lastModifiedDate;
-  }
-
-  public ServiceAttributeType lastModifiedDate(Date lastModifiedDate) {
-    this.lastModifiedDate = lastModifiedDate;
-    return this;
-  }
-
- /**
-   * Get name
-   * @return name
-  **/
-  @JsonProperty("name")
-  public String getName() {
-    return name;
-  }
-
-  public void setName(String name) {
-    this.name = name;
-  }
-
-  public ServiceAttributeType name(String name) {
-    this.name = name;
-    return this;
-  }
-
- /**
-   * Get nfrname
-   * @return nfrname
-  **/
-  @JsonProperty("nfrname")
-  public String getNfrname() {
-    return nfrname;
-  }
-
-  public void setNfrname(String nfrname) {
-    this.nfrname = nfrname;
-  }
-
-  public ServiceAttributeType nfrname(String nfrname) {
-    this.nfrname = nfrname;
-    return this;
-  }
-
- /**
-   * Get parentid
-   * @return parentid
-  **/
-  @JsonProperty("parentid")
-  public Long getParentid() {
-    return parentid;
-  }
-
-  public void setParentid(Long parentid) {
-    this.parentid = parentid;
-  }
-
-  public ServiceAttributeType parentid(Long parentid) {
-    this.parentid = parentid;
-    return this;
-  }
-
- /**
-   * Get unitfactor
-   * @return unitfactor
-  **/
-  @JsonProperty("unitfactor")
-  public String getUnitfactor() {
-    return unitfactor;
-  }
-
-  public void setUnitfactor(String unitfactor) {
-    this.unitfactor = unitfactor;
-  }
-
-  public ServiceAttributeType unitfactor(String unitfactor) {
-    this.unitfactor = unitfactor;
-    return this;
-  }
-
- /**
-   * Get unitrule
-   * @return unitrule
-  **/
-  @JsonProperty("unitrule")
-  public String getUnitrule() {
-    return unitrule;
-  }
-
-  public void setUnitrule(String unitrule) {
-    this.unitrule = unitrule;
-  }
-
-  public ServiceAttributeType unitrule(String unitrule) {
-    this.unitrule = unitrule;
-    return this;
-  }
-
- /**
-   * Get units
-   * @return units
-  **/
-  @JsonProperty("units")
-  public String getUnits() {
-    return units;
-  }
-
-  public void setUnits(String units) {
-    this.units = units;
-  }
-
-  public ServiceAttributeType units(String units) {
-    this.units = units;
-    return this;
-  }
-
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("class ServiceAttributeType {\n");
-    
-    sb.append("    checklistevalrule: ").append(toIndentedString(checklistevalrule)).append("\n");
-    sb.append("    childid: ").append(toIndentedString(childid)).append("\n");
-    sb.append("    createdDate: ").append(toIndentedString(createdDate)).append("\n");
-    sb.append("    deleteddate: ").append(toIndentedString(deleteddate)).append("\n");
-    sb.append("    id: ").append(toIndentedString(id)).append("\n");
-    sb.append("    ischecklist: ").append(toIndentedString(ischecklist)).append("\n");
-    sb.append("    iscommon: ").append(toIndentedString(iscommon)).append("\n");
-    sb.append("    isenumeration: ").append(toIndentedString(isenumeration)).append("\n");
-    sb.append("    isfunctionalrequirement: ").append(toIndentedString(isfunctionalrequirement)).append("\n");
-    sb.append("    lastModifiedDate: ").append(toIndentedString(lastModifiedDate)).append("\n");
-    sb.append("    name: ").append(toIndentedString(name)).append("\n");
-    sb.append("    nfrname: ").append(toIndentedString(nfrname)).append("\n");
-    sb.append("    parentid: ").append(toIndentedString(parentid)).append("\n");
-    sb.append("    unitfactor: ").append(toIndentedString(unitfactor)).append("\n");
-    sb.append("    unitrule: ").append(toIndentedString(unitrule)).append("\n");
-    sb.append("    units: ").append(toIndentedString(units)).append("\n");
-    sb.append("}");
-    return sb.toString();
-  }
-
-  /**
-   * Convert the given object to string with each line indented by 4 spaces
-   * (except the first line).
-   */
-  private static String toIndentedString(java.lang.Object o) {
-    if (o == null) {
-      return "null";
-    }
-    return o.toString().replace("\n", "\n    ");
-  }
-}
-
+package eu.decideh2020.ACSmI.discovery.backend.client.model;
+
+import java.util.Date;
+
+import io.swagger.annotations.ApiModelProperty;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlEnum;
+import javax.xml.bind.annotation.XmlEnumValue;
+
+public class ServiceAttributeType  {
+  
+  @ApiModelProperty(value = "")
+  private Long childid = null;
+  @ApiModelProperty(value = "")
+  private Date createdDate = null;
+  @ApiModelProperty(value = "")
+  private Date deleteddate = null;
+  @ApiModelProperty(value = "")
+  private String evalrule = null;
+  @ApiModelProperty(value = "")
+  private Long id = null;
+  @ApiModelProperty(required = true, value = "")
+  private Boolean ischecklist = null;
+  @ApiModelProperty(required = true, value = "")
+  private Boolean iscommon = null;
+  @ApiModelProperty(required = true, value = "")
+  private Boolean isenumeration = null;
+  @ApiModelProperty(required = true, value = "")
+  private Boolean isfunctionalrequirement = null;
+  @ApiModelProperty(value = "")
+  private Date lastModifiedDate = null;
+  @ApiModelProperty(required = true, value = "")
+  private String name = null;
+  @ApiModelProperty(value = "")
+  private String nfrname = null;
+  @ApiModelProperty(value = "")
+  private Long parentid = null;
+  @ApiModelProperty(value = "")
+  private String unitfactor = null;
+  @ApiModelProperty(value = "")
+  private String unitrule = null;
+  @ApiModelProperty(value = "")
+  private String units = null;
+
+ /**
+   * Get childid
+   * @return childid
+  **/
+  public Long getChildid() {
+    return childid;
+  }
+
+  public void setChildid(Long childid) {
+    this.childid = childid;
+  }
+
+  public ServiceAttributeType childid(Long childid) {
+    this.childid = childid;
+    return this;
+  }
+
+ /**
+   * Get createdDate
+   * @return createdDate
+  **/
+  public Date getCreatedDate() {
+    return createdDate;
+  }
+
+  public void setCreatedDate(Date createdDate) {
+    this.createdDate = createdDate;
+  }
+
+  public ServiceAttributeType createdDate(Date createdDate) {
+    this.createdDate = createdDate;
+    return this;
+  }
+
+ /**
+   * Get deleteddate
+   * @return deleteddate
+  **/
+  public Date getDeleteddate() {
+    return deleteddate;
+  }
+
+  public void setDeleteddate(Date deleteddate) {
+    this.deleteddate = deleteddate;
+  }
+
+  public ServiceAttributeType deleteddate(Date deleteddate) {
+    this.deleteddate = deleteddate;
+    return this;
+  }
+
+ /**
+   * Get evalrule
+   * @return evalrule
+  **/
+  public String getEvalrule() {
+    return evalrule;
+  }
+
+  public void setEvalrule(String evalrule) {
+    this.evalrule = evalrule;
+  }
+
+  public ServiceAttributeType evalrule(String evalrule) {
+    this.evalrule = evalrule;
+    return this;
+  }
+
+ /**
+   * Get id
+   * @return id
+  **/
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public ServiceAttributeType id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+ /**
+   * Get ischecklist
+   * @return ischecklist
+  **/
+  public Boolean isIschecklist() {
+    return ischecklist;
+  }
+
+  public void setIschecklist(Boolean ischecklist) {
+    this.ischecklist = ischecklist;
+  }
+
+  public ServiceAttributeType ischecklist(Boolean ischecklist) {
+    this.ischecklist = ischecklist;
+    return this;
+  }
+
+ /**
+   * Get iscommon
+   * @return iscommon
+  **/
+  public Boolean isIscommon() {
+    return iscommon;
+  }
+
+  public void setIscommon(Boolean iscommon) {
+    this.iscommon = iscommon;
+  }
+
+  public ServiceAttributeType iscommon(Boolean iscommon) {
+    this.iscommon = iscommon;
+    return this;
+  }
+
+ /**
+   * Get isenumeration
+   * @return isenumeration
+  **/
+  public Boolean isIsenumeration() {
+    return isenumeration;
+  }
+
+  public void setIsenumeration(Boolean isenumeration) {
+    this.isenumeration = isenumeration;
+  }
+
+  public ServiceAttributeType isenumeration(Boolean isenumeration) {
+    this.isenumeration = isenumeration;
+    return this;
+  }
+
+ /**
+   * Get isfunctionalrequirement
+   * @return isfunctionalrequirement
+  **/
+  public Boolean isIsfunctionalrequirement() {
+    return isfunctionalrequirement;
+  }
+
+  public void setIsfunctionalrequirement(Boolean isfunctionalrequirement) {
+    this.isfunctionalrequirement = isfunctionalrequirement;
+  }
+
+  public ServiceAttributeType isfunctionalrequirement(Boolean isfunctionalrequirement) {
+    this.isfunctionalrequirement = isfunctionalrequirement;
+    return this;
+  }
+
+ /**
+   * Get lastModifiedDate
+   * @return lastModifiedDate
+  **/
+  public Date getLastModifiedDate() {
+    return lastModifiedDate;
+  }
+
+  public void setLastModifiedDate(Date lastModifiedDate) {
+    this.lastModifiedDate = lastModifiedDate;
+  }
+
+  public ServiceAttributeType lastModifiedDate(Date lastModifiedDate) {
+    this.lastModifiedDate = lastModifiedDate;
+    return this;
+  }
+
+ /**
+   * Get name
+   * @return name
+  **/
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  public ServiceAttributeType name(String name) {
+    this.name = name;
+    return this;
+  }
+
+ /**
+   * Get nfrname
+   * @return nfrname
+  **/
+  public String getNfrname() {
+    return nfrname;
+  }
+
+  public void setNfrname(String nfrname) {
+    this.nfrname = nfrname;
+  }
+
+  public ServiceAttributeType nfrname(String nfrname) {
+    this.nfrname = nfrname;
+    return this;
+  }
+
+ /**
+   * Get parentid
+   * @return parentid
+  **/
+  public Long getParentid() {
+    return parentid;
+  }
+
+  public void setParentid(Long parentid) {
+    this.parentid = parentid;
+  }
+
+  public ServiceAttributeType parentid(Long parentid) {
+    this.parentid = parentid;
+    return this;
+  }
+
+ /**
+   * Get unitfactor
+   * @return unitfactor
+  **/
+  public String getUnitfactor() {
+    return unitfactor;
+  }
+
+  public void setUnitfactor(String unitfactor) {
+    this.unitfactor = unitfactor;
+  }
+
+  public ServiceAttributeType unitfactor(String unitfactor) {
+    this.unitfactor = unitfactor;
+    return this;
+  }
+
+ /**
+   * Get unitrule
+   * @return unitrule
+  **/
+  public String getUnitrule() {
+    return unitrule;
+  }
+
+  public void setUnitrule(String unitrule) {
+    this.unitrule = unitrule;
+  }
+
+  public ServiceAttributeType unitrule(String unitrule) {
+    this.unitrule = unitrule;
+    return this;
+  }
+
+ /**
+   * Get units
+   * @return units
+  **/
+  public String getUnits() {
+    return units;
+  }
+
+  public void setUnits(String units) {
+    this.units = units;
+  }
+
+  public ServiceAttributeType units(String units) {
+    this.units = units;
+    return this;
+  }
+
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ServiceAttributeType {\n");
+    
+    sb.append("    childid: ").append(toIndentedString(childid)).append("\n");
+    sb.append("    createdDate: ").append(toIndentedString(createdDate)).append("\n");
+    sb.append("    deleteddate: ").append(toIndentedString(deleteddate)).append("\n");
+    sb.append("    evalrule: ").append(toIndentedString(evalrule)).append("\n");
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    ischecklist: ").append(toIndentedString(ischecklist)).append("\n");
+    sb.append("    iscommon: ").append(toIndentedString(iscommon)).append("\n");
+    sb.append("    isenumeration: ").append(toIndentedString(isenumeration)).append("\n");
+    sb.append("    isfunctionalrequirement: ").append(toIndentedString(isfunctionalrequirement)).append("\n");
+    sb.append("    lastModifiedDate: ").append(toIndentedString(lastModifiedDate)).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("    nfrname: ").append(toIndentedString(nfrname)).append("\n");
+    sb.append("    parentid: ").append(toIndentedString(parentid)).append("\n");
+    sb.append("    unitfactor: ").append(toIndentedString(unitfactor)).append("\n");
+    sb.append("    unitrule: ").append(toIndentedString(unitrule)).append("\n");
+    sb.append("    units: ").append(toIndentedString(units)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private static String toIndentedString(java.lang.Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/ServiceAttributeValue.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/ServiceAttributeValue.java
index cd9c3d1883db91a7f6f0df9988e323a25381a105..655e54cc1310ac7dc6cef6977463862e1d2e6d20 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/ServiceAttributeValue.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/ServiceAttributeValue.java
@@ -1,235 +1,218 @@
-package eu.decideh2020.ACSmI.discovery.backend.client.model;
-
-import java.util.Date;
-
-import io.swagger.annotations.ApiModelProperty;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlType;
-import javax.xml.bind.annotation.XmlEnum;
-import javax.xml.bind.annotation.XmlEnumValue;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public class ServiceAttributeValue  {
-  
-  @ApiModelProperty(value = "")
-  private String checklistvalue = null;
-
-  @ApiModelProperty(value = "")
-  private Date createdDate = null;
-
-  @ApiModelProperty(value = "")
-  private Date deleteddate = null;
-
-  @ApiModelProperty(value = "")
-  private Long id = null;
-
-  @ApiModelProperty(value = "")
-  private Date lastModifiedDate = null;
-
-  @ApiModelProperty(required = true, value = "")
-  private Long serviceattributetypeid = null;
-
-  @ApiModelProperty(value = "")
-  private String serviceattributevalue = null;
-
-  @ApiModelProperty(required = true, value = "")
-  private Long serviceid = null;
-
-  @ApiModelProperty(value = "")
-  private String unitvalue = null;
- /**
-   * Get checklistvalue
-   * @return checklistvalue
-  **/
-  @JsonProperty("checklistvalue")
-  public String getChecklistvalue() {
-    return checklistvalue;
-  }
-
-  public void setChecklistvalue(String checklistvalue) {
-    this.checklistvalue = checklistvalue;
-  }
-
-  public ServiceAttributeValue checklistvalue(String checklistvalue) {
-    this.checklistvalue = checklistvalue;
-    return this;
-  }
-
- /**
-   * Get createdDate
-   * @return createdDate
-  **/
-  @JsonProperty("createdDate")
-  public Date getCreatedDate() {
-    return createdDate;
-  }
-
-  public void setCreatedDate(Date createdDate) {
-    this.createdDate = createdDate;
-  }
-
-  public ServiceAttributeValue createdDate(Date createdDate) {
-    this.createdDate = createdDate;
-    return this;
-  }
-
- /**
-   * Get deleteddate
-   * @return deleteddate
-  **/
-  @JsonProperty("deleteddate")
-  public Date getDeleteddate() {
-    return deleteddate;
-  }
-
-  public void setDeleteddate(Date deleteddate) {
-    this.deleteddate = deleteddate;
-  }
-
-  public ServiceAttributeValue deleteddate(Date deleteddate) {
-    this.deleteddate = deleteddate;
-    return this;
-  }
-
- /**
-   * Get id
-   * @return id
-  **/
-  @JsonProperty("id")
-  public Long getId() {
-    return id;
-  }
-
-  public void setId(Long id) {
-    this.id = id;
-  }
-
-  public ServiceAttributeValue id(Long id) {
-    this.id = id;
-    return this;
-  }
-
- /**
-   * Get lastModifiedDate
-   * @return lastModifiedDate
-  **/
-  @JsonProperty("lastModifiedDate")
-  public Date getLastModifiedDate() {
-    return lastModifiedDate;
-  }
-
-  public void setLastModifiedDate(Date lastModifiedDate) {
-    this.lastModifiedDate = lastModifiedDate;
-  }
-
-  public ServiceAttributeValue lastModifiedDate(Date lastModifiedDate) {
-    this.lastModifiedDate = lastModifiedDate;
-    return this;
-  }
-
- /**
-   * Get serviceattributetypeid
-   * @return serviceattributetypeid
-  **/
-  @JsonProperty("serviceattributetypeid")
-  public Long getServiceattributetypeid() {
-    return serviceattributetypeid;
-  }
-
-  public void setServiceattributetypeid(Long serviceattributetypeid) {
-    this.serviceattributetypeid = serviceattributetypeid;
-  }
-
-  public ServiceAttributeValue serviceattributetypeid(Long serviceattributetypeid) {
-    this.serviceattributetypeid = serviceattributetypeid;
-    return this;
-  }
-
- /**
-   * Get serviceattributevalue
-   * @return serviceattributevalue
-  **/
-  @JsonProperty("serviceattributevalue")
-  public String getServiceattributevalue() {
-    return serviceattributevalue;
-  }
-
-  public void setServiceattributevalue(String serviceattributevalue) {
-    this.serviceattributevalue = serviceattributevalue;
-  }
-
-  public ServiceAttributeValue serviceattributevalue(String serviceattributevalue) {
-    this.serviceattributevalue = serviceattributevalue;
-    return this;
-  }
-
- /**
-   * Get serviceid
-   * @return serviceid
-  **/
-  @JsonProperty("serviceid")
-  public Long getServiceid() {
-    return serviceid;
-  }
-
-  public void setServiceid(Long serviceid) {
-    this.serviceid = serviceid;
-  }
-
-  public ServiceAttributeValue serviceid(Long serviceid) {
-    this.serviceid = serviceid;
-    return this;
-  }
-
- /**
-   * Get unitvalue
-   * @return unitvalue
-  **/
-  @JsonProperty("unitvalue")
-  public String getUnitvalue() {
-    return unitvalue;
-  }
-
-  public void setUnitvalue(String unitvalue) {
-    this.unitvalue = unitvalue;
-  }
-
-  public ServiceAttributeValue unitvalue(String unitvalue) {
-    this.unitvalue = unitvalue;
-    return this;
-  }
-
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("class ServiceAttributeValue {\n");
-    
-    sb.append("    checklistvalue: ").append(toIndentedString(checklistvalue)).append("\n");
-    sb.append("    createdDate: ").append(toIndentedString(createdDate)).append("\n");
-    sb.append("    deleteddate: ").append(toIndentedString(deleteddate)).append("\n");
-    sb.append("    id: ").append(toIndentedString(id)).append("\n");
-    sb.append("    lastModifiedDate: ").append(toIndentedString(lastModifiedDate)).append("\n");
-    sb.append("    serviceattributetypeid: ").append(toIndentedString(serviceattributetypeid)).append("\n");
-    sb.append("    serviceattributevalue: ").append(toIndentedString(serviceattributevalue)).append("\n");
-    sb.append("    serviceid: ").append(toIndentedString(serviceid)).append("\n");
-    sb.append("    unitvalue: ").append(toIndentedString(unitvalue)).append("\n");
-    sb.append("}");
-    return sb.toString();
-  }
-
-  /**
-   * Convert the given object to string with each line indented by 4 spaces
-   * (except the first line).
-   */
-  private static String toIndentedString(java.lang.Object o) {
-    if (o == null) {
-      return "null";
-    }
-    return o.toString().replace("\n", "\n    ");
-  }
-}
-
+package eu.decideh2020.ACSmI.discovery.backend.client.model;
+
+import java.util.Date;
+
+import io.swagger.annotations.ApiModelProperty;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlEnum;
+import javax.xml.bind.annotation.XmlEnumValue;
+
+public class ServiceAttributeValue  {
+  
+  @ApiModelProperty(value = "")
+  private String checklistvalue = null;
+  @ApiModelProperty(value = "")
+  private Date createdDate = null;
+  @ApiModelProperty(value = "")
+  private Date deleteddate = null;
+  @ApiModelProperty(value = "")
+  private Long id = null;
+  @ApiModelProperty(value = "")
+  private Date lastModifiedDate = null;
+  @ApiModelProperty(required = true, value = "")
+  private Long serviceattributetypeid = null;
+  @ApiModelProperty(value = "")
+  private String serviceattributevalue = null;
+  @ApiModelProperty(required = true, value = "")
+  private Long serviceid = null;
+  @ApiModelProperty(value = "")
+  private String unitvalue = null;
+
+ /**
+   * Get checklistvalue
+   * @return checklistvalue
+  **/
+  public String getChecklistvalue() {
+    return checklistvalue;
+  }
+
+  public void setChecklistvalue(String checklistvalue) {
+    this.checklistvalue = checklistvalue;
+  }
+
+  public ServiceAttributeValue checklistvalue(String checklistvalue) {
+    this.checklistvalue = checklistvalue;
+    return this;
+  }
+
+ /**
+   * Get createdDate
+   * @return createdDate
+  **/
+  public Date getCreatedDate() {
+    return createdDate;
+  }
+
+  public void setCreatedDate(Date createdDate) {
+    this.createdDate = createdDate;
+  }
+
+  public ServiceAttributeValue createdDate(Date createdDate) {
+    this.createdDate = createdDate;
+    return this;
+  }
+
+ /**
+   * Get deleteddate
+   * @return deleteddate
+  **/
+  public Date getDeleteddate() {
+    return deleteddate;
+  }
+
+  public void setDeleteddate(Date deleteddate) {
+    this.deleteddate = deleteddate;
+  }
+
+  public ServiceAttributeValue deleteddate(Date deleteddate) {
+    this.deleteddate = deleteddate;
+    return this;
+  }
+
+ /**
+   * Get id
+   * @return id
+  **/
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public ServiceAttributeValue id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+ /**
+   * Get lastModifiedDate
+   * @return lastModifiedDate
+  **/
+  public Date getLastModifiedDate() {
+    return lastModifiedDate;
+  }
+
+  public void setLastModifiedDate(Date lastModifiedDate) {
+    this.lastModifiedDate = lastModifiedDate;
+  }
+
+  public ServiceAttributeValue lastModifiedDate(Date lastModifiedDate) {
+    this.lastModifiedDate = lastModifiedDate;
+    return this;
+  }
+
+ /**
+   * Get serviceattributetypeid
+   * @return serviceattributetypeid
+  **/
+  public Long getServiceattributetypeid() {
+    return serviceattributetypeid;
+  }
+
+  public void setServiceattributetypeid(Long serviceattributetypeid) {
+    this.serviceattributetypeid = serviceattributetypeid;
+  }
+
+  public ServiceAttributeValue serviceattributetypeid(Long serviceattributetypeid) {
+    this.serviceattributetypeid = serviceattributetypeid;
+    return this;
+  }
+
+ /**
+   * Get serviceattributevalue
+   * @return serviceattributevalue
+  **/
+  public String getServiceattributevalue() {
+    return serviceattributevalue;
+  }
+
+  public void setServiceattributevalue(String serviceattributevalue) {
+    this.serviceattributevalue = serviceattributevalue;
+  }
+
+  public ServiceAttributeValue serviceattributevalue(String serviceattributevalue) {
+    this.serviceattributevalue = serviceattributevalue;
+    return this;
+  }
+
+ /**
+   * Get serviceid
+   * @return serviceid
+  **/
+  public Long getServiceid() {
+    return serviceid;
+  }
+
+  public void setServiceid(Long serviceid) {
+    this.serviceid = serviceid;
+  }
+
+  public ServiceAttributeValue serviceid(Long serviceid) {
+    this.serviceid = serviceid;
+    return this;
+  }
+
+ /**
+   * Get unitvalue
+   * @return unitvalue
+  **/
+  public String getUnitvalue() {
+    return unitvalue;
+  }
+
+  public void setUnitvalue(String unitvalue) {
+    this.unitvalue = unitvalue;
+  }
+
+  public ServiceAttributeValue unitvalue(String unitvalue) {
+    this.unitvalue = unitvalue;
+    return this;
+  }
+
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ServiceAttributeValue {\n");
+    
+    sb.append("    checklistvalue: ").append(toIndentedString(checklistvalue)).append("\n");
+    sb.append("    createdDate: ").append(toIndentedString(createdDate)).append("\n");
+    sb.append("    deleteddate: ").append(toIndentedString(deleteddate)).append("\n");
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    lastModifiedDate: ").append(toIndentedString(lastModifiedDate)).append("\n");
+    sb.append("    serviceattributetypeid: ").append(toIndentedString(serviceattributetypeid)).append("\n");
+    sb.append("    serviceattributevalue: ").append(toIndentedString(serviceattributevalue)).append("\n");
+    sb.append("    serviceid: ").append(toIndentedString(serviceid)).append("\n");
+    sb.append("    unitvalue: ").append(toIndentedString(unitvalue)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private static String toIndentedString(java.lang.Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/ServiceClass.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/ServiceClass.java
index 175637c3cad2995d4cc031535f142cc824cc38b6..92090a46095f182a7d3f82e64988897c0bf15df3 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/ServiceClass.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/ServiceClass.java
@@ -1,231 +1,216 @@
-package eu.decideh2020.ACSmI.discovery.backend.client.model;
-
-import eu.decideh2020.ACSmI.discovery.backend.client.model.AttributeVO;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-
-import io.swagger.annotations.ApiModelProperty;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlType;
-import javax.xml.bind.annotation.XmlEnum;
-import javax.xml.bind.annotation.XmlEnumValue;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public class ServiceClass  {
-  
-  @ApiModelProperty(value = "")
-  private List<AttributeVO> commonattributes = null;
-
-  @ApiModelProperty(value = "")
-  private Date createdDate = null;
-
-  @ApiModelProperty(value = "")
-  private Date deleteddate = null;
-
-  @ApiModelProperty(value = "")
-  private List<AttributeVO> functionalattributes = null;
-
-  @ApiModelProperty(value = "")
-  private Long id = null;
-
-  @ApiModelProperty(value = "")
-  private Date lastModifiedDate = null;
-
-  @ApiModelProperty(value = "")
-  private List<AttributeVO> nonfunctionalattributes = null;
-
-  @ApiModelProperty(required = true, value = "")
-  private String serviceclassname = null;
- /**
-   * Get commonattributes
-   * @return commonattributes
-  **/
-  @JsonProperty("commonattributes")
-  public List<AttributeVO> getCommonattributes() {
-    return commonattributes;
-  }
-
-  public void setCommonattributes(List<AttributeVO> commonattributes) {
-    this.commonattributes = commonattributes;
-  }
-
-  public ServiceClass commonattributes(List<AttributeVO> commonattributes) {
-    this.commonattributes = commonattributes;
-    return this;
-  }
-
-  public ServiceClass addCommonattributesItem(AttributeVO commonattributesItem) {
-    this.commonattributes.add(commonattributesItem);
-    return this;
-  }
-
- /**
-   * Get createdDate
-   * @return createdDate
-  **/
-  @JsonProperty("createdDate")
-  public Date getCreatedDate() {
-    return createdDate;
-  }
-
-  public void setCreatedDate(Date createdDate) {
-    this.createdDate = createdDate;
-  }
-
-  public ServiceClass createdDate(Date createdDate) {
-    this.createdDate = createdDate;
-    return this;
-  }
-
- /**
-   * Get deleteddate
-   * @return deleteddate
-  **/
-  @JsonProperty("deleteddate")
-  public Date getDeleteddate() {
-    return deleteddate;
-  }
-
-  public void setDeleteddate(Date deleteddate) {
-    this.deleteddate = deleteddate;
-  }
-
-  public ServiceClass deleteddate(Date deleteddate) {
-    this.deleteddate = deleteddate;
-    return this;
-  }
-
- /**
-   * Get functionalattributes
-   * @return functionalattributes
-  **/
-  @JsonProperty("functionalattributes")
-  public List<AttributeVO> getFunctionalattributes() {
-    return functionalattributes;
-  }
-
-  public void setFunctionalattributes(List<AttributeVO> functionalattributes) {
-    this.functionalattributes = functionalattributes;
-  }
-
-  public ServiceClass functionalattributes(List<AttributeVO> functionalattributes) {
-    this.functionalattributes = functionalattributes;
-    return this;
-  }
-
-  public ServiceClass addFunctionalattributesItem(AttributeVO functionalattributesItem) {
-    this.functionalattributes.add(functionalattributesItem);
-    return this;
-  }
-
- /**
-   * Get id
-   * @return id
-  **/
-  @JsonProperty("id")
-  public Long getId() {
-    return id;
-  }
-
-  public void setId(Long id) {
-    this.id = id;
-  }
-
-  public ServiceClass id(Long id) {
-    this.id = id;
-    return this;
-  }
-
- /**
-   * Get lastModifiedDate
-   * @return lastModifiedDate
-  **/
-  @JsonProperty("lastModifiedDate")
-  public Date getLastModifiedDate() {
-    return lastModifiedDate;
-  }
-
-  public void setLastModifiedDate(Date lastModifiedDate) {
-    this.lastModifiedDate = lastModifiedDate;
-  }
-
-  public ServiceClass lastModifiedDate(Date lastModifiedDate) {
-    this.lastModifiedDate = lastModifiedDate;
-    return this;
-  }
-
- /**
-   * Get nonfunctionalattributes
-   * @return nonfunctionalattributes
-  **/
-  @JsonProperty("nonfunctionalattributes")
-  public List<AttributeVO> getNonfunctionalattributes() {
-    return nonfunctionalattributes;
-  }
-
-  public void setNonfunctionalattributes(List<AttributeVO> nonfunctionalattributes) {
-    this.nonfunctionalattributes = nonfunctionalattributes;
-  }
-
-  public ServiceClass nonfunctionalattributes(List<AttributeVO> nonfunctionalattributes) {
-    this.nonfunctionalattributes = nonfunctionalattributes;
-    return this;
-  }
-
-  public ServiceClass addNonfunctionalattributesItem(AttributeVO nonfunctionalattributesItem) {
-    this.nonfunctionalattributes.add(nonfunctionalattributesItem);
-    return this;
-  }
-
- /**
-   * Get serviceclassname
-   * @return serviceclassname
-  **/
-  @JsonProperty("serviceclassname")
-  public String getServiceclassname() {
-    return serviceclassname;
-  }
-
-  public void setServiceclassname(String serviceclassname) {
-    this.serviceclassname = serviceclassname;
-  }
-
-  public ServiceClass serviceclassname(String serviceclassname) {
-    this.serviceclassname = serviceclassname;
-    return this;
-  }
-
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("class ServiceClass {\n");
-    
-    sb.append("    commonattributes: ").append(toIndentedString(commonattributes)).append("\n");
-    sb.append("    createdDate: ").append(toIndentedString(createdDate)).append("\n");
-    sb.append("    deleteddate: ").append(toIndentedString(deleteddate)).append("\n");
-    sb.append("    functionalattributes: ").append(toIndentedString(functionalattributes)).append("\n");
-    sb.append("    id: ").append(toIndentedString(id)).append("\n");
-    sb.append("    lastModifiedDate: ").append(toIndentedString(lastModifiedDate)).append("\n");
-    sb.append("    nonfunctionalattributes: ").append(toIndentedString(nonfunctionalattributes)).append("\n");
-    sb.append("    serviceclassname: ").append(toIndentedString(serviceclassname)).append("\n");
-    sb.append("}");
-    return sb.toString();
-  }
-
-  /**
-   * Convert the given object to string with each line indented by 4 spaces
-   * (except the first line).
-   */
-  private static String toIndentedString(java.lang.Object o) {
-    if (o == null) {
-      return "null";
-    }
-    return o.toString().replace("\n", "\n    ");
-  }
-}
-
+package eu.decideh2020.ACSmI.discovery.backend.client.model;
+
+import eu.decideh2020.ACSmI.discovery.backend.client.model.AttributeVO;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import io.swagger.annotations.ApiModelProperty;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlEnum;
+import javax.xml.bind.annotation.XmlEnumValue;
+
+public class ServiceClass  {
+  
+  @ApiModelProperty(value = "")
+  private List<AttributeVO> commonattributes = new ArrayList<AttributeVO>();
+  @ApiModelProperty(value = "")
+  private Date createdDate = null;
+  @ApiModelProperty(value = "")
+  private Date deleteddate = null;
+  @ApiModelProperty(value = "")
+  private List<AttributeVO> functionalattributes = new ArrayList<AttributeVO>();
+  @ApiModelProperty(value = "")
+  private Long id = null;
+  @ApiModelProperty(value = "")
+  private Date lastModifiedDate = null;
+  @ApiModelProperty(value = "")
+  private List<AttributeVO> nonfunctionalattributes = new ArrayList<AttributeVO>();
+  @ApiModelProperty(required = true, value = "")
+  private String serviceclassname = null;
+
+ /**
+   * Get commonattributes
+   * @return commonattributes
+  **/
+  public List<AttributeVO> getCommonattributes() {
+    return commonattributes;
+  }
+
+  public void setCommonattributes(List<AttributeVO> commonattributes) {
+    this.commonattributes = commonattributes;
+  }
+
+  public ServiceClass commonattributes(List<AttributeVO> commonattributes) {
+    this.commonattributes = commonattributes;
+    return this;
+  }
+
+  public ServiceClass addCommonattributesItem(AttributeVO commonattributesItem) {
+    this.commonattributes.add(commonattributesItem);
+    return this;
+  }
+
+ /**
+   * Get createdDate
+   * @return createdDate
+  **/
+  public Date getCreatedDate() {
+    return createdDate;
+  }
+
+  public void setCreatedDate(Date createdDate) {
+    this.createdDate = createdDate;
+  }
+
+  public ServiceClass createdDate(Date createdDate) {
+    this.createdDate = createdDate;
+    return this;
+  }
+
+ /**
+   * Get deleteddate
+   * @return deleteddate
+  **/
+  public Date getDeleteddate() {
+    return deleteddate;
+  }
+
+  public void setDeleteddate(Date deleteddate) {
+    this.deleteddate = deleteddate;
+  }
+
+  public ServiceClass deleteddate(Date deleteddate) {
+    this.deleteddate = deleteddate;
+    return this;
+  }
+
+ /**
+   * Get functionalattributes
+   * @return functionalattributes
+  **/
+  public List<AttributeVO> getFunctionalattributes() {
+    return functionalattributes;
+  }
+
+  public void setFunctionalattributes(List<AttributeVO> functionalattributes) {
+    this.functionalattributes = functionalattributes;
+  }
+
+  public ServiceClass functionalattributes(List<AttributeVO> functionalattributes) {
+    this.functionalattributes = functionalattributes;
+    return this;
+  }
+
+  public ServiceClass addFunctionalattributesItem(AttributeVO functionalattributesItem) {
+    this.functionalattributes.add(functionalattributesItem);
+    return this;
+  }
+
+ /**
+   * Get id
+   * @return id
+  **/
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public ServiceClass id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+ /**
+   * Get lastModifiedDate
+   * @return lastModifiedDate
+  **/
+  public Date getLastModifiedDate() {
+    return lastModifiedDate;
+  }
+
+  public void setLastModifiedDate(Date lastModifiedDate) {
+    this.lastModifiedDate = lastModifiedDate;
+  }
+
+  public ServiceClass lastModifiedDate(Date lastModifiedDate) {
+    this.lastModifiedDate = lastModifiedDate;
+    return this;
+  }
+
+ /**
+   * Get nonfunctionalattributes
+   * @return nonfunctionalattributes
+  **/
+  public List<AttributeVO> getNonfunctionalattributes() {
+    return nonfunctionalattributes;
+  }
+
+  public void setNonfunctionalattributes(List<AttributeVO> nonfunctionalattributes) {
+    this.nonfunctionalattributes = nonfunctionalattributes;
+  }
+
+  public ServiceClass nonfunctionalattributes(List<AttributeVO> nonfunctionalattributes) {
+    this.nonfunctionalattributes = nonfunctionalattributes;
+    return this;
+  }
+
+  public ServiceClass addNonfunctionalattributesItem(AttributeVO nonfunctionalattributesItem) {
+    this.nonfunctionalattributes.add(nonfunctionalattributesItem);
+    return this;
+  }
+
+ /**
+   * Get serviceclassname
+   * @return serviceclassname
+  **/
+  public String getServiceclassname() {
+    return serviceclassname;
+  }
+
+  public void setServiceclassname(String serviceclassname) {
+    this.serviceclassname = serviceclassname;
+  }
+
+  public ServiceClass serviceclassname(String serviceclassname) {
+    this.serviceclassname = serviceclassname;
+    return this;
+  }
+
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ServiceClass {\n");
+    
+    sb.append("    commonattributes: ").append(toIndentedString(commonattributes)).append("\n");
+    sb.append("    createdDate: ").append(toIndentedString(createdDate)).append("\n");
+    sb.append("    deleteddate: ").append(toIndentedString(deleteddate)).append("\n");
+    sb.append("    functionalattributes: ").append(toIndentedString(functionalattributes)).append("\n");
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    lastModifiedDate: ").append(toIndentedString(lastModifiedDate)).append("\n");
+    sb.append("    nonfunctionalattributes: ").append(toIndentedString(nonfunctionalattributes)).append("\n");
+    sb.append("    serviceclassname: ").append(toIndentedString(serviceclassname)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private static String toIndentedString(java.lang.Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/ServiceClassAttribute.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/ServiceClassAttribute.java
index a57ccb0cb1b52d55c88606e7c677002e0aefd514..b6f1d777e83f21e8ebc296644d52d5b2675b46c5 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/ServiceClassAttribute.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/ServiceClassAttribute.java
@@ -1,345 +1,318 @@
-package eu.decideh2020.ACSmI.discovery.backend.client.model;
-
-import java.util.Date;
-
-import io.swagger.annotations.ApiModelProperty;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlType;
-import javax.xml.bind.annotation.XmlEnum;
-import javax.xml.bind.annotation.XmlEnumValue;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public class ServiceClassAttribute  {
-  
-  @ApiModelProperty(value = "")
-  private Long childid = null;
-
-  @ApiModelProperty(value = "")
-  private Date createdDate = null;
-
-  @ApiModelProperty(value = "")
-  private Date deleteddate = null;
-
-  @ApiModelProperty(value = "")
-  private Long id = null;
-
-  @ApiModelProperty(value = "")
-  private Boolean ischecklist = null;
-
-  @ApiModelProperty(value = "")
-  private Boolean isenumeration = null;
-
-  @ApiModelProperty(value = "")
-  private Boolean isfunctionalrequirement = null;
-
-  @ApiModelProperty(required = true, value = "")
-  private Boolean ismandatory = null;
-
-  @ApiModelProperty(value = "")
-  private Date lastModifiedDate = null;
-
-  @ApiModelProperty(value = "")
-  private Long parentid = null;
-
-  @ApiModelProperty(required = true, value = "")
-  private Long serviceattributetypeid = null;
-
-  @ApiModelProperty(value = "")
-  private String serviceattributetypename = null;
-
-  @ApiModelProperty(required = true, value = "")
-  private Long serviceclassid = null;
-
-  @ApiModelProperty(required = true, value = "")
-  private Integer weight = null;
- /**
-   * Get childid
-   * @return childid
-  **/
-  @JsonProperty("childid")
-  public Long getChildid() {
-    return childid;
-  }
-
-  public void setChildid(Long childid) {
-    this.childid = childid;
-  }
-
-  public ServiceClassAttribute childid(Long childid) {
-    this.childid = childid;
-    return this;
-  }
-
- /**
-   * Get createdDate
-   * @return createdDate
-  **/
-  @JsonProperty("createdDate")
-  public Date getCreatedDate() {
-    return createdDate;
-  }
-
-  public void setCreatedDate(Date createdDate) {
-    this.createdDate = createdDate;
-  }
-
-  public ServiceClassAttribute createdDate(Date createdDate) {
-    this.createdDate = createdDate;
-    return this;
-  }
-
- /**
-   * Get deleteddate
-   * @return deleteddate
-  **/
-  @JsonProperty("deleteddate")
-  public Date getDeleteddate() {
-    return deleteddate;
-  }
-
-  public void setDeleteddate(Date deleteddate) {
-    this.deleteddate = deleteddate;
-  }
-
-  public ServiceClassAttribute deleteddate(Date deleteddate) {
-    this.deleteddate = deleteddate;
-    return this;
-  }
-
- /**
-   * Get id
-   * @return id
-  **/
-  @JsonProperty("id")
-  public Long getId() {
-    return id;
-  }
-
-  public void setId(Long id) {
-    this.id = id;
-  }
-
-  public ServiceClassAttribute id(Long id) {
-    this.id = id;
-    return this;
-  }
-
- /**
-   * Get ischecklist
-   * @return ischecklist
-  **/
-  @JsonProperty("ischecklist")
-  public Boolean isIschecklist() {
-    return ischecklist;
-  }
-
-  public void setIschecklist(Boolean ischecklist) {
-    this.ischecklist = ischecklist;
-  }
-
-  public ServiceClassAttribute ischecklist(Boolean ischecklist) {
-    this.ischecklist = ischecklist;
-    return this;
-  }
-
- /**
-   * Get isenumeration
-   * @return isenumeration
-  **/
-  @JsonProperty("isenumeration")
-  public Boolean isIsenumeration() {
-    return isenumeration;
-  }
-
-  public void setIsenumeration(Boolean isenumeration) {
-    this.isenumeration = isenumeration;
-  }
-
-  public ServiceClassAttribute isenumeration(Boolean isenumeration) {
-    this.isenumeration = isenumeration;
-    return this;
-  }
-
- /**
-   * Get isfunctionalrequirement
-   * @return isfunctionalrequirement
-  **/
-  @JsonProperty("isfunctionalrequirement")
-  public Boolean isIsfunctionalrequirement() {
-    return isfunctionalrequirement;
-  }
-
-  public void setIsfunctionalrequirement(Boolean isfunctionalrequirement) {
-    this.isfunctionalrequirement = isfunctionalrequirement;
-  }
-
-  public ServiceClassAttribute isfunctionalrequirement(Boolean isfunctionalrequirement) {
-    this.isfunctionalrequirement = isfunctionalrequirement;
-    return this;
-  }
-
- /**
-   * Get ismandatory
-   * @return ismandatory
-  **/
-  @JsonProperty("ismandatory")
-  public Boolean isIsmandatory() {
-    return ismandatory;
-  }
-
-  public void setIsmandatory(Boolean ismandatory) {
-    this.ismandatory = ismandatory;
-  }
-
-  public ServiceClassAttribute ismandatory(Boolean ismandatory) {
-    this.ismandatory = ismandatory;
-    return this;
-  }
-
- /**
-   * Get lastModifiedDate
-   * @return lastModifiedDate
-  **/
-  @JsonProperty("lastModifiedDate")
-  public Date getLastModifiedDate() {
-    return lastModifiedDate;
-  }
-
-  public void setLastModifiedDate(Date lastModifiedDate) {
-    this.lastModifiedDate = lastModifiedDate;
-  }
-
-  public ServiceClassAttribute lastModifiedDate(Date lastModifiedDate) {
-    this.lastModifiedDate = lastModifiedDate;
-    return this;
-  }
-
- /**
-   * Get parentid
-   * @return parentid
-  **/
-  @JsonProperty("parentid")
-  public Long getParentid() {
-    return parentid;
-  }
-
-  public void setParentid(Long parentid) {
-    this.parentid = parentid;
-  }
-
-  public ServiceClassAttribute parentid(Long parentid) {
-    this.parentid = parentid;
-    return this;
-  }
-
- /**
-   * Get serviceattributetypeid
-   * @return serviceattributetypeid
-  **/
-  @JsonProperty("serviceattributetypeid")
-  public Long getServiceattributetypeid() {
-    return serviceattributetypeid;
-  }
-
-  public void setServiceattributetypeid(Long serviceattributetypeid) {
-    this.serviceattributetypeid = serviceattributetypeid;
-  }
-
-  public ServiceClassAttribute serviceattributetypeid(Long serviceattributetypeid) {
-    this.serviceattributetypeid = serviceattributetypeid;
-    return this;
-  }
-
- /**
-   * Get serviceattributetypename
-   * @return serviceattributetypename
-  **/
-  @JsonProperty("serviceattributetypename")
-  public String getServiceattributetypename() {
-    return serviceattributetypename;
-  }
-
-  public void setServiceattributetypename(String serviceattributetypename) {
-    this.serviceattributetypename = serviceattributetypename;
-  }
-
-  public ServiceClassAttribute serviceattributetypename(String serviceattributetypename) {
-    this.serviceattributetypename = serviceattributetypename;
-    return this;
-  }
-
- /**
-   * Get serviceclassid
-   * @return serviceclassid
-  **/
-  @JsonProperty("serviceclassid")
-  public Long getServiceclassid() {
-    return serviceclassid;
-  }
-
-  public void setServiceclassid(Long serviceclassid) {
-    this.serviceclassid = serviceclassid;
-  }
-
-  public ServiceClassAttribute serviceclassid(Long serviceclassid) {
-    this.serviceclassid = serviceclassid;
-    return this;
-  }
-
- /**
-   * Get weight
-   * @return weight
-  **/
-  @JsonProperty("weight")
-  public Integer getWeight() {
-    return weight;
-  }
-
-  public void setWeight(Integer weight) {
-    this.weight = weight;
-  }
-
-  public ServiceClassAttribute weight(Integer weight) {
-    this.weight = weight;
-    return this;
-  }
-
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("class ServiceClassAttribute {\n");
-    
-    sb.append("    childid: ").append(toIndentedString(childid)).append("\n");
-    sb.append("    createdDate: ").append(toIndentedString(createdDate)).append("\n");
-    sb.append("    deleteddate: ").append(toIndentedString(deleteddate)).append("\n");
-    sb.append("    id: ").append(toIndentedString(id)).append("\n");
-    sb.append("    ischecklist: ").append(toIndentedString(ischecklist)).append("\n");
-    sb.append("    isenumeration: ").append(toIndentedString(isenumeration)).append("\n");
-    sb.append("    isfunctionalrequirement: ").append(toIndentedString(isfunctionalrequirement)).append("\n");
-    sb.append("    ismandatory: ").append(toIndentedString(ismandatory)).append("\n");
-    sb.append("    lastModifiedDate: ").append(toIndentedString(lastModifiedDate)).append("\n");
-    sb.append("    parentid: ").append(toIndentedString(parentid)).append("\n");
-    sb.append("    serviceattributetypeid: ").append(toIndentedString(serviceattributetypeid)).append("\n");
-    sb.append("    serviceattributetypename: ").append(toIndentedString(serviceattributetypename)).append("\n");
-    sb.append("    serviceclassid: ").append(toIndentedString(serviceclassid)).append("\n");
-    sb.append("    weight: ").append(toIndentedString(weight)).append("\n");
-    sb.append("}");
-    return sb.toString();
-  }
-
-  /**
-   * Convert the given object to string with each line indented by 4 spaces
-   * (except the first line).
-   */
-  private static String toIndentedString(java.lang.Object o) {
-    if (o == null) {
-      return "null";
-    }
-    return o.toString().replace("\n", "\n    ");
-  }
-}
-
+package eu.decideh2020.ACSmI.discovery.backend.client.model;
+
+import java.util.Date;
+
+import io.swagger.annotations.ApiModelProperty;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlEnum;
+import javax.xml.bind.annotation.XmlEnumValue;
+
+public class ServiceClassAttribute  {
+  
+  @ApiModelProperty(value = "")
+  private Long childid = null;
+  @ApiModelProperty(value = "")
+  private Date createdDate = null;
+  @ApiModelProperty(value = "")
+  private Date deleteddate = null;
+  @ApiModelProperty(value = "")
+  private Long id = null;
+  @ApiModelProperty(value = "")
+  private Boolean ischecklist = null;
+  @ApiModelProperty(value = "")
+  private Boolean isenumeration = null;
+  @ApiModelProperty(value = "")
+  private Boolean isfunctionalrequirement = null;
+  @ApiModelProperty(required = true, value = "")
+  private Boolean ismandatory = null;
+  @ApiModelProperty(value = "")
+  private Date lastModifiedDate = null;
+  @ApiModelProperty(value = "")
+  private Long parentid = null;
+  @ApiModelProperty(required = true, value = "")
+  private Long serviceattributetypeid = null;
+  @ApiModelProperty(value = "")
+  private String serviceattributetypename = null;
+  @ApiModelProperty(required = true, value = "")
+  private Long serviceclassid = null;
+  @ApiModelProperty(required = true, value = "")
+  private Integer weight = null;
+
+ /**
+   * Get childid
+   * @return childid
+  **/
+  public Long getChildid() {
+    return childid;
+  }
+
+  public void setChildid(Long childid) {
+    this.childid = childid;
+  }
+
+  public ServiceClassAttribute childid(Long childid) {
+    this.childid = childid;
+    return this;
+  }
+
+ /**
+   * Get createdDate
+   * @return createdDate
+  **/
+  public Date getCreatedDate() {
+    return createdDate;
+  }
+
+  public void setCreatedDate(Date createdDate) {
+    this.createdDate = createdDate;
+  }
+
+  public ServiceClassAttribute createdDate(Date createdDate) {
+    this.createdDate = createdDate;
+    return this;
+  }
+
+ /**
+   * Get deleteddate
+   * @return deleteddate
+  **/
+  public Date getDeleteddate() {
+    return deleteddate;
+  }
+
+  public void setDeleteddate(Date deleteddate) {
+    this.deleteddate = deleteddate;
+  }
+
+  public ServiceClassAttribute deleteddate(Date deleteddate) {
+    this.deleteddate = deleteddate;
+    return this;
+  }
+
+ /**
+   * Get id
+   * @return id
+  **/
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public ServiceClassAttribute id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+ /**
+   * Get ischecklist
+   * @return ischecklist
+  **/
+  public Boolean isIschecklist() {
+    return ischecklist;
+  }
+
+  public void setIschecklist(Boolean ischecklist) {
+    this.ischecklist = ischecklist;
+  }
+
+  public ServiceClassAttribute ischecklist(Boolean ischecklist) {
+    this.ischecklist = ischecklist;
+    return this;
+  }
+
+ /**
+   * Get isenumeration
+   * @return isenumeration
+  **/
+  public Boolean isIsenumeration() {
+    return isenumeration;
+  }
+
+  public void setIsenumeration(Boolean isenumeration) {
+    this.isenumeration = isenumeration;
+  }
+
+  public ServiceClassAttribute isenumeration(Boolean isenumeration) {
+    this.isenumeration = isenumeration;
+    return this;
+  }
+
+ /**
+   * Get isfunctionalrequirement
+   * @return isfunctionalrequirement
+  **/
+  public Boolean isIsfunctionalrequirement() {
+    return isfunctionalrequirement;
+  }
+
+  public void setIsfunctionalrequirement(Boolean isfunctionalrequirement) {
+    this.isfunctionalrequirement = isfunctionalrequirement;
+  }
+
+  public ServiceClassAttribute isfunctionalrequirement(Boolean isfunctionalrequirement) {
+    this.isfunctionalrequirement = isfunctionalrequirement;
+    return this;
+  }
+
+ /**
+   * Get ismandatory
+   * @return ismandatory
+  **/
+  public Boolean isIsmandatory() {
+    return ismandatory;
+  }
+
+  public void setIsmandatory(Boolean ismandatory) {
+    this.ismandatory = ismandatory;
+  }
+
+  public ServiceClassAttribute ismandatory(Boolean ismandatory) {
+    this.ismandatory = ismandatory;
+    return this;
+  }
+
+ /**
+   * Get lastModifiedDate
+   * @return lastModifiedDate
+  **/
+  public Date getLastModifiedDate() {
+    return lastModifiedDate;
+  }
+
+  public void setLastModifiedDate(Date lastModifiedDate) {
+    this.lastModifiedDate = lastModifiedDate;
+  }
+
+  public ServiceClassAttribute lastModifiedDate(Date lastModifiedDate) {
+    this.lastModifiedDate = lastModifiedDate;
+    return this;
+  }
+
+ /**
+   * Get parentid
+   * @return parentid
+  **/
+  public Long getParentid() {
+    return parentid;
+  }
+
+  public void setParentid(Long parentid) {
+    this.parentid = parentid;
+  }
+
+  public ServiceClassAttribute parentid(Long parentid) {
+    this.parentid = parentid;
+    return this;
+  }
+
+ /**
+   * Get serviceattributetypeid
+   * @return serviceattributetypeid
+  **/
+  public Long getServiceattributetypeid() {
+    return serviceattributetypeid;
+  }
+
+  public void setServiceattributetypeid(Long serviceattributetypeid) {
+    this.serviceattributetypeid = serviceattributetypeid;
+  }
+
+  public ServiceClassAttribute serviceattributetypeid(Long serviceattributetypeid) {
+    this.serviceattributetypeid = serviceattributetypeid;
+    return this;
+  }
+
+ /**
+   * Get serviceattributetypename
+   * @return serviceattributetypename
+  **/
+  public String getServiceattributetypename() {
+    return serviceattributetypename;
+  }
+
+  public void setServiceattributetypename(String serviceattributetypename) {
+    this.serviceattributetypename = serviceattributetypename;
+  }
+
+  public ServiceClassAttribute serviceattributetypename(String serviceattributetypename) {
+    this.serviceattributetypename = serviceattributetypename;
+    return this;
+  }
+
+ /**
+   * Get serviceclassid
+   * @return serviceclassid
+  **/
+  public Long getServiceclassid() {
+    return serviceclassid;
+  }
+
+  public void setServiceclassid(Long serviceclassid) {
+    this.serviceclassid = serviceclassid;
+  }
+
+  public ServiceClassAttribute serviceclassid(Long serviceclassid) {
+    this.serviceclassid = serviceclassid;
+    return this;
+  }
+
+ /**
+   * Get weight
+   * @return weight
+  **/
+  public Integer getWeight() {
+    return weight;
+  }
+
+  public void setWeight(Integer weight) {
+    this.weight = weight;
+  }
+
+  public ServiceClassAttribute weight(Integer weight) {
+    this.weight = weight;
+    return this;
+  }
+
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ServiceClassAttribute {\n");
+    
+    sb.append("    childid: ").append(toIndentedString(childid)).append("\n");
+    sb.append("    createdDate: ").append(toIndentedString(createdDate)).append("\n");
+    sb.append("    deleteddate: ").append(toIndentedString(deleteddate)).append("\n");
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    ischecklist: ").append(toIndentedString(ischecklist)).append("\n");
+    sb.append("    isenumeration: ").append(toIndentedString(isenumeration)).append("\n");
+    sb.append("    isfunctionalrequirement: ").append(toIndentedString(isfunctionalrequirement)).append("\n");
+    sb.append("    ismandatory: ").append(toIndentedString(ismandatory)).append("\n");
+    sb.append("    lastModifiedDate: ").append(toIndentedString(lastModifiedDate)).append("\n");
+    sb.append("    parentid: ").append(toIndentedString(parentid)).append("\n");
+    sb.append("    serviceattributetypeid: ").append(toIndentedString(serviceattributetypeid)).append("\n");
+    sb.append("    serviceattributetypename: ").append(toIndentedString(serviceattributetypename)).append("\n");
+    sb.append("    serviceclassid: ").append(toIndentedString(serviceclassid)).append("\n");
+    sb.append("    weight: ").append(toIndentedString(weight)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private static String toIndentedString(java.lang.Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/ServiceDevOpsInfoVO.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/ServiceDevOpsInfoVO.java
index 8d73230f96314517b785b18558300b5aa8770c44..17b9541a1d50606d77ad7586783ca2c6701652ca 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/ServiceDevOpsInfoVO.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/ServiceDevOpsInfoVO.java
@@ -1,102 +1,97 @@
-package eu.decideh2020.ACSmI.discovery.backend.client.model;
-
-
-import io.swagger.annotations.ApiModelProperty;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlType;
-import javax.xml.bind.annotation.XmlEnum;
-import javax.xml.bind.annotation.XmlEnumValue;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public class ServiceDevOpsInfoVO  {
-  
-  @ApiModelProperty(value = "")
-  private Integer numservices = null;
-
-  @ApiModelProperty(value = "")
-  private String providername = null;
-
-  @ApiModelProperty(value = "")
-  private String serviceclassname = null;
- /**
-   * Get numservices
-   * @return numservices
-  **/
-  @JsonProperty("numservices")
-  public Integer getNumservices() {
-    return numservices;
-  }
-
-  public void setNumservices(Integer numservices) {
-    this.numservices = numservices;
-  }
-
-  public ServiceDevOpsInfoVO numservices(Integer numservices) {
-    this.numservices = numservices;
-    return this;
-  }
-
- /**
-   * Get providername
-   * @return providername
-  **/
-  @JsonProperty("providername")
-  public String getProvidername() {
-    return providername;
-  }
-
-  public void setProvidername(String providername) {
-    this.providername = providername;
-  }
-
-  public ServiceDevOpsInfoVO providername(String providername) {
-    this.providername = providername;
-    return this;
-  }
-
- /**
-   * Get serviceclassname
-   * @return serviceclassname
-  **/
-  @JsonProperty("serviceclassname")
-  public String getServiceclassname() {
-    return serviceclassname;
-  }
-
-  public void setServiceclassname(String serviceclassname) {
-    this.serviceclassname = serviceclassname;
-  }
-
-  public ServiceDevOpsInfoVO serviceclassname(String serviceclassname) {
-    this.serviceclassname = serviceclassname;
-    return this;
-  }
-
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("class ServiceDevOpsInfoVO {\n");
-    
-    sb.append("    numservices: ").append(toIndentedString(numservices)).append("\n");
-    sb.append("    providername: ").append(toIndentedString(providername)).append("\n");
-    sb.append("    serviceclassname: ").append(toIndentedString(serviceclassname)).append("\n");
-    sb.append("}");
-    return sb.toString();
-  }
-
-  /**
-   * Convert the given object to string with each line indented by 4 spaces
-   * (except the first line).
-   */
-  private static String toIndentedString(java.lang.Object o) {
-    if (o == null) {
-      return "null";
-    }
-    return o.toString().replace("\n", "\n    ");
-  }
-}
-
+package eu.decideh2020.ACSmI.discovery.backend.client.model;
+
+
+import io.swagger.annotations.ApiModelProperty;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlEnum;
+import javax.xml.bind.annotation.XmlEnumValue;
+
+public class ServiceDevOpsInfoVO  {
+  
+  @ApiModelProperty(value = "")
+  private Integer numservices = null;
+  @ApiModelProperty(value = "")
+  private String providername = null;
+  @ApiModelProperty(value = "")
+  private String serviceclassname = null;
+
+ /**
+   * Get numservices
+   * @return numservices
+  **/
+  public Integer getNumservices() {
+    return numservices;
+  }
+
+  public void setNumservices(Integer numservices) {
+    this.numservices = numservices;
+  }
+
+  public ServiceDevOpsInfoVO numservices(Integer numservices) {
+    this.numservices = numservices;
+    return this;
+  }
+
+ /**
+   * Get providername
+   * @return providername
+  **/
+  public String getProvidername() {
+    return providername;
+  }
+
+  public void setProvidername(String providername) {
+    this.providername = providername;
+  }
+
+  public ServiceDevOpsInfoVO providername(String providername) {
+    this.providername = providername;
+    return this;
+  }
+
+ /**
+   * Get serviceclassname
+   * @return serviceclassname
+  **/
+  public String getServiceclassname() {
+    return serviceclassname;
+  }
+
+  public void setServiceclassname(String serviceclassname) {
+    this.serviceclassname = serviceclassname;
+  }
+
+  public ServiceDevOpsInfoVO serviceclassname(String serviceclassname) {
+    this.serviceclassname = serviceclassname;
+    return this;
+  }
+
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ServiceDevOpsInfoVO {\n");
+    
+    sb.append("    numservices: ").append(toIndentedString(numservices)).append("\n");
+    sb.append("    providername: ").append(toIndentedString(providername)).append("\n");
+    sb.append("    serviceclassname: ").append(toIndentedString(serviceclassname)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private static String toIndentedString(java.lang.Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/ServiceIncidence.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/ServiceIncidence.java
index b20f4733c7fd1fd74c588874d9b08e2b2e6c22af..63fd4f136ea151cb9ce276cd35c71724d7c4a747 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/ServiceIncidence.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/ServiceIncidence.java
@@ -1,191 +1,198 @@
-package eu.decideh2020.ACSmI.discovery.backend.client.model;
-
-import java.util.Date;
-
-import io.swagger.annotations.ApiModelProperty;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlType;
-import javax.xml.bind.annotation.XmlEnum;
-import javax.xml.bind.annotation.XmlEnumValue;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public class ServiceIncidence  {
-  
-  @ApiModelProperty(value = "")
-  private Date createdDate = null;
-
-  @ApiModelProperty(value = "")
-  private Date deleteddate = null;
-
-  @ApiModelProperty(required = true, value = "")
-  private String detail = null;
-
-  @ApiModelProperty(value = "")
-  private Long id = null;
-
-  @ApiModelProperty(value = "")
-  private Date lastModifiedDate = null;
-
-  @ApiModelProperty(required = true, value = "")
-  private Long serviceid = null;
-
-  @ApiModelProperty(required = true, value = "")
-  private String timestamp = null;
- /**
-   * Get createdDate
-   * @return createdDate
-  **/
-  @JsonProperty("createdDate")
-  public Date getCreatedDate() {
-    return createdDate;
-  }
-
-  public void setCreatedDate(Date createdDate) {
-    this.createdDate = createdDate;
-  }
-
-  public ServiceIncidence createdDate(Date createdDate) {
-    this.createdDate = createdDate;
-    return this;
-  }
-
- /**
-   * Get deleteddate
-   * @return deleteddate
-  **/
-  @JsonProperty("deleteddate")
-  public Date getDeleteddate() {
-    return deleteddate;
-  }
-
-  public void setDeleteddate(Date deleteddate) {
-    this.deleteddate = deleteddate;
-  }
-
-  public ServiceIncidence deleteddate(Date deleteddate) {
-    this.deleteddate = deleteddate;
-    return this;
-  }
-
- /**
-   * Get detail
-   * @return detail
-  **/
-  @JsonProperty("detail")
-  public String getDetail() {
-    return detail;
-  }
-
-  public void setDetail(String detail) {
-    this.detail = detail;
-  }
-
-  public ServiceIncidence detail(String detail) {
-    this.detail = detail;
-    return this;
-  }
-
- /**
-   * Get id
-   * @return id
-  **/
-  @JsonProperty("id")
-  public Long getId() {
-    return id;
-  }
-
-  public void setId(Long id) {
-    this.id = id;
-  }
-
-  public ServiceIncidence id(Long id) {
-    this.id = id;
-    return this;
-  }
-
- /**
-   * Get lastModifiedDate
-   * @return lastModifiedDate
-  **/
-  @JsonProperty("lastModifiedDate")
-  public Date getLastModifiedDate() {
-    return lastModifiedDate;
-  }
-
-  public void setLastModifiedDate(Date lastModifiedDate) {
-    this.lastModifiedDate = lastModifiedDate;
-  }
-
-  public ServiceIncidence lastModifiedDate(Date lastModifiedDate) {
-    this.lastModifiedDate = lastModifiedDate;
-    return this;
-  }
-
- /**
-   * Get serviceid
-   * @return serviceid
-  **/
-  @JsonProperty("serviceid")
-  public Long getServiceid() {
-    return serviceid;
-  }
-
-  public void setServiceid(Long serviceid) {
-    this.serviceid = serviceid;
-  }
-
-  public ServiceIncidence serviceid(Long serviceid) {
-    this.serviceid = serviceid;
-    return this;
-  }
-
- /**
-   * Get timestamp
-   * @return timestamp
-  **/
-  @JsonProperty("timestamp")
-  public String getTimestamp() {
-    return timestamp;
-  }
-
-  public void setTimestamp(String timestamp) {
-    this.timestamp = timestamp;
-  }
-
-  public ServiceIncidence timestamp(String timestamp) {
-    this.timestamp = timestamp;
-    return this;
-  }
-
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("class ServiceIncidence {\n");
-    
-    sb.append("    createdDate: ").append(toIndentedString(createdDate)).append("\n");
-    sb.append("    deleteddate: ").append(toIndentedString(deleteddate)).append("\n");
-    sb.append("    detail: ").append(toIndentedString(detail)).append("\n");
-    sb.append("    id: ").append(toIndentedString(id)).append("\n");
-    sb.append("    lastModifiedDate: ").append(toIndentedString(lastModifiedDate)).append("\n");
-    sb.append("    serviceid: ").append(toIndentedString(serviceid)).append("\n");
-    sb.append("    timestamp: ").append(toIndentedString(timestamp)).append("\n");
-    sb.append("}");
-    return sb.toString();
-  }
-
-  /**
-   * Convert the given object to string with each line indented by 4 spaces
-   * (except the first line).
-   */
-  private static String toIndentedString(java.lang.Object o) {
-    if (o == null) {
-      return "null";
-    }
-    return o.toString().replace("\n", "\n    ");
-  }
-}
-
+package eu.decideh2020.ACSmI.discovery.backend.client.model;
+
+import java.util.Date;
+
+import io.swagger.annotations.ApiModelProperty;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlEnum;
+import javax.xml.bind.annotation.XmlEnumValue;
+
+public class ServiceIncidence  {
+  
+  @ApiModelProperty(value = "")
+  private Date createdDate = null;
+  @ApiModelProperty(value = "")
+  private Date deleteddate = null;
+  @ApiModelProperty(required = true, value = "")
+  private String detail = null;
+  @ApiModelProperty(value = "")
+  private Long id = null;
+  @ApiModelProperty(value = "")
+  private Date lastModifiedDate = null;
+  @ApiModelProperty(value = "")
+  private String realmetricvalue = null;
+  @ApiModelProperty(required = true, value = "")
+  private Long serviceid = null;
+  @ApiModelProperty(required = true, value = "")
+  private Long timestamp = null;
+
+ /**
+   * Get createdDate
+   * @return createdDate
+  **/
+  public Date getCreatedDate() {
+    return createdDate;
+  }
+
+  public void setCreatedDate(Date createdDate) {
+    this.createdDate = createdDate;
+  }
+
+  public ServiceIncidence createdDate(Date createdDate) {
+    this.createdDate = createdDate;
+    return this;
+  }
+
+ /**
+   * Get deleteddate
+   * @return deleteddate
+  **/
+  public Date getDeleteddate() {
+    return deleteddate;
+  }
+
+  public void setDeleteddate(Date deleteddate) {
+    this.deleteddate = deleteddate;
+  }
+
+  public ServiceIncidence deleteddate(Date deleteddate) {
+    this.deleteddate = deleteddate;
+    return this;
+  }
+
+ /**
+   * Get detail
+   * @return detail
+  **/
+  public String getDetail() {
+    return detail;
+  }
+
+  public void setDetail(String detail) {
+    this.detail = detail;
+  }
+
+  public ServiceIncidence detail(String detail) {
+    this.detail = detail;
+    return this;
+  }
+
+ /**
+   * Get id
+   * @return id
+  **/
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public ServiceIncidence id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+ /**
+   * Get lastModifiedDate
+   * @return lastModifiedDate
+  **/
+  public Date getLastModifiedDate() {
+    return lastModifiedDate;
+  }
+
+  public void setLastModifiedDate(Date lastModifiedDate) {
+    this.lastModifiedDate = lastModifiedDate;
+  }
+
+  public ServiceIncidence lastModifiedDate(Date lastModifiedDate) {
+    this.lastModifiedDate = lastModifiedDate;
+    return this;
+  }
+
+ /**
+   * Get realmetricvalue
+   * @return realmetricvalue
+  **/
+  public String getRealmetricvalue() {
+    return realmetricvalue;
+  }
+
+  public void setRealmetricvalue(String realmetricvalue) {
+    this.realmetricvalue = realmetricvalue;
+  }
+
+  public ServiceIncidence realmetricvalue(String realmetricvalue) {
+    this.realmetricvalue = realmetricvalue;
+    return this;
+  }
+
+ /**
+   * Get serviceid
+   * @return serviceid
+  **/
+  public Long getServiceid() {
+    return serviceid;
+  }
+
+  public void setServiceid(Long serviceid) {
+    this.serviceid = serviceid;
+  }
+
+  public ServiceIncidence serviceid(Long serviceid) {
+    this.serviceid = serviceid;
+    return this;
+  }
+
+ /**
+   * Get timestamp
+   * @return timestamp
+  **/
+  public Long getTimestamp() {
+    return timestamp;
+  }
+
+  public void setTimestamp(Long timestamp) {
+    this.timestamp = timestamp;
+  }
+
+  public ServiceIncidence timestamp(Long timestamp) {
+    this.timestamp = timestamp;
+    return this;
+  }
+
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ServiceIncidence {\n");
+    
+    sb.append("    createdDate: ").append(toIndentedString(createdDate)).append("\n");
+    sb.append("    deleteddate: ").append(toIndentedString(deleteddate)).append("\n");
+    sb.append("    detail: ").append(toIndentedString(detail)).append("\n");
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    lastModifiedDate: ").append(toIndentedString(lastModifiedDate)).append("\n");
+    sb.append("    realmetricvalue: ").append(toIndentedString(realmetricvalue)).append("\n");
+    sb.append("    serviceid: ").append(toIndentedString(serviceid)).append("\n");
+    sb.append("    timestamp: ").append(toIndentedString(timestamp)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private static String toIndentedString(java.lang.Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/ServiceNFRInfoVO.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/ServiceNFRInfoVO.java
index d95877307bfc8423f66301da78c0ac37f51478b3..2798dc58353bc9db82752e0148391f402b3f98b5 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/ServiceNFRInfoVO.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/src/gen/java/eu/decideh2020/ACSmI/discovery/backend/client/model/ServiceNFRInfoVO.java
@@ -1,168 +1,157 @@
-package eu.decideh2020.ACSmI.discovery.backend.client.model;
-
-
-import io.swagger.annotations.ApiModelProperty;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlType;
-import javax.xml.bind.annotation.XmlEnum;
-import javax.xml.bind.annotation.XmlEnumValue;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public class ServiceNFRInfoVO  {
-  
-  @ApiModelProperty(value = "")
-  private String nfrmetric = null;
-
-  @ApiModelProperty(value = "")
-  private String nfrname = null;
-
-  @ApiModelProperty(value = "")
-  private String nfrvalue = null;
-
-  @ApiModelProperty(value = "")
-  private String serviceclassname = null;
-
-  @ApiModelProperty(value = "")
-  private Long serviceid = null;
-
-  @ApiModelProperty(value = "")
-  private String servicename = null;
- /**
-   * Get nfrmetric
-   * @return nfrmetric
-  **/
-  @JsonProperty("nfrmetric")
-  public String getNfrmetric() {
-    return nfrmetric;
-  }
-
-  public void setNfrmetric(String nfrmetric) {
-    this.nfrmetric = nfrmetric;
-  }
-
-  public ServiceNFRInfoVO nfrmetric(String nfrmetric) {
-    this.nfrmetric = nfrmetric;
-    return this;
-  }
-
- /**
-   * Get nfrname
-   * @return nfrname
-  **/
-  @JsonProperty("nfrname")
-  public String getNfrname() {
-    return nfrname;
-  }
-
-  public void setNfrname(String nfrname) {
-    this.nfrname = nfrname;
-  }
-
-  public ServiceNFRInfoVO nfrname(String nfrname) {
-    this.nfrname = nfrname;
-    return this;
-  }
-
- /**
-   * Get nfrvalue
-   * @return nfrvalue
-  **/
-  @JsonProperty("nfrvalue")
-  public String getNfrvalue() {
-    return nfrvalue;
-  }
-
-  public void setNfrvalue(String nfrvalue) {
-    this.nfrvalue = nfrvalue;
-  }
-
-  public ServiceNFRInfoVO nfrvalue(String nfrvalue) {
-    this.nfrvalue = nfrvalue;
-    return this;
-  }
-
- /**
-   * Get serviceclassname
-   * @return serviceclassname
-  **/
-  @JsonProperty("serviceclassname")
-  public String getServiceclassname() {
-    return serviceclassname;
-  }
-
-  public void setServiceclassname(String serviceclassname) {
-    this.serviceclassname = serviceclassname;
-  }
-
-  public ServiceNFRInfoVO serviceclassname(String serviceclassname) {
-    this.serviceclassname = serviceclassname;
-    return this;
-  }
-
- /**
-   * Get serviceid
-   * @return serviceid
-  **/
-  @JsonProperty("serviceid")
-  public Long getServiceid() {
-    return serviceid;
-  }
-
-  public void setServiceid(Long serviceid) {
-    this.serviceid = serviceid;
-  }
-
-  public ServiceNFRInfoVO serviceid(Long serviceid) {
-    this.serviceid = serviceid;
-    return this;
-  }
-
- /**
-   * Get servicename
-   * @return servicename
-  **/
-  @JsonProperty("servicename")
-  public String getServicename() {
-    return servicename;
-  }
-
-  public void setServicename(String servicename) {
-    this.servicename = servicename;
-  }
-
-  public ServiceNFRInfoVO servicename(String servicename) {
-    this.servicename = servicename;
-    return this;
-  }
-
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("class ServiceNFRInfoVO {\n");
-    
-    sb.append("    nfrmetric: ").append(toIndentedString(nfrmetric)).append("\n");
-    sb.append("    nfrname: ").append(toIndentedString(nfrname)).append("\n");
-    sb.append("    nfrvalue: ").append(toIndentedString(nfrvalue)).append("\n");
-    sb.append("    serviceclassname: ").append(toIndentedString(serviceclassname)).append("\n");
-    sb.append("    serviceid: ").append(toIndentedString(serviceid)).append("\n");
-    sb.append("    servicename: ").append(toIndentedString(servicename)).append("\n");
-    sb.append("}");
-    return sb.toString();
-  }
-
-  /**
-   * Convert the given object to string with each line indented by 4 spaces
-   * (except the first line).
-   */
-  private static String toIndentedString(java.lang.Object o) {
-    if (o == null) {
-      return "null";
-    }
-    return o.toString().replace("\n", "\n    ");
-  }
-}
-
+package eu.decideh2020.ACSmI.discovery.backend.client.model;
+
+
+import io.swagger.annotations.ApiModelProperty;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlEnum;
+import javax.xml.bind.annotation.XmlEnumValue;
+
+public class ServiceNFRInfoVO  {
+  
+  @ApiModelProperty(value = "")
+  private String nfrmetric = null;
+  @ApiModelProperty(value = "")
+  private String nfrname = null;
+  @ApiModelProperty(value = "")
+  private String nfrvalue = null;
+  @ApiModelProperty(value = "")
+  private String serviceclassname = null;
+  @ApiModelProperty(value = "")
+  private Long serviceid = null;
+  @ApiModelProperty(value = "")
+  private String servicename = null;
+
+ /**
+   * Get nfrmetric
+   * @return nfrmetric
+  **/
+  public String getNfrmetric() {
+    return nfrmetric;
+  }
+
+  public void setNfrmetric(String nfrmetric) {
+    this.nfrmetric = nfrmetric;
+  }
+
+  public ServiceNFRInfoVO nfrmetric(String nfrmetric) {
+    this.nfrmetric = nfrmetric;
+    return this;
+  }
+
+ /**
+   * Get nfrname
+   * @return nfrname
+  **/
+  public String getNfrname() {
+    return nfrname;
+  }
+
+  public void setNfrname(String nfrname) {
+    this.nfrname = nfrname;
+  }
+
+  public ServiceNFRInfoVO nfrname(String nfrname) {
+    this.nfrname = nfrname;
+    return this;
+  }
+
+ /**
+   * Get nfrvalue
+   * @return nfrvalue
+  **/
+  public String getNfrvalue() {
+    return nfrvalue;
+  }
+
+  public void setNfrvalue(String nfrvalue) {
+    this.nfrvalue = nfrvalue;
+  }
+
+  public ServiceNFRInfoVO nfrvalue(String nfrvalue) {
+    this.nfrvalue = nfrvalue;
+    return this;
+  }
+
+ /**
+   * Get serviceclassname
+   * @return serviceclassname
+  **/
+  public String getServiceclassname() {
+    return serviceclassname;
+  }
+
+  public void setServiceclassname(String serviceclassname) {
+    this.serviceclassname = serviceclassname;
+  }
+
+  public ServiceNFRInfoVO serviceclassname(String serviceclassname) {
+    this.serviceclassname = serviceclassname;
+    return this;
+  }
+
+ /**
+   * Get serviceid
+   * @return serviceid
+  **/
+  public Long getServiceid() {
+    return serviceid;
+  }
+
+  public void setServiceid(Long serviceid) {
+    this.serviceid = serviceid;
+  }
+
+  public ServiceNFRInfoVO serviceid(Long serviceid) {
+    this.serviceid = serviceid;
+    return this;
+  }
+
+ /**
+   * Get servicename
+   * @return servicename
+  **/
+  public String getServicename() {
+    return servicename;
+  }
+
+  public void setServicename(String servicename) {
+    this.servicename = servicename;
+  }
+
+  public ServiceNFRInfoVO servicename(String servicename) {
+    this.servicename = servicename;
+    return this;
+  }
+
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ServiceNFRInfoVO {\n");
+    
+    sb.append("    nfrmetric: ").append(toIndentedString(nfrmetric)).append("\n");
+    sb.append("    nfrname: ").append(toIndentedString(nfrname)).append("\n");
+    sb.append("    nfrvalue: ").append(toIndentedString(nfrvalue)).append("\n");
+    sb.append("    serviceclassname: ").append(toIndentedString(serviceclassname)).append("\n");
+    sb.append("    serviceid: ").append(toIndentedString(serviceid)).append("\n");
+    sb.append("    servicename: ").append(toIndentedString(servicename)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private static String toIndentedString(java.lang.Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/swagger.json b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/swagger.json
index 35eddfcf58473523a96b756323c104d5cd2faf0b..666a239a27fd34e83b8c255c0d453530246df66f 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/swagger.json
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client/swagger.json
@@ -1 +1 @@
-{"swagger":"2.0","info":{"description":"acsmiservices API documentation","version":"0.0.1","title":"acsmiservices API","contact":{},"license":{}},"host":"localhost:12080","basePath":"/acsmiservices","tags":[{"name":"service-class-resource","description":"Service Class Resource"},{"name":"profile-info-resource","description":"Profile Info Resource"},{"name":"definition-resource","description":"Definition Resource"},{"name":"service-class-attribute-resource","description":"Service Class Attribute Resource"},{"name":"service-attribute-type-resource","description":"Service Attribute Type Resource"},{"name":"service-resource","description":"Service Resource"},{"name":"service-attribute-value-resource","description":"Service Attribute Value Resource"},{"name":"service-incidence-resource","description":"Service Incidence Resource"}],"paths":{"/api/definitions":{"get":{"tags":["definition-resource"],"summary":"getAllDefinitions","operationId":"getAllDefinitionsUsingGET","consumes":["application/json"],"produces":["*/*"],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/Definition"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/definitions/{id}":{"get":{"tags":["definition-resource"],"summary":"getDefinition","operationId":"getDefinitionUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"id","in":"path","description":"id","required":true,"type":"integer","format":"int64"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/Definition"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/profile-info":{"get":{"tags":["profile-info-resource"],"summary":"getActiveProfiles","operationId":"getActiveProfilesUsingGET","consumes":["application/json"],"produces":["*/*"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/ProfileInfoVM"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/service-attribute-types":{"get":{"tags":["service-attribute-type-resource"],"summary":"findServiceAttributeTypes","operationId":"findServiceAttributeTypesUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"classid","in":"query","description":"classid","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/ServiceAttributeType"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/service-attribute-types/{id}":{"get":{"tags":["service-attribute-type-resource"],"summary":"getServiceAttributeType","operationId":"getServiceAttributeTypeUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"id","in":"path","description":"id","required":true,"type":"integer","format":"int64"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/ServiceAttributeType"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/service-attribute-values":{"post":{"tags":["service-attribute-value-resource"],"summary":"createServiceAttributeValue","operationId":"createServiceAttributeValueUsingPOST","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"serviceAttributeValue","description":"serviceAttributeValue","required":true,"schema":{"$ref":"#/definitions/ServiceAttributeValue"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/ServiceAttributeValue"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}},"put":{"tags":["service-attribute-value-resource"],"summary":"updateServiceAttributeValue","operationId":"updateServiceAttributeValueUsingPUT","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"serviceAttributeValue","description":"serviceAttributeValue","required":true,"schema":{"$ref":"#/definitions/ServiceAttributeValue"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/ServiceAttributeValue"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/service-attribute-values/{id}":{"get":{"tags":["service-attribute-value-resource"],"summary":"getServiceAttributeValue","operationId":"getServiceAttributeValueUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"id","in":"path","description":"id","required":true,"type":"integer","format":"int64"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/ServiceAttributeValue"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}},"delete":{"tags":["service-attribute-value-resource"],"summary":"deleteServiceAttributeValue","operationId":"deleteServiceAttributeValueUsingDELETE","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"id","in":"path","description":"id","required":true,"type":"integer","format":"int64"},{"name":"forcedelete","in":"query","description":"forcedelete","required":true,"type":"string"}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized"},"204":{"description":"No Content"},"403":{"description":"Forbidden"}}}},"/api/service-class-attributes":{"get":{"tags":["service-class-attribute-resource"],"summary":"getAllServiceClassAttributes","operationId":"getAllServiceClassAttributesUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"classid","in":"query","description":"classid","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/ServiceClassAttribute"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/service-class-attributes/{id}":{"get":{"tags":["service-class-attribute-resource"],"summary":"getServiceClassAttribute","operationId":"getServiceClassAttributeUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"id","in":"path","description":"id","required":true,"type":"integer","format":"int64"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/ServiceClassAttribute"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/service-classes":{"get":{"tags":["service-class-resource"],"summary":"getAllServiceClasses","operationId":"getAllServiceClassesUsingGET","consumes":["application/json"],"produces":["*/*"],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/ServiceClass"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/service-classes/full":{"get":{"tags":["service-class-resource"],"summary":"getAllServiceClassesFullInfo","operationId":"getAllServiceClassesFullInfoUsingGET","consumes":["application/json"],"produces":["*/*"],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/ServiceClass"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/service-classes/{id}":{"get":{"tags":["service-class-resource"],"summary":"getServiceClass","operationId":"getServiceClassUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"id","in":"path","description":"id","required":true,"type":"integer","format":"int64"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/ServiceClass"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/service-incidences":{"post":{"tags":["service-incidence-resource"],"summary":"createServiceIncidence","operationId":"createServiceIncidenceUsingPOST","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"serviceIncidence","description":"serviceIncidence","required":true,"schema":{"$ref":"#/definitions/ServiceIncidence"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/ServiceIncidence"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/service-incidences/{id}":{"get":{"tags":["service-incidence-resource"],"summary":"getAllServiceIncidences","operationId":"getAllServiceIncidencesUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"id","in":"path","description":"id","required":true,"type":"integer","format":"int64"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/ServiceIncidence"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/services":{"get":{"tags":["service-resource"],"summary":"getAllServices","operationId":"getAllServicesUsingGET","consumes":["application/json"],"produces":["*/*"],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/Service"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}},"post":{"tags":["service-resource"],"summary":"createService","operationId":"createServiceUsingPOST","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"service","description":"service","required":true,"schema":{"$ref":"#/definitions/Service"}},{"name":"attributes","in":"query","description":"attributes","required":true,"type":"array","items":{"type":"string"},"collectionFormat":"multi"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/Service"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}},"put":{"tags":["service-resource"],"summary":"updateService","operationId":"updateServiceUsingPUT","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"service","description":"service","required":true,"schema":{"$ref":"#/definitions/Service"}},{"name":"attributes","in":"query","description":"attributes","required":true,"type":"array","items":{"type":"string"},"collectionFormat":"multi"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/Service"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/services/cspservices":{"get":{"tags":["service-resource"],"summary":"findServicesByCSP","operationId":"findServicesByCSPUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"cspname","in":"query","description":"cspname","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/Service"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/services/devops":{"get":{"tags":["service-resource"],"summary":"getDevOpsInfo","operationId":"getDevOpsInfoUsingGET","consumes":["application/json"],"produces":["*/*"],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/ServiceDevOpsInfoVO"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/services/find":{"get":{"tags":["service-resource"],"summary":"findServices","operationId":"findServicesUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"filter","in":"query","description":"filter","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/Service"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/services/nfr":{"get":{"tags":["service-resource"],"summary":"getServiceNfrInfo","operationId":"getServiceNfrInfoUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"serviceids","in":"query","description":"serviceids","required":true,"type":"array","items":{"type":"integer","format":"int64"},"collectionFormat":"multi"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/ServiceNFRInfoVO"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/services/optimus":{"get":{"tags":["service-resource"],"summary":"getOptimusInfo","operationId":"getOptimusInfoUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"serviceids","in":"query","description":"serviceids","required":true,"type":"array","items":{"type":"integer","format":"int64"},"collectionFormat":"multi"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/Service"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/services/{id}":{"get":{"tags":["service-resource"],"summary":"getService","operationId":"getServiceUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"id","in":"path","description":"id","required":true,"type":"integer","format":"int64"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/Service"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}},"delete":{"tags":["service-resource"],"summary":"deleteService","operationId":"deleteServiceUsingDELETE","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"id","in":"path","description":"id","required":true,"type":"integer","format":"int64"},{"name":"forcedelete","in":"query","description":"forcedelete","required":true,"type":"string"}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized"},"204":{"description":"No Content"},"403":{"description":"Forbidden"}}}}},"definitions":{"ServiceClass":{"type":"object","required":["serviceclassname"],"properties":{"commonattributes":{"type":"array","items":{"$ref":"#/definitions/AttributeVO"}},"createdDate":{"type":"string","format":"date-time"},"deleteddate":{"type":"string","format":"date-time"},"functionalattributes":{"type":"array","items":{"$ref":"#/definitions/AttributeVO"}},"id":{"type":"integer","format":"int64"},"lastModifiedDate":{"type":"string","format":"date-time"},"nonfunctionalattributes":{"type":"array","items":{"$ref":"#/definitions/AttributeVO"}},"serviceclassname":{"type":"string","minLength":0,"maxLength":20}}},"ProfileInfoVM":{"type":"object","properties":{"activeProfiles":{"type":"array","items":{"type":"string"}},"ribbonEnv":{"type":"string"}}},"ServiceAttributeValue":{"type":"object","required":["serviceattributetypeid","serviceid"],"properties":{"checklistvalue":{"type":"string","minLength":0,"maxLength":40},"createdDate":{"type":"string","format":"date-time"},"deleteddate":{"type":"string","format":"date-time"},"id":{"type":"integer","format":"int64"},"lastModifiedDate":{"type":"string","format":"date-time"},"serviceattributetypeid":{"type":"integer","format":"int64"},"serviceattributevalue":{"type":"string","minLength":0,"maxLength":50},"serviceid":{"type":"integer","format":"int64"},"unitvalue":{"type":"string","minLength":0,"maxLength":10}}},"ServiceAttributeType":{"type":"object","required":["ischecklist","iscommon","isenumeration","isfunctionalrequirement","name"],"properties":{"checklistevalrule":{"type":"string","minLength":0,"maxLength":70},"childid":{"type":"integer","format":"int64"},"createdDate":{"type":"string","format":"date-time"},"deleteddate":{"type":"string","format":"date-time"},"id":{"type":"integer","format":"int64"},"ischecklist":{"type":"boolean"},"iscommon":{"type":"boolean"},"isenumeration":{"type":"boolean"},"isfunctionalrequirement":{"type":"boolean"},"lastModifiedDate":{"type":"string","format":"date-time"},"name":{"type":"string","minLength":0,"maxLength":50},"nfrname":{"type":"string","minLength":0,"maxLength":20},"parentid":{"type":"integer","format":"int64"},"unitfactor":{"type":"string","minLength":0,"maxLength":30},"unitrule":{"type":"string","minLength":0,"maxLength":2},"units":{"type":"string","minLength":0,"maxLength":20}}},"ServiceClassAttribute":{"type":"object","required":["ismandatory","serviceattributetypeid","serviceclassid","weight"],"properties":{"childid":{"type":"integer","format":"int64"},"createdDate":{"type":"string","format":"date-time"},"deleteddate":{"type":"string","format":"date-time"},"id":{"type":"integer","format":"int64"},"ischecklist":{"type":"boolean"},"isenumeration":{"type":"boolean"},"isfunctionalrequirement":{"type":"boolean"},"ismandatory":{"type":"boolean"},"lastModifiedDate":{"type":"string","format":"date-time"},"parentid":{"type":"integer","format":"int64"},"serviceattributetypeid":{"type":"integer","format":"int64"},"serviceattributetypename":{"type":"string"},"serviceclassid":{"type":"integer","format":"int64"},"weight":{"type":"integer","format":"int32"}}},"AttributeVO":{"type":"object","properties":{"checklistevalrule":{"type":"string"},"checklistvalue":{"type":"string"},"childid":{"type":"integer","format":"int64"},"classattributeid":{"type":"integer","format":"int64"},"human":{"type":"string"},"ischecklist":{"type":"boolean"},"iscommon":{"type":"boolean"},"isenumeration":{"type":"boolean"},"isfunctionalrequirement":{"type":"boolean"},"ismandatory":{"type":"boolean"},"name":{"type":"string"},"nfrname":{"type":"string"},"parentid":{"type":"integer","format":"int64"},"typeid":{"type":"integer","format":"int64"},"unitfactor":{"type":"string"},"unitrule":{"type":"string"},"units":{"type":"string"},"unitvalue":{"type":"string"},"value":{"type":"string"},"valueid":{"type":"integer","format":"int64"},"weight":{"type":"integer","format":"int32"}}},"Definition":{"type":"object","required":["code","ischeckoption","ismainattribute","value"],"properties":{"code":{"type":"string","minLength":0,"maxLength":4},"createdDate":{"type":"string","format":"date-time"},"deleteddate":{"type":"string","format":"date-time"},"id":{"type":"integer","format":"int64"},"ischeckoption":{"type":"boolean"},"ismainattribute":{"type":"boolean"},"lastModifiedDate":{"type":"string","format":"date-time"},"typeid":{"type":"integer","format":"int64"},"value":{"type":"string","minLength":0,"maxLength":60}}},"ServiceIncidence":{"type":"object","required":["detail","serviceid","timestamp"],"properties":{"createdDate":{"type":"string","format":"date-time"},"deleteddate":{"type":"string","format":"date-time"},"detail":{"type":"string","minLength":0,"maxLength":60},"id":{"type":"integer","format":"int64"},"lastModifiedDate":{"type":"string","format":"date-time"},"serviceid":{"type":"integer","format":"int64"},"timestamp":{"type":"string","format":"date-time"}}},"Service":{"type":"object","required":["serviceclassid","servicename"],"properties":{"attributes":{"type":"array","items":{"$ref":"#/definitions/AttributeVO"}},"createdDate":{"type":"string","format":"date-time"},"deleteddate":{"type":"string","format":"date-time"},"firstcontract":{"type":"array","items":{"type":"string","format":"byte"}},"id":{"type":"integer","format":"int64"},"incidences":{"type":"array","items":{"$ref":"#/definitions/ServiceIncidence"}},"lastModifiedDate":{"type":"string","format":"date-time"},"match":{"type":"number","format":"double"},"matchingattributelist":{"type":"array","items":{"type":"string"}},"secondcontract":{"type":"array","items":{"type":"string","format":"byte"}},"serviceclassid":{"type":"integer","format":"int64"},"serviceclassname":{"type":"string"},"servicename":{"type":"string","minLength":0,"maxLength":70},"thirdcontract":{"type":"array","items":{"type":"string","format":"byte"}}}},"ServiceNFRInfoVO":{"type":"object","properties":{"nfrmetric":{"type":"string"},"nfrname":{"type":"string"},"nfrvalue":{"type":"string"},"serviceclassname":{"type":"string"},"serviceid":{"type":"integer","format":"int64"},"servicename":{"type":"string"}}},"ServiceDevOpsInfoVO":{"type":"object","properties":{"numservices":{"type":"integer","format":"int32"},"providername":{"type":"string"},"serviceclassname":{"type":"string"}}}}}
\ No newline at end of file
+{"swagger":"2.0","info":{"description":"acsmiservices API documentation","version":"0.0.1","title":"acsmiservices API","contact":{},"license":{}},"host":"localhost:8080","basePath":"/acsmiservices","tags":[{"name":"legal-question-resource","description":"Legal Question Resource"},{"name":"service-class-resource","description":"Service Class Resource"},{"name":"legal-answer-resource","description":"Legal Answer Resource"},{"name":"profile-info-resource","description":"Profile Info Resource"},{"name":"definition-resource","description":"Definition Resource"},{"name":"service-class-attribute-resource","description":"Service Class Attribute Resource"},{"name":"legal-questionnaire-resource","description":"Legal Questionnaire Resource"},{"name":"legal-topic-resource","description":"Legal Topic Resource"},{"name":"service-attribute-type-resource","description":"Service Attribute Type Resource"},{"name":"service-resource","description":"Service Resource"},{"name":"service-attribute-value-resource","description":"Service Attribute Value Resource"},{"name":"service-incidence-resource","description":"Service Incidence Resource"}],"paths":{"/api/definitions":{"get":{"tags":["definition-resource"],"summary":"getAllDefinitions","operationId":"getAllDefinitionsUsingGET","consumes":["application/json"],"produces":["*/*"],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/Definition"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/definitions-by-attribute":{"get":{"tags":["definition-resource"],"summary":"getDefinitionsByAttribute","operationId":"getDefinitionsByAttributeUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"typeid","in":"query","description":"typeid","required":true,"type":"integer","format":"int64"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/Definition"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/definitions/{id}":{"get":{"tags":["definition-resource"],"summary":"getDefinition","operationId":"getDefinitionUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"id","in":"path","description":"id","required":true,"type":"integer","format":"int64"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/Definition"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/legal-answers":{"get":{"tags":["legal-answer-resource"],"summary":"getAllLegalAnswers","operationId":"getAllLegalAnswersUsingGET","consumes":["application/json"],"produces":["*/*"],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/LegalAnswer"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/legal-questionnaires":{"get":{"tags":["legal-questionnaire-resource"],"summary":"getLegalQuestionnaire","operationId":"getLegalQuestionnaireUsingGET","consumes":["application/json"],"produces":["*/*"],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/LegalQuestionnaire"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/legal-questionnaires/full":{"get":{"tags":["legal-questionnaire-resource"],"summary":"getFullLegalQuestionnaire","operationId":"getFullLegalQuestionnaireUsingGET","consumes":["application/json"],"produces":["*/*"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/LegalQuestionnaire"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/legal-questions":{"get":{"tags":["legal-question-resource"],"summary":"getAllLegalQuestions","operationId":"getAllLegalQuestionsUsingGET","consumes":["application/json"],"produces":["*/*"],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/LegalQuestion"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/legal-topics":{"get":{"tags":["legal-topic-resource"],"summary":"getAllLegalTopics","operationId":"getAllLegalTopicsUsingGET","consumes":["application/json"],"produces":["*/*"],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/LegalTopic"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/profile-info":{"get":{"tags":["profile-info-resource"],"summary":"getActiveProfiles","operationId":"getActiveProfilesUsingGET","consumes":["application/json"],"produces":["*/*"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/ProfileInfoVM"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/service-attribute-types":{"get":{"tags":["service-attribute-type-resource"],"summary":"findServiceAttributeTypes","operationId":"findServiceAttributeTypesUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"classid","in":"query","description":"classid","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/ServiceAttributeType"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/service-attribute-types/{id}":{"get":{"tags":["service-attribute-type-resource"],"summary":"getServiceAttributeType","operationId":"getServiceAttributeTypeUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"id","in":"path","description":"id","required":true,"type":"integer","format":"int64"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/ServiceAttributeType"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/service-attribute-values":{"post":{"tags":["service-attribute-value-resource"],"summary":"createServiceAttributeValue","operationId":"createServiceAttributeValueUsingPOST","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"serviceAttributeValue","description":"serviceAttributeValue","required":true,"schema":{"$ref":"#/definitions/ServiceAttributeValue"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/ServiceAttributeValue"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}},"put":{"tags":["service-attribute-value-resource"],"summary":"updateServiceAttributeValue","operationId":"updateServiceAttributeValueUsingPUT","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"serviceAttributeValue","description":"serviceAttributeValue","required":true,"schema":{"$ref":"#/definitions/ServiceAttributeValue"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/ServiceAttributeValue"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/service-attribute-values/{id}":{"get":{"tags":["service-attribute-value-resource"],"summary":"getServiceAttributeValue","operationId":"getServiceAttributeValueUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"id","in":"path","description":"id","required":true,"type":"integer","format":"int64"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/ServiceAttributeValue"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}},"delete":{"tags":["service-attribute-value-resource"],"summary":"deleteServiceAttributeValue","operationId":"deleteServiceAttributeValueUsingDELETE","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"id","in":"path","description":"id","required":true,"type":"integer","format":"int64"},{"name":"forcedelete","in":"query","description":"forcedelete","required":true,"type":"string"}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized"},"204":{"description":"No Content"},"403":{"description":"Forbidden"}}}},"/api/service-class-attributes":{"get":{"tags":["service-class-attribute-resource"],"summary":"getAllServiceClassAttributes","operationId":"getAllServiceClassAttributesUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"classid","in":"query","description":"classid","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/ServiceClassAttribute"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/service-class-attributes/{id}":{"get":{"tags":["service-class-attribute-resource"],"summary":"getServiceClassAttribute","operationId":"getServiceClassAttributeUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"id","in":"path","description":"id","required":true,"type":"integer","format":"int64"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/ServiceClassAttribute"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/service-classes":{"get":{"tags":["service-class-resource"],"summary":"getAllServiceClasses","operationId":"getAllServiceClassesUsingGET","consumes":["application/json"],"produces":["*/*"],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/ServiceClass"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/service-classes/full":{"get":{"tags":["service-class-resource"],"summary":"getAllServiceClassesFullInfo","operationId":"getAllServiceClassesFullInfoUsingGET","consumes":["application/json"],"produces":["*/*"],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/ServiceClass"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/service-classes/{id}":{"get":{"tags":["service-class-resource"],"summary":"getServiceClass","operationId":"getServiceClassUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"id","in":"path","description":"id","required":true,"type":"integer","format":"int64"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/ServiceClass"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/service-incidences":{"post":{"tags":["service-incidence-resource"],"summary":"createServiceIncidence","operationId":"createServiceIncidenceUsingPOST","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"serviceIncidence","description":"serviceIncidence","required":true,"schema":{"$ref":"#/definitions/ServiceIncidence"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/ServiceIncidence"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/service-incidences/{id}":{"get":{"tags":["service-incidence-resource"],"summary":"getAllServiceIncidences","operationId":"getAllServiceIncidencesUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"id","in":"path","description":"id","required":true,"type":"integer","format":"int64"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/ServiceIncidence"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/services":{"get":{"tags":["service-resource"],"summary":"getAllServices","operationId":"getAllServicesUsingGET","consumes":["application/json"],"produces":["*/*"],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/Service"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}},"post":{"tags":["service-resource"],"summary":"createService","operationId":"createServiceUsingPOST","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"service","description":"service","required":true,"schema":{"$ref":"#/definitions/Service"}},{"name":"attributes","in":"query","description":"attributes","required":true,"type":"array","items":{"type":"string"},"collectionFormat":"multi"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/Service"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}},"put":{"tags":["service-resource"],"summary":"updateService","operationId":"updateServiceUsingPUT","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"service","description":"service","required":true,"schema":{"$ref":"#/definitions/Service"}},{"name":"attributes","in":"query","description":"attributes","required":true,"type":"array","items":{"type":"string"},"collectionFormat":"multi"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/Service"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/services/cspservices":{"get":{"tags":["service-resource"],"summary":"findServicesByCSP","operationId":"findServicesByCSPUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"cspname","in":"query","description":"cspname","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/Service"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/services/devops":{"get":{"tags":["service-resource"],"summary":"getDevOpsInfo","operationId":"getDevOpsInfoUsingGET","consumes":["application/json"],"produces":["*/*"],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/ServiceDevOpsInfoVO"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/services/find":{"get":{"tags":["service-resource"],"summary":"findServices","operationId":"findServicesUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"filter","in":"query","description":"filter","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/Service"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/services/nfr":{"get":{"tags":["service-resource"],"summary":"getServiceNfrInfo","operationId":"getServiceNfrInfoUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"serviceids","in":"query","description":"serviceids","required":true,"type":"array","items":{"type":"integer","format":"int64"},"collectionFormat":"multi"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/ServiceNFRInfoVO"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/services/optimus":{"get":{"tags":["service-resource"],"summary":"getOptimusInfo","operationId":"getOptimusInfoUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"serviceids","in":"query","description":"serviceids","required":true,"type":"array","items":{"type":"integer","format":"int64"},"collectionFormat":"multi"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/Service"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/services/{id}":{"get":{"tags":["service-resource"],"summary":"getService","operationId":"getServiceUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"id","in":"path","description":"id","required":true,"type":"integer","format":"int64"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/Service"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}},"delete":{"tags":["service-resource"],"summary":"deleteService","operationId":"deleteServiceUsingDELETE","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"id","in":"path","description":"id","required":true,"type":"integer","format":"int64"},{"name":"forcedelete","in":"query","description":"forcedelete","required":true,"type":"string"}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized"},"204":{"description":"No Content"},"403":{"description":"Forbidden"}}}}},"definitions":{"ProfileInfoVM":{"type":"object","properties":{"activeProfiles":{"type":"array","items":{"type":"string"}},"ribbonEnv":{"type":"string"}}},"ServiceAttributeValue":{"type":"object","required":["serviceattributetypeid","serviceid"],"properties":{"checklistvalue":{"type":"string","minLength":0,"maxLength":40},"createdDate":{"type":"string","format":"date-time"},"deleteddate":{"type":"string","format":"date-time"},"id":{"type":"integer","format":"int64"},"lastModifiedDate":{"type":"string","format":"date-time"},"serviceattributetypeid":{"type":"integer","format":"int64"},"serviceattributevalue":{"type":"string","minLength":0,"maxLength":50},"serviceid":{"type":"integer","format":"int64"},"unitvalue":{"type":"string","minLength":0,"maxLength":10}}},"ServiceAttributeType":{"type":"object","required":["ischecklist","iscommon","isenumeration","isfunctionalrequirement","name"],"properties":{"childid":{"type":"integer","format":"int64"},"createdDate":{"type":"string","format":"date-time"},"deleteddate":{"type":"string","format":"date-time"},"evalrule":{"type":"string","minLength":0,"maxLength":70},"id":{"type":"integer","format":"int64"},"ischecklist":{"type":"boolean"},"iscommon":{"type":"boolean"},"isenumeration":{"type":"boolean"},"isfunctionalrequirement":{"type":"boolean"},"lastModifiedDate":{"type":"string","format":"date-time"},"name":{"type":"string","minLength":0,"maxLength":50},"nfrname":{"type":"string","minLength":0,"maxLength":20},"parentid":{"type":"integer","format":"int64"},"unitfactor":{"type":"string","minLength":0,"maxLength":30},"unitrule":{"type":"string","minLength":0,"maxLength":4},"units":{"type":"string","minLength":0,"maxLength":20}}},"AttributeVO":{"type":"object","properties":{"checklistvalue":{"type":"string"},"childid":{"type":"integer","format":"int64"},"classattributeid":{"type":"integer","format":"int64"},"evalrule":{"type":"string"},"human":{"type":"string"},"ischecklist":{"type":"boolean"},"iscommon":{"type":"boolean"},"isenumeration":{"type":"boolean"},"isfunctionalrequirement":{"type":"boolean"},"ismandatory":{"type":"boolean"},"name":{"type":"string"},"nfrname":{"type":"string"},"parentid":{"type":"integer","format":"int64"},"typeid":{"type":"integer","format":"int64"},"unitfactor":{"type":"string"},"unitrule":{"type":"string"},"units":{"type":"string"},"unitvalue":{"type":"string"},"value":{"type":"string"},"valueid":{"type":"integer","format":"int64"},"weight":{"type":"integer","format":"int32"}}},"Definition":{"type":"object","required":["code","ischeckoption","ismainattribute","value"],"properties":{"code":{"type":"string","minLength":0,"maxLength":4},"createdDate":{"type":"string","format":"date-time"},"deleteddate":{"type":"string","format":"date-time"},"id":{"type":"integer","format":"int64"},"ischeckoption":{"type":"boolean"},"ismainattribute":{"type":"boolean"},"lastModifiedDate":{"type":"string","format":"date-time"},"typeid":{"type":"integer","format":"int64"},"value":{"type":"string","minLength":0,"maxLength":60}}},"Service":{"type":"object","required":["serviceclassid","servicename"],"properties":{"attributes":{"type":"array","items":{"$ref":"#/definitions/AttributeVO"}},"createdDate":{"type":"string","format":"date-time"},"deleteddate":{"type":"string","format":"date-time"},"firstcontract":{"type":"array","items":{"type":"string","format":"byte"}},"id":{"type":"integer","format":"int64"},"incidences":{"type":"array","items":{"$ref":"#/definitions/ServiceIncidence"}},"lastModifiedDate":{"type":"string","format":"date-time"},"match":{"type":"number","format":"double"},"matchingattributelist":{"type":"array","items":{"type":"string"}},"secondcontract":{"type":"array","items":{"type":"string","format":"byte"}},"serviceclassid":{"type":"integer","format":"int64"},"serviceclassname":{"type":"string"},"servicename":{"type":"string","minLength":0,"maxLength":70},"thirdcontract":{"type":"array","items":{"type":"string","format":"byte"}}}},"ServiceNFRInfoVO":{"type":"object","properties":{"nfrmetric":{"type":"string"},"nfrname":{"type":"string"},"nfrvalue":{"type":"string"},"serviceclassname":{"type":"string"},"serviceid":{"type":"integer","format":"int64"},"servicename":{"type":"string"}}},"LegalQuestion":{"type":"object","required":["question"],"properties":{"answers":{"type":"array","items":{"$ref":"#/definitions/LegalAnswer"}},"createdDate":{"type":"string","format":"date-time"},"deleteddate":{"type":"string","format":"date-time"},"id":{"type":"integer","format":"int64"},"lastModifiedDate":{"type":"string","format":"date-time"},"question":{"type":"string"}}},"ServiceClass":{"type":"object","required":["serviceclassname"],"properties":{"commonattributes":{"type":"array","items":{"$ref":"#/definitions/AttributeVO"}},"createdDate":{"type":"string","format":"date-time"},"deleteddate":{"type":"string","format":"date-time"},"functionalattributes":{"type":"array","items":{"$ref":"#/definitions/AttributeVO"}},"id":{"type":"integer","format":"int64"},"lastModifiedDate":{"type":"string","format":"date-time"},"nonfunctionalattributes":{"type":"array","items":{"$ref":"#/definitions/AttributeVO"}},"serviceclassname":{"type":"string","minLength":0,"maxLength":20}}},"LegalQuestionnaire":{"type":"object","required":["answerid","questionid","topicid"],"properties":{"answerid":{"type":"integer","format":"int64"},"answertext":{"type":"string"},"createdDate":{"type":"string","format":"date-time"},"deleteddate":{"type":"string","format":"date-time"},"id":{"type":"integer","format":"int64"},"lastModifiedDate":{"type":"string","format":"date-time"},"questionid":{"type":"integer","format":"int64"},"questiontext":{"type":"string"},"topicid":{"type":"integer","format":"int64"},"topicname":{"type":"string"},"topics":{"type":"array","items":{"$ref":"#/definitions/LegalTopic"}},"topicweight":{"type":"integer","format":"int32"}}},"ServiceClassAttribute":{"type":"object","required":["ismandatory","serviceattributetypeid","serviceclassid","weight"],"properties":{"childid":{"type":"integer","format":"int64"},"createdDate":{"type":"string","format":"date-time"},"deleteddate":{"type":"string","format":"date-time"},"id":{"type":"integer","format":"int64"},"ischecklist":{"type":"boolean"},"isenumeration":{"type":"boolean"},"isfunctionalrequirement":{"type":"boolean"},"ismandatory":{"type":"boolean"},"lastModifiedDate":{"type":"string","format":"date-time"},"parentid":{"type":"integer","format":"int64"},"serviceattributetypeid":{"type":"integer","format":"int64"},"serviceattributetypename":{"type":"string"},"serviceclassid":{"type":"integer","format":"int64"},"weight":{"type":"integer","format":"int32"}}},"LegalTopic":{"type":"object","required":["name","weight"],"properties":{"createdDate":{"type":"string","format":"date-time"},"deleteddate":{"type":"string","format":"date-time"},"id":{"type":"integer","format":"int64"},"lastModifiedDate":{"type":"string","format":"date-time"},"name":{"type":"string","minLength":0,"maxLength":150},"questions":{"type":"array","items":{"$ref":"#/definitions/LegalQuestion"}},"weight":{"type":"integer","format":"int32"}}},"ServiceIncidence":{"type":"object","required":["detail","serviceid","timestamp"],"properties":{"createdDate":{"type":"string","format":"date-time"},"deleteddate":{"type":"string","format":"date-time"},"detail":{"type":"string","minLength":0,"maxLength":60},"id":{"type":"integer","format":"int64"},"lastModifiedDate":{"type":"string","format":"date-time"},"realmetricvalue":{"type":"string","minLength":0,"maxLength":50},"serviceid":{"type":"integer","format":"int64"},"timestamp":{"type":"integer","format":"int64"}}},"ServiceDevOpsInfoVO":{"type":"object","properties":{"numservices":{"type":"integer","format":"int32"},"providername":{"type":"string"},"serviceclassname":{"type":"string"}}},"LegalAnswer":{"type":"object","required":["answer"],"properties":{"answer":{"type":"string"},"createdDate":{"type":"string","format":"date-time"},"deleteddate":{"type":"string","format":"date-time"},"id":{"type":"integer","format":"int64"},"lastModifiedDate":{"type":"string","format":"date-time"}}}}}
\ No newline at end of file
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/mvnw b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/mvnw
deleted file mode 100644
index a1ba1bf554bb63c401f90c6a472c21470ed4e164..0000000000000000000000000000000000000000
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/mvnw
+++ /dev/null
@@ -1,233 +0,0 @@
-#!/bin/sh
-# ----------------------------------------------------------------------------
-# 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.
-# ----------------------------------------------------------------------------
-
-# ----------------------------------------------------------------------------
-# Maven2 Start Up Batch script
-#
-# Required ENV vars:
-# ------------------
-#   JAVA_HOME - location of a JDK home dir
-#
-# Optional ENV vars
-# -----------------
-#   M2_HOME - location of maven2's installed home dir
-#   MAVEN_OPTS - parameters passed to the Java VM when running Maven
-#     e.g. to debug Maven itself, use
-#       set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
-#   MAVEN_SKIP_RC - flag to disable loading of mavenrc files
-# ----------------------------------------------------------------------------
-
-if [ -z "$MAVEN_SKIP_RC" ] ; then
-
-  if [ -f /etc/mavenrc ] ; then
-    . /etc/mavenrc
-  fi
-
-  if [ -f "$HOME/.mavenrc" ] ; then
-    . "$HOME/.mavenrc"
-  fi
-
-fi
-
-# OS specific support.  $var _must_ be set to either true or false.
-cygwin=false;
-darwin=false;
-mingw=false
-case "`uname`" in
-  CYGWIN*) cygwin=true ;;
-  MINGW*) mingw=true;;
-  Darwin*) darwin=true
-           #
-           # Look for the Apple JDKs first to preserve the existing behaviour, and then look
-           # for the new JDKs provided by Oracle.
-           #
-           if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK ] ; then
-             #
-             # Apple JDKs
-             #
-             export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home
-           fi
-
-           if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Java/JavaVirtualMachines/CurrentJDK ] ; then
-             #
-             # Apple JDKs
-             #
-             export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home
-           fi
-
-           if [ -z "$JAVA_HOME" ] && [ -L "/Library/Java/JavaVirtualMachines/CurrentJDK" ] ; then
-             #
-             # Oracle JDKs
-             #
-             export JAVA_HOME=/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home
-           fi
-
-           if [ -z "$JAVA_HOME" ] && [ -x "/usr/libexec/java_home" ]; then
-             #
-             # Apple JDKs
-             #
-             export JAVA_HOME=`/usr/libexec/java_home`
-           fi
-           ;;
-esac
-
-if [ -z "$JAVA_HOME" ] ; then
-  if [ -r /etc/gentoo-release ] ; then
-    JAVA_HOME=`java-config --jre-home`
-  fi
-fi
-
-if [ -z "$M2_HOME" ] ; then
-  ## resolve links - $0 may be a link to maven's home
-  PRG="$0"
-
-  # need this for relative symlinks
-  while [ -h "$PRG" ] ; do
-    ls=`ls -ld "$PRG"`
-    link=`expr "$ls" : '.*-> \(.*\)$'`
-    if expr "$link" : '/.*' > /dev/null; then
-      PRG="$link"
-    else
-      PRG="`dirname "$PRG"`/$link"
-    fi
-  done
-
-  saveddir=`pwd`
-
-  M2_HOME=`dirname "$PRG"`/..
-
-  # make it fully qualified
-  M2_HOME=`cd "$M2_HOME" && pwd`
-
-  cd "$saveddir"
-  # echo Using m2 at $M2_HOME
-fi
-
-# For Cygwin, ensure paths are in UNIX format before anything is touched
-if $cygwin ; then
-  [ -n "$M2_HOME" ] &&
-    M2_HOME=`cygpath --unix "$M2_HOME"`
-  [ -n "$JAVA_HOME" ] &&
-    JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
-  [ -n "$CLASSPATH" ] &&
-    CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
-fi
-
-# For Migwn, ensure paths are in UNIX format before anything is touched
-if $mingw ; then
-  [ -n "$M2_HOME" ] &&
-    M2_HOME="`(cd "$M2_HOME"; pwd)`"
-  [ -n "$JAVA_HOME" ] &&
-    JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
-  # TODO classpath?
-fi
-
-if [ -z "$JAVA_HOME" ]; then
-  javaExecutable="`which javac`"
-  if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
-    # readlink(1) is not available as standard on Solaris 10.
-    readLink=`which readlink`
-    if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
-      if $darwin ; then
-        javaHome="`dirname \"$javaExecutable\"`"
-        javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
-      else
-        javaExecutable="`readlink -f \"$javaExecutable\"`"
-      fi
-      javaHome="`dirname \"$javaExecutable\"`"
-      javaHome=`expr "$javaHome" : '\(.*\)/bin'`
-      JAVA_HOME="$javaHome"
-      export JAVA_HOME
-    fi
-  fi
-fi
-
-if [ -z "$JAVACMD" ] ; then
-  if [ -n "$JAVA_HOME"  ] ; then
-    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
-      # IBM's JDK on AIX uses strange locations for the executables
-      JAVACMD="$JAVA_HOME/jre/sh/java"
-    else
-      JAVACMD="$JAVA_HOME/bin/java"
-    fi
-  else
-    JAVACMD="`which java`"
-  fi
-fi
-
-if [ ! -x "$JAVACMD" ] ; then
-  echo "Error: JAVA_HOME is not defined correctly." >&2
-  echo "  We cannot execute $JAVACMD" >&2
-  exit 1
-fi
-
-if [ -z "$JAVA_HOME" ] ; then
-  echo "Warning: JAVA_HOME environment variable is not set."
-fi
-
-CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
-
-# For Cygwin, switch paths to Windows format before running java
-if $cygwin; then
-  [ -n "$M2_HOME" ] &&
-    M2_HOME=`cygpath --path --windows "$M2_HOME"`
-  [ -n "$JAVA_HOME" ] &&
-    JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
-  [ -n "$CLASSPATH" ] &&
-    CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
-fi
-
-# traverses directory structure from process work directory to filesystem root
-# first directory with .mvn subdirectory is considered project base directory
-find_maven_basedir() {
-  local basedir=$(pwd)
-  local wdir=$(pwd)
-  while [ "$wdir" != '/' ] ; do
-    if [ -d "$wdir"/.mvn ] ; then
-      basedir=$wdir
-      break
-    fi
-    wdir=$(cd "$wdir/.."; pwd)
-  done
-  echo "${basedir}"
-}
-
-# concatenates all lines of a file
-concat_lines() {
-  if [ -f "$1" ]; then
-    echo "$(tr -s '\n' ' ' < "$1")"
-  fi
-}
-
-export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-$(find_maven_basedir)}
-MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
-
-# Provide a "standardized" way to retrieve the CLI args that will
-# work with both Windows and non-Windows executions.
-MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
-export MAVEN_CMD_LINE_ARGS
-
-WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
-
-exec "$JAVACMD" \
-  $MAVEN_OPTS \
-  -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
-  "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
-  ${WRAPPER_LAUNCHER} "$@"
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/mvnw.cmd b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/mvnw.cmd
deleted file mode 100644
index 2b934e89dd1d9872b747047fa696477264a86ad8..0000000000000000000000000000000000000000
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/mvnw.cmd
+++ /dev/null
@@ -1,145 +0,0 @@
-@REM ----------------------------------------------------------------------------
-@REM Licensed to the Apache Software Foundation (ASF) under one
-@REM or more contributor license agreements.  See the NOTICE file
-@REM distributed with this work for additional information
-@REM regarding copyright ownership.  The ASF licenses this file
-@REM to you under the Apache License, Version 2.0 (the
-@REM "License"); you may not use this file except in compliance
-@REM with the License.  You may obtain a copy of the License at
-@REM
-@REM    http://www.apache.org/licenses/LICENSE-2.0
-@REM
-@REM Unless required by applicable law or agreed to in writing,
-@REM software distributed under the License is distributed on an
-@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-@REM KIND, either express or implied.  See the License for the
-@REM specific language governing permissions and limitations
-@REM under the License.
-@REM ----------------------------------------------------------------------------
-
-@REM ----------------------------------------------------------------------------
-@REM Maven2 Start Up Batch script
-@REM
-@REM Required ENV vars:
-@REM JAVA_HOME - location of a JDK home dir
-@REM
-@REM Optional ENV vars
-@REM M2_HOME - location of maven2's installed home dir
-@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
-@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending
-@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
-@REM     e.g. to debug Maven itself, use
-@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
-@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
-@REM ----------------------------------------------------------------------------
-
-@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
-@echo off
-@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on'
-@if "%MAVEN_BATCH_ECHO%" == "on"  echo %MAVEN_BATCH_ECHO%
-
-@REM set %HOME% to equivalent of $HOME
-if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
-
-@REM Execute a user defined script before this one
-if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
-@REM check for pre script, once with legacy .bat ending and once with .cmd ending
-if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
-if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
-:skipRcPre
-
-@setlocal
-
-set ERROR_CODE=0
-
-@REM To isolate internal variables from possible post scripts, we use another setlocal
-@setlocal
-
-@REM ==== START VALIDATION ====
-if not "%JAVA_HOME%" == "" goto OkJHome
-
-echo.
-echo Error: JAVA_HOME not found in your environment. >&2
-echo Please set the JAVA_HOME variable in your environment to match the >&2
-echo location of your Java installation. >&2
-echo.
-goto error
-
-:OkJHome
-if exist "%JAVA_HOME%\bin\java.exe" goto init
-
-echo.
-echo Error: JAVA_HOME is set to an invalid directory. >&2
-echo JAVA_HOME = "%JAVA_HOME%" >&2
-echo Please set the JAVA_HOME variable in your environment to match the >&2
-echo location of your Java installation. >&2
-echo.
-goto error
-
-@REM ==== END VALIDATION ====
-
-:init
-
-set MAVEN_CMD_LINE_ARGS=%*
-
-@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
-@REM Fallback to current working directory if not found.
-
-set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
-IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
-
-set EXEC_DIR=%CD%
-set WDIR=%EXEC_DIR%
-:findBaseDir
-IF EXIST "%WDIR%"\.mvn goto baseDirFound
-cd ..
-IF "%WDIR%"=="%CD%" goto baseDirNotFound
-set WDIR=%CD%
-goto findBaseDir
-
-:baseDirFound
-set MAVEN_PROJECTBASEDIR=%WDIR%
-cd "%EXEC_DIR%"
-goto endDetectBaseDir
-
-:baseDirNotFound
-set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
-cd "%EXEC_DIR%"
-
-:endDetectBaseDir
-
-IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
-
-@setlocal EnableExtensions EnableDelayedExpansion
-for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
-@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
-
-:endReadAdditionalConfig
-
-SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
-
-set WRAPPER_JAR="".\.mvn\wrapper\maven-wrapper.jar""
-set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
-
-%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CMD_LINE_ARGS%
-if ERRORLEVEL 1 goto error
-goto end
-
-:error
-set ERROR_CODE=1
-
-:end
-@endlocal & set ERROR_CODE=%ERROR_CODE%
-
-if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
-@REM check for post script, once with legacy .bat ending and once with .cmd ending
-if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
-if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
-:skipRcPost
-
-@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
-if "%MAVEN_BATCH_PAUSE%" == "on" pause
-
-if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
-
-exit /B %ERROR_CODE%
\ No newline at end of file
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/pom.xml b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/pom.xml
index 1bb3bce19d4681be150a6cf205948bbd57e8af5f..3d6569def4caf25a8b27df8b6758588542b4dc7b 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/pom.xml
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/pom.xml
@@ -403,6 +403,12 @@
             <groupId>org.springframework.security</groupId>
             <artifactId>spring-security-data</artifactId>
         </dependency>
+        
+        <dependency>
+			<groupId>com.itextpdf</groupId>
+			<artifactId>itextpdf</artifactId>
+			<version>5.5.10</version>
+		</dependency>
         <!-- jhipster-needle-maven-add-dependency -->
         
     </dependencies>
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/AcsmiservicesApp.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/AcsmiservicesApp.java
index b036edecc38a1e07628e612db68beb3720fe92e7..e5b97c8ad6cc1b51086e575bd7dbd601d97d7ed7 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/AcsmiservicesApp.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/AcsmiservicesApp.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/ApplicationWebXml.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/ApplicationWebXml.java
index 1eff140286e55dc52b3c2b63d4a748a26cea1797..5a71759e845277aa267992c611aa7642af1f04d6 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/ApplicationWebXml.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/ApplicationWebXml.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/aop/logging/LoggingAspect.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/aop/logging/LoggingAspect.java
index 3149589cccb408ae43f51587b8e4db779efdab28..0bd4f70bd1fc44e0b10e21d2ef4a8d9270338e15 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/aop/logging/LoggingAspect.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/aop/logging/LoggingAspect.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/ApplicationProperties.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/ApplicationProperties.java
index 654a76365a23b3064e55965fac92a362dd71e55e..c378aef72ea7091f441fdb19bcc2f603217bbe2c 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/ApplicationProperties.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/ApplicationProperties.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/AsyncConfiguration.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/AsyncConfiguration.java
index 3c73ff7dd758ee69f50d2a9a32ddfcd990ac0b4a..5e9e95c6be77d0fcf4f68bd528b0f773cc901fa3 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/AsyncConfiguration.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/AsyncConfiguration.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/CacheConfiguration.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/CacheConfiguration.java
index bc7ad5dac3c6b7f2a4c2db6116f14c1138eb9df9..2ac7dc96d21f16375476d71aa015509051fca179 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/CacheConfiguration.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/CacheConfiguration.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/CloudDatabaseConfiguration.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/CloudDatabaseConfiguration.java
index fedbcdb2b0084bf4136c8184ddf550cb106c8747..d3e9c1e8c87a42552d30eea324d1ea452e31874b 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/CloudDatabaseConfiguration.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/CloudDatabaseConfiguration.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/Constants.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/Constants.java
index 12d0d5be3faad4649c19dcc8158de6bb71165889..a38e709cc7a8505d750729aa86e008202ea20750 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/Constants.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/Constants.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/DatabaseConfiguration.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/DatabaseConfiguration.java
index bda6f570d5aee4de3e4d5ea76cdc95e40c36f3bf..797e2777d269eb25d79031643189da6e521bbae2 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/DatabaseConfiguration.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/DatabaseConfiguration.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/DateTimeFormatConfiguration.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/DateTimeFormatConfiguration.java
index c3e3e729977a823bd1e78284e35502e74d1be280..646274bbdea82f49534dcc3cac1d1700bcc731dd 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/DateTimeFormatConfiguration.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/DateTimeFormatConfiguration.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/DefaultProfileUtil.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/DefaultProfileUtil.java
index 1bdb7b2b5c72d86a3a4be95b8e9fbb4b06df69ed..8b5fdb37925fbcbd79866caee83ff5c3a6db4113 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/DefaultProfileUtil.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/DefaultProfileUtil.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/LocaleConfiguration.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/LocaleConfiguration.java
index 572a5bf044790c42ebd0956d59023fb374896b62..c345d3fa185fc7275a41d665ff1a74cb4bfdaaca 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/LocaleConfiguration.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/LocaleConfiguration.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/LoggingAspectConfiguration.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/LoggingAspectConfiguration.java
index 1de323b79e5525cd61a600011f1b94f40f974a82..4dc4147917bb5aa482d4dc303da2928644a6eeff 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/LoggingAspectConfiguration.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/LoggingAspectConfiguration.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/LoggingConfiguration.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/LoggingConfiguration.java
index 69134a3960ee0d60665346cf42092c19fe9c1853..e48d7d0bc5d06bdcf2414e03de47e11cd468fcc5 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/LoggingConfiguration.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/LoggingConfiguration.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/MetricsConfiguration.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/MetricsConfiguration.java
index 47600b449e249c2f04567a0ee070fb72b9163f2b..3c84b999a882608b6117accd0d13f57aed40a344 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/MetricsConfiguration.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/MetricsConfiguration.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/MicroserviceSecurityConfiguration.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/MicroserviceSecurityConfiguration.java
index 76d5f2a400091f40190c4bb97bbee162fb78015d..2e11f0dd7bf85e47add83338b9f9b47da8c8291e 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/MicroserviceSecurityConfiguration.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/MicroserviceSecurityConfiguration.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/ThymeleafConfiguration.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/ThymeleafConfiguration.java
index 3cc0dafc4f7767a27ecc8270963526e8fc4f2818..9fcb4e815fa95e69f64400992404daf4d576af56 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/ThymeleafConfiguration.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/ThymeleafConfiguration.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/WebConfigurer.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/WebConfigurer.java
index 605392b05fa30c4c52e8a964d3ad11bcd53b268e..029626129b2fa98b19274584e41e308f9c025a33 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/WebConfigurer.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/WebConfigurer.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/audit/AuditEventConverter.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/audit/AuditEventConverter.java
index ca3f3bf352df81fbffe2b8ed912fcf85da9b624f..653140ee7f1df8702899352ba183ff0e6789347b 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/audit/AuditEventConverter.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/audit/AuditEventConverter.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/audit/package-info.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/audit/package-info.java
index f91ba284dbad4045694e0a1b90bdb45950629086..6b877b8be8241eff3fed50c5d154d4a8366e80be 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/audit/package-info.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/audit/package-info.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/package-info.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/package-info.java
index 1e560e0a07e07de52de6bb52d1191ebd911ec5f1..840669d3933717e1ec1eb313c57a87bb9596cea6 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/package-info.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/config/package-info.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/AbstractAuditingEntity.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/AbstractAuditingEntity.java
index 1d4037139515d7b25c615376aea3c65e72f3645e..97771d262c9afdfe43ad485713860e9f1cba63c7 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/AbstractAuditingEntity.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/AbstractAuditingEntity.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/Definition.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/Definition.java
index 7c90a561b8fc5b4d0c9381e3049d69b124f37dea..85fcebd60b40c3fa96f37d90d350c613c88385e7 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/Definition.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/Definition.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/LegalAnswer.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/LegalAnswer.java
new file mode 100644
index 0000000000000000000000000000000000000000..965dba1760c85e4a381e65b0d24ef591e746145c
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/LegalAnswer.java
@@ -0,0 +1,154 @@
+/*******************************************************************************
+ * Copyright (c) 2017 Tecnalia.
+ * 
+ * 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.
+ * 
+ * The code has been contributed over a stub generated with the JHipster
+ * Application generator http://www.jhipster.tech/.
+ * 
+ * Contributors (in alphabetical order):
+ * 
+ * Alberto Molinuevo					Tecnalia
+ * Gorka Benguria                       Tecnalia
+ * Iñaki Etxaniz                        Tecnalia
+ * Juncal Alonso                        Tecnalia
+ * Leire Orue-Echevarria                Tecnalia
+ * Maria Jose lopez                     Tecnalia
+ * Marisa Escalante                     Tecnalia
+ * 
+ * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+ ******************************************************************************/
+package eu.decideh2020.acsmi.backend.services.server.domain;
+
+import java.io.Serializable;
+import java.time.ZonedDateTime;
+import java.util.Objects;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.validation.constraints.NotNull;
+
+import org.hibernate.annotations.Cache;
+import org.hibernate.annotations.CacheConcurrencyStrategy;
+
+/**
+ * A LegalAnswer.
+ */
+@Entity
+@Table(name = "legal_answer")
+@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
+public class LegalAnswer extends AbstractAuditingEntity implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+    
+    @NotNull
+    @Column(name = "answer", nullable = false)
+    private String answer;
+    
+    @Column(name = "deleted_date")
+    private ZonedDateTime deleteddate;
+    
+    private transient Short score;
+    
+    
+    public LegalAnswer() {}
+    
+    public LegalAnswer(final Long id, final String answer,
+    		final Short score) {
+    	this.id = id;
+    	this.answer = answer;
+    	this.score = score;
+    }
+    
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getAnswer() {
+        return answer;
+    }
+
+    public LegalAnswer question(String answer) {
+        this.answer = answer;
+        return this;
+    }
+
+    public void setAnswer(String answer) {
+        this.answer = answer;
+    }
+    
+    public ZonedDateTime getDeleteddate() {
+        return deleteddate;
+    }
+
+    public LegalAnswer deleteddate(ZonedDateTime deleteddate) {
+        this.deleteddate = deleteddate;
+        return this;
+    }
+
+    public void setDeleteddate(ZonedDateTime deleteddate) {
+        this.deleteddate = deleteddate;
+    }
+    
+    public Short getScore() {
+    	return score;
+    }
+    
+    public void setScore(Short score) {
+    	this.score = score;
+    }
+
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+        LegalAnswer legalAnswer = (LegalAnswer) o;
+        if (legalAnswer.getId() == null || getId() == null) {
+            return false;
+        }
+        return Objects.equals(getId(), legalAnswer.getId());
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hashCode(getId());
+    }
+
+    @Override
+    public String toString() {
+    	StringBuffer buffer = new StringBuffer("LegalAnswer {");
+    	buffer.append("id=").append(getId());
+    	buffer.append(", answer=").append(getAnswer());
+    	buffer.append(", score=").append(getScore());
+    	buffer.append(", deleteddate=").append(getDeleteddate()).append("}");
+    	return buffer.toString();
+    }
+}
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/LegalAssessment.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/LegalAssessment.java
new file mode 100644
index 0000000000000000000000000000000000000000..a48581ca54a99e027e17dccd73c90915e02ea6ee
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/LegalAssessment.java
@@ -0,0 +1,238 @@
+/*******************************************************************************
+ * Copyright (c) 2017 Tecnalia.
+ * 
+ * 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.
+ * 
+ * The code has been contributed over a stub generated with the JHipster
+ * Application generator http://www.jhipster.tech/.
+ * 
+ * Contributors (in alphabetical order):
+ * 
+ * Alberto Molinuevo					Tecnalia
+ * Gorka Benguria                       Tecnalia
+ * Iñaki Etxaniz                        Tecnalia
+ * Juncal Alonso                        Tecnalia
+ * Leire Orue-Echevarria                Tecnalia
+ * Maria Jose lopez                     Tecnalia
+ * Marisa Escalante                     Tecnalia
+ * 
+ * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+ ******************************************************************************/
+package eu.decideh2020.acsmi.backend.services.server.domain;
+
+import java.io.Serializable;
+import java.time.ZonedDateTime;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.validation.constraints.NotNull;
+
+import org.hibernate.annotations.Cache;
+import org.hibernate.annotations.CacheConcurrencyStrategy;
+
+/**
+ * A LegalAssessment.
+ */
+@Entity
+@Table(name = "legal_assessment")
+@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
+public class LegalAssessment extends AbstractAuditingEntity implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+    
+    @NotNull
+    @Column(name = "controlid", nullable = false)
+    private Long controlid;
+    
+    @NotNull
+    @Column(name = "answerid", nullable = false)
+    private Long answerid;
+    
+    @NotNull
+    @Column(name = "score", nullable = false)
+    private Short score;
+    
+    @Column(name = "deleted_date")
+    private ZonedDateTime deleteddate;
+    
+    private transient String question;
+    private transient Boolean issimplecontrol;
+    private transient String answer;
+    private transient List<LegalControl> controls;
+    
+    
+    public LegalAssessment() {
+    	controls = new ArrayList<LegalControl>();
+    }
+    
+    public LegalAssessment(final Long id, final Long controlid,
+    		final String question, final Boolean issimplecontrol,
+    		final Long answerid, final String answer,
+    		final Short score) {
+    	 this.id = id;
+    	 this.controlid = controlid;
+    	 this.question = question;
+    	 this.issimplecontrol = issimplecontrol;
+    	 this.answerid = answerid;
+    	 this.answer = answer;
+    	 this.score = score;
+    	 controls = new ArrayList<LegalControl>();
+    }
+    
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    
+    public Long getControlid() {
+        return controlid;
+    }
+
+    public LegalAssessment controlid(Long controlid) {
+        this.controlid = controlid;
+        return this;
+    }
+
+    public void setControlid(Long controlid) {
+        this.controlid = controlid;
+    }
+    
+    public Long getAnswerid() {
+        return answerid;
+    }
+
+    public LegalAssessment answerid(Long answerid) {
+        this.answerid = answerid;
+        return this;
+    }
+
+    public void setAnswerid(Long answerid) {
+        this.answerid = answerid;
+    }
+    
+    public Short getScore() {
+        return score;
+    }
+
+    public LegalAssessment score(Short score) {
+        this.score = score;
+        return this;
+    }
+
+    public void setScore(Short score) {
+        this.score = score;
+    }
+    
+    public ZonedDateTime getDeleteddate() {
+        return deleteddate;
+    }
+
+    public LegalAssessment deleteddate(ZonedDateTime deleteddate) {
+        this.deleteddate = deleteddate;
+        return this;
+    }
+
+    public void setDeleteddate(ZonedDateTime deleteddate) {
+        this.deleteddate = deleteddate;
+    }
+    
+    public String getQuestion() {
+    	return question;
+    }
+    
+    public void setQuestion(String question) {
+    	this.question = question;
+    }
+    
+    public Boolean isIssimplecontrol() {
+    	return issimplecontrol;
+    }
+    
+    public void setIssimplecontrol(Boolean issimplecontrol) {
+    	this.issimplecontrol = issimplecontrol;
+    }
+    
+    public String getAnswer() {
+    	return answer;
+    }
+    
+    public void setAnswer(String answer) {
+    	this.answer = answer;
+    }
+    
+    public List<LegalControl> getControls() {
+    	return controls;
+    }
+    
+    public void setControls(List<LegalControl> controls) {
+    	this.controls = controls;
+    }
+
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+        LegalAssessment legalAssessment = (LegalAssessment) o;
+        if (legalAssessment.getId() == null || getId() == null) {
+            return false;
+        }
+        return Objects.equals(getId(), legalAssessment.getId());
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hashCode(getId());
+    }
+
+    @Override
+    public String toString() {
+    	StringBuffer buffer = new StringBuffer("LegalAssessment {");
+    	buffer.append("id=").append(getId());
+    	buffer.append(", controlid=").append(getControlid());
+    	buffer.append(", answerid=").append(getAnswerid());
+    	buffer.append(", score=").append(getScore());
+    	buffer.append(", question=").append(getQuestion());
+    	buffer.append(", issimplecontrol=").append(isIssimplecontrol());
+    	buffer.append(", answer=").append(getAnswer());
+    	buffer.append(", deleteddate=").append(getDeleteddate());
+    	buffer.append(", controls=[");
+    	if (controls != null && !controls.isEmpty()) {
+    		for (LegalControl ctrl : controls) {
+    			buffer.append(ctrl).append(" , ");
+    		}
+    	}
+    	buffer.append("]}");
+    	return buffer.toString();
+    }
+}
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/LegalControl.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/LegalControl.java
new file mode 100644
index 0000000000000000000000000000000000000000..e5d7224b9b90a8b7086e111cc86d48df4f735b09
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/LegalControl.java
@@ -0,0 +1,206 @@
+/*******************************************************************************
+ * Copyright (c) 2017 Tecnalia.
+ * 
+ * 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.
+ * 
+ * The code has been contributed over a stub generated with the JHipster
+ * Application generator http://www.jhipster.tech/.
+ * 
+ * Contributors (in alphabetical order):
+ * 
+ * Alberto Molinuevo					Tecnalia
+ * Gorka Benguria                       Tecnalia
+ * Iñaki Etxaniz                        Tecnalia
+ * Juncal Alonso                        Tecnalia
+ * Leire Orue-Echevarria                Tecnalia
+ * Maria Jose lopez                     Tecnalia
+ * Marisa Escalante                     Tecnalia
+ * 
+ * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+ ******************************************************************************/
+package eu.decideh2020.acsmi.backend.services.server.domain;
+
+import java.io.Serializable;
+import java.time.ZonedDateTime;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.validation.constraints.NotNull;
+
+import org.hibernate.annotations.Cache;
+import org.hibernate.annotations.CacheConcurrencyStrategy;
+
+/**
+ * A LegalControl.
+ */
+@Entity
+@Table(name = "legal_control")
+@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
+public class LegalControl extends AbstractAuditingEntity implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+    
+    @NotNull
+    @Column(name = "question", nullable = false)
+    private String question;
+    
+    @NotNull
+    @Column(name = "issimplecontrol", nullable = false)
+    private Boolean issimplecontrol;
+    
+    @Column(name = "deleted_date")
+    private ZonedDateTime deleteddate;
+
+    private transient Short score;
+    private transient String justification;
+    private transient List<LegalAnswer> answers;
+    
+    
+    public LegalControl() {
+    	answers = new ArrayList<LegalAnswer>();
+    }
+    
+    public LegalControl(final Long id, final String question,
+    		final Boolean issimplecontrol, final Short score,
+    		final String justification) {
+    	this.id = id;
+    	this.question = question;
+    	this.issimplecontrol = issimplecontrol;
+    	this.score = score;
+    	this.justification = justification;
+    	answers = new ArrayList<LegalAnswer>();
+    }
+    
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getQuestion() {
+        return question;
+    }
+
+    public LegalControl question(String question) {
+        this.question = question;
+        return this;
+    }
+
+    public void setQuestion(String question) {
+        this.question = question;
+    }
+    
+    public Boolean isIssimplecontrol() {
+        return issimplecontrol;
+    }
+
+    public LegalControl issimplecontrol(Boolean issimplecontrol) {
+        this.issimplecontrol = issimplecontrol;
+        return this;
+    }
+
+    public void setIssimplecontrol(Boolean issimplecontrol) {
+        this.issimplecontrol = issimplecontrol;
+    }
+    
+    public ZonedDateTime getDeleteddate() {
+        return deleteddate;
+    }
+
+    public LegalControl deleteddate(ZonedDateTime deleteddate) {
+        this.deleteddate = deleteddate;
+        return this;
+    }
+
+    public void setDeleteddate(ZonedDateTime deleteddate) {
+        this.deleteddate = deleteddate;
+    }
+    
+    public Short getScore() {
+    	return score;
+    }
+    
+    public void setScore(Short score) {
+    	this.score = score;
+    }
+    
+    public String getJustification() {
+    	return justification;
+    }
+    
+    public void setJustification(String justification) {
+    	this.justification = justification;
+    }
+    
+    public List<LegalAnswer> getAnswers() {
+    	return answers;
+    }
+    
+    public void setAnswers(List<LegalAnswer> answers) {
+    	this.answers = answers;
+    }
+
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+        LegalControl legalControl = (LegalControl) o;
+        if (legalControl.getId() == null || getId() == null) {
+            return false;
+        }
+        return Objects.equals(getId(), legalControl.getId());
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hashCode(getId());
+    }
+
+    @Override
+    public String toString() {
+    	StringBuffer buffer = new StringBuffer("LegalControl {");
+    	buffer.append("id=").append(getId());
+    	buffer.append(", question=").append(getQuestion());
+    	buffer.append(", issimplecontrol=").append(isIssimplecontrol());
+    	buffer.append(", deleteddate=").append(getDeleteddate());
+    	buffer.append(", score=").append(getScore());
+    	buffer.append(", justification=").append(getJustification());
+    	buffer.append(", answers=[");
+    	if (answers != null && !answers.isEmpty()) {
+    		for (LegalAnswer answ : answers) {
+    			buffer.append(answ).append(" , ");
+    		}
+    	}
+    	buffer.append("]}");
+    	return buffer.toString();
+    }
+}
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/PersistentAuditEvent.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/PersistentAuditEvent.java
index 830104dea805d8dc5e9e26571bfe86d9396c662b..9ddb70c4a61f30b4c0f3464f2e020f1b48af253d 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/PersistentAuditEvent.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/PersistentAuditEvent.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
@@ -44,7 +45,9 @@ import java.util.Map;
 @Table(name = "jhi_persistent_audit_event")
 public class PersistentAuditEvent implements Serializable {
 
-    @Id
+	private static final long serialVersionUID = -2811286476367104035L;
+
+	@Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     @Column(name = "event_id")
     private Long id;
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/Service.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/Service.java
index df84bc94c7a9f75c10b7e392b8098f4773376f8b..04f2a66764641566eab9e863e32bbde6e6720ff4 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/Service.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/Service.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
@@ -94,6 +95,10 @@ public class Service extends AbstractAuditingEntity implements Serializable, Com
     private transient List<String> matchingattributelist;
     private transient List<AttributeVO> attributes;
     private transient List<ServiceIncidence> incidences;
+    private transient String provider;
+    private transient Boolean nocontractalert;
+    private transient Boolean modifiedcontractalert;
+    private transient Boolean formalert;
     
     
     public Service() {
@@ -110,6 +115,17 @@ public class Service extends AbstractAuditingEntity implements Serializable, Com
     	incidences = new ArrayList<ServiceIncidence>();
     }
     
+    public Service(final Long id, final String servicename,
+    		final String serviceclassname, final String provider) {
+    	this.id = id;
+    	this.servicename = servicename;
+    	this.serviceclassname = serviceclassname;
+    	this.provider = provider;
+    	matchingattributelist = new ArrayList<String>();
+    	attributes = new ArrayList<AttributeVO>();
+    	incidences = new ArrayList<ServiceIncidence>();
+    }
+    
     public Service(final Long id, final String servicename,
     		final Long serviceclassid, final String serviceclassname) {
     	this.id = id;
@@ -134,11 +150,29 @@ public class Service extends AbstractAuditingEntity implements Serializable, Com
     	incidences = new ArrayList<ServiceIncidence>();
     }
     
+    public Service(final Long id, final String servicename,
+    		final String serviceclassname, final String provider,
+    		final Boolean nocontractalert, final Boolean modifiedcontractalert,
+    		final Boolean formalert) {
+    	this.id = id;
+    	this.servicename = servicename;
+    	this.serviceclassname = serviceclassname;
+    	this.provider = provider;
+    	this.nocontractalert = nocontractalert;
+    	this.modifiedcontractalert = modifiedcontractalert;
+    	this.formalert = formalert;
+    	matchingattributelist = new ArrayList<String>();
+    	attributes = new ArrayList<AttributeVO>();
+    	incidences = new ArrayList<ServiceIncidence>();
+    }
+    
     public Service(final Long id, final String servicename,
     		final Long serviceclassid, final String serviceclassname,
     		final ZonedDateTime deleteddate, final Long incidenceid,
     		final Long incidencetimestamp, final String incidencedetail,
-    		final Instant incidencecreateddate, final Instant incidencelastmodifieddate) {
+    		final String incidencerealmetricvalue,
+    		final Instant incidencecreateddate,
+    		final Instant incidencelastmodifieddate) {
     	this.id = id;
     	this.servicename = servicename;
     	this.serviceclassid = serviceclassid;
@@ -150,7 +184,34 @@ public class Service extends AbstractAuditingEntity implements Serializable, Com
     	incidences = new ArrayList<ServiceIncidence>();
     	incidences.add(new ServiceIncidence(incidenceid,
     			incidencetimestamp, incidencedetail,
-    			id, incidencecreateddate, incidencelastmodifieddate));
+    			incidencerealmetricvalue,
+    			id, incidencecreateddate,
+    			incidencelastmodifieddate));
+    }
+    
+    public Service(final Long id, final String servicename,
+    		final Long serviceclassid, final String serviceclassname,
+    		final ZonedDateTime deleteddate, final Long incidenceid,
+    		final Long incidencetimestamp, final String incidencedetail,
+    		final String incidencerealmetricvalue,
+    		final Instant incidencecreateddate,
+    		final Instant incidencelastmodifieddate,
+    		final String provider) {
+    	this.id = id;
+    	this.servicename = servicename;
+    	this.serviceclassid = serviceclassid;
+    	this.serviceclassname = serviceclassname;
+    	this.provider = provider;
+    	this.deleteddate = deleteddate;
+    	matchingattributelist = new ArrayList<String>();
+    	attributes = new ArrayList<AttributeVO>();
+    	
+    	incidences = new ArrayList<ServiceIncidence>();
+    	incidences.add(new ServiceIncidence(incidenceid,
+    			incidencetimestamp, incidencedetail,
+    			incidencerealmetricvalue,
+    			id, incidencecreateddate,
+    			incidencelastmodifieddate));
     }
     
 
@@ -279,6 +340,38 @@ public class Service extends AbstractAuditingEntity implements Serializable, Com
     public void setIncidences(final List<ServiceIncidence> incidences) {
     	this.incidences = incidences;
     }
+    
+    public String getProvider() {
+    	return provider;
+    }
+    
+    public void setProvider(final String provider) {
+    	this.provider = provider;
+    }
+    
+    public Boolean isNocontractalert() {
+        return nocontractalert;
+    }
+
+    public void setNocontractalert(final Boolean nocontractalert) {
+        this.nocontractalert = nocontractalert;
+    }
+    
+    public Boolean isModifiedcontractalert() {
+        return modifiedcontractalert;
+    }
+
+    public void setModifiedcontractalert(final Boolean modifiedcontractalert) {
+        this.modifiedcontractalert = modifiedcontractalert;
+    }
+    
+    public Boolean isFormalert() {
+        return formalert;
+    }
+
+    public void setFormalert(final Boolean formalert) {
+        this.formalert = formalert;
+    }
 
 
     @Override
@@ -308,6 +401,10 @@ public class Service extends AbstractAuditingEntity implements Serializable, Com
     	buffer.append(", servicename=").append(getServicename());
     	buffer.append(", serviceclassid=").append(getServiceclassid());
     	buffer.append(", deleteddate=").append(getDeleteddate());
+    	buffer.append(", provider=").append(getProvider());
+    	buffer.append(", nocontractalert=").append(isNocontractalert());
+    	buffer.append(", modifiedcontractalert=").append(isModifiedcontractalert());
+    	buffer.append(", formalert=").append(isFormalert());
     	buffer.append(", matchingattributelist=[");
     	if (matchingattributelist != null && !matchingattributelist.isEmpty()) {
     		for (String str : matchingattributelist) {
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/ServiceAttributeType.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/ServiceAttributeType.java
index 0296e4de9894dfa68c6ac557e8fbe4b432b471f0..7fe4f42efea8e4dccbf59a48cb868cfdd38fc2d3 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/ServiceAttributeType.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/ServiceAttributeType.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
@@ -73,8 +74,8 @@ public class ServiceAttributeType extends AbstractAuditingEntity implements Seri
     private Boolean isenumeration;
     
     @NotNull
-    @Column(name = "ischecklist", nullable = false)
-    private Boolean ischecklist;
+    @Column(name = "isform", nullable = false)
+    private Boolean isform;
     
     @NotNull
     @Column(name = "iscommon", nullable = false)
@@ -90,21 +91,21 @@ public class ServiceAttributeType extends AbstractAuditingEntity implements Seri
     @Column(name = "childid", nullable = true)
     private Long childid;
     
-    @Size(max = 20)
-    @Column(name = "units", length = 20, nullable = true)
+    @Size(max = 35)
+    @Column(name = "units", length = 35, nullable = true)
     private String units;
     
     @Size(max = 30)
     @Column(name = "unitfactor", length = 30, nullable = true)
     private String unitfactor;
     
-    @Size(max = 2)
-    @Column(name = "unitrule", length = 2, nullable = true)
+    @Size(max = 4)
+    @Column(name = "unitrule", length = 4, nullable = true)
     private String unitrule;
     
     @Size(max = 70)
-    @Column(name = "checklistevalrule", length = 70, nullable = true)
-    private String checklistevalrule;
+    @Column(name = "evalrule", length = 70, nullable = true)
+    private String evalrule;
 
     @Column(name = "deleted_date")
     private ZonedDateTime deleteddate;
@@ -113,14 +114,14 @@ public class ServiceAttributeType extends AbstractAuditingEntity implements Seri
     public ServiceAttributeType() {}
     
     public ServiceAttributeType(final Long id, final String name, final String nfrname, final Boolean isenumeration,
-    		final Boolean ischecklist, final Boolean iscommon, final Boolean isfunctionalrequirement, final Long parentid,
+    		final Boolean isform, final Boolean iscommon, final Boolean isfunctionalrequirement, final Long parentid,
     		final Long childid, final String units, final String unitfactor, final String unitrule,
-    		final String checklistevalrule, final ZonedDateTime deleteddate) {
+    		final String evalrule, final ZonedDateTime deleteddate) {
     	this.id = id;
     	this.name = name;
     	this.nfrname = nfrname;
     	this.isenumeration = isenumeration;
-    	this.ischecklist = ischecklist;
+    	this.isform = isform;
     	this.iscommon = iscommon;
     	this.isfunctionalrequirement = isfunctionalrequirement;
     	this.parentid = parentid;
@@ -128,7 +129,7 @@ public class ServiceAttributeType extends AbstractAuditingEntity implements Seri
     	this.units = units;
     	this.unitfactor = unitfactor;
     	this.unitrule = unitrule;
-    	this.checklistevalrule = checklistevalrule;
+    	this.evalrule = evalrule;
     	this.deleteddate = deleteddate;
     }
     
@@ -180,17 +181,17 @@ public class ServiceAttributeType extends AbstractAuditingEntity implements Seri
         this.isenumeration = isenumeration;
     }
     
-    public boolean isIschecklist() {
-        return ischecklist;
+    public boolean isIsform() {
+        return isform;
     }
 
-    public ServiceAttributeType ischecklist(boolean ischecklist) {
-        this.ischecklist = ischecklist;
+    public ServiceAttributeType isform(boolean isform) {
+        this.isform = isform;
         return this;
     }
 
-    public void setIschecklist(boolean ischecklist) {
-        this.ischecklist = ischecklist;
+    public void setIsform(boolean isform) {
+        this.isform = isform;
     }
     
     public boolean isIscommon() {
@@ -284,17 +285,17 @@ public class ServiceAttributeType extends AbstractAuditingEntity implements Seri
         this.unitrule = unitrule;
     }
     
-    public String getChecklistevalrule() {
-        return checklistevalrule;
+    public String getEvalrule() {
+        return evalrule;
     }
 
-    public ServiceAttributeType checklistevalrule(String checklistevalrule) {
-        this.checklistevalrule = checklistevalrule;
+    public ServiceAttributeType evalrule(String evalrule) {
+        this.evalrule = evalrule;
         return this;
     }
 
-    public void setChecklistevalrule(String checklistevalrule) {
-        this.checklistevalrule = checklistevalrule;
+    public void setEvalrule(String evalrule) {
+        this.evalrule = evalrule;
     }
 
     public ZonedDateTime getDeleteddate() {
@@ -333,12 +334,12 @@ public class ServiceAttributeType extends AbstractAuditingEntity implements Seri
 
     @Override
     public String toString() {
-        return "Service{" +
+        return "Service {" +
             "id=" + getId() +
             ", name='" + getName() + "'" +
             ", nfrname='" + getNfrname() + "'" +
             ", isenumeration='" + isIsenumeration() + "'" +
-            ", ischecklist='" + isIschecklist() + "'" +
+            ", isform='" + isIsform() + "'" +
             ", iscommon='" + isIscommon() + "'" +
             ", isfunctionalrequirement='" + isIsfunctionalrequirement() + "'" +
             ", parentid='" + getParentid() + "'" +
@@ -346,7 +347,7 @@ public class ServiceAttributeType extends AbstractAuditingEntity implements Seri
             ", units='" + getUnits() + "'" +
             ", unitfactor='" + getUnitfactor() + "'" +
             ", unitrule='" + getUnitrule() + "'" +
-            ", checklistevalrule='" + getChecklistevalrule() + "'" +
+            ", evalrule='" + getEvalrule() + "'" +
             ", deleteddate='" + getDeleteddate() + "'" +
             "}";
     }
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/ServiceAttributeValue.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/ServiceAttributeValue.java
index cd16939a0e3ab71a2fab3bf3c5a9ec77463fe885..f9e428b49f984f66b5492dc7d4bb250bf8417e4c 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/ServiceAttributeValue.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/ServiceAttributeValue.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
@@ -63,8 +64,8 @@ public class ServiceAttributeValue extends AbstractAuditingEntity implements Ser
     @Column(name = "serviceattributevalue", length = 50, nullable = true)
     private String serviceattributevalue;
     
-    @Size(max = 10)
-    @Column(name = "unitvalue", length = 10, nullable = true)
+    @Size(max = 15)
+    @Column(name = "unitvalue", length = 15, nullable = true)
     private String unitvalue;
     
     @Size(max = 40)
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/ServiceClass.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/ServiceClass.java
index 00a9fe7479bff6fb5caf1c85724430d76de932da..d83d4b6f8b1a8615381c81243014fa75c2c57fdc 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/ServiceClass.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/ServiceClass.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/ServiceClassAttribute.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/ServiceClassAttribute.java
index f2ee703dce832040ea0ab45d570edf2cb092ac13..9f59ef5a65a3260d6f2951499d7e54b157ca15f3 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/ServiceClassAttribute.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/ServiceClassAttribute.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
@@ -79,7 +80,7 @@ public class ServiceClassAttribute extends AbstractAuditingEntity implements Ser
     
     private transient String serviceattributetypename;
     private transient Boolean isenumeration;
-    private transient Boolean ischecklist;
+    private transient Boolean isform;
     private transient Boolean isfunctionalrequirement;
     private transient Long parentid;
     private transient Long childid;
@@ -90,7 +91,7 @@ public class ServiceClassAttribute extends AbstractAuditingEntity implements Ser
 	public ServiceClassAttribute(final Long id, final Integer weight,
 			final Boolean ismandatory, final Long serviceclassid, final Long serviceattributetypeid,
 			final ZonedDateTime deleteddate, final String serviceattributetypename,
-			final boolean isenumeration, final boolean ischecklist,
+			final boolean isenumeration, final boolean isform,
 			final boolean isfunctionalrequirement, final Long parentid, final Long childid) {
     	this.id = id;
     	this.weight = weight;
@@ -100,7 +101,7 @@ public class ServiceClassAttribute extends AbstractAuditingEntity implements Ser
     	this.deleteddate = deleteddate;
     	this.serviceattributetypename = serviceattributetypename;
     	this.isenumeration = isenumeration;
-    	this.ischecklist = ischecklist;
+    	this.isform = isform;
     	this.isfunctionalrequirement = isfunctionalrequirement;
     	this.parentid = parentid;
     	this.childid = childid;
@@ -196,12 +197,12 @@ public class ServiceClassAttribute extends AbstractAuditingEntity implements Ser
     	this.isenumeration = isenumeration;
     }
     
-    public Boolean isIschecklist() {
-    	return ischecklist;
+    public Boolean isIsform() {
+    	return isform;
     }
     
-    public void setIschecklist(Boolean ischecklist) {
-    	this.ischecklist = ischecklist;
+    public void setIsform(Boolean isform) {
+    	this.isform = isform;
     }
     
     public boolean isIsfunctionalrequirement() {
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/ServiceIncidence.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/ServiceIncidence.java
index 82a421007ce6e63cc37b0f3ed0bc76b7a15f4ac1..5437b0ab21122f23c1a5339da29af83ca2a32898 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/ServiceIncidence.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/ServiceIncidence.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
@@ -69,6 +70,10 @@ public class ServiceIncidence extends AbstractAuditingEntity implements Serializ
     @Column(name = "detail", length = 60, nullable = false)
     private String detail;
     
+    @Size(max = 50)
+    @Column(name = "realmetricvalue", length = 50, nullable = true)
+    private String realmetricvalue;
+    
     @NotNull
     @Column(name = "serviceid", nullable = false)
     private Long serviceid;
@@ -80,11 +85,13 @@ public class ServiceIncidence extends AbstractAuditingEntity implements Serializ
     public ServiceIncidence() {}
     
     public ServiceIncidence(final Long id, final Long timestamp,
-    		final String detail, final Long serviceid,
-    		final Instant createddate, final Instant lastmodifieddate) {
+    		final String detail, final String realmetricvalue,
+    		final Long serviceid, final Instant createddate,
+    		final Instant lastmodifieddate) {
     	this.id = id;
     	this.timestamp = timestamp;
     	this.detail = detail;
+    	this.realmetricvalue = realmetricvalue;
     	this.serviceid = serviceid;
     	setCreatedDate(createddate);
     	setLastModifiedDate(lastmodifieddate);
@@ -125,6 +132,19 @@ public class ServiceIncidence extends AbstractAuditingEntity implements Serializ
         this.detail = detail;
     }
     
+    public String getRealmetricvalue() {
+        return realmetricvalue;
+    }
+
+    public ServiceIncidence realmetricvalue(String realmetricvalue) {
+        this.realmetricvalue = realmetricvalue;
+        return this;
+    }
+
+    public void setRealmetricvalue(String realmetricvalue) {
+        this.realmetricvalue = realmetricvalue;
+    }
+    
     public Long getServiceid() {
         return serviceid;
     }
@@ -178,6 +198,7 @@ public class ServiceIncidence extends AbstractAuditingEntity implements Serializ
     	buffer.append("id=").append(getId());
     	buffer.append(", timestamp=").append(getTimestamp());
     	buffer.append(", detail=").append(getDetail());
+    	buffer.append(", realmetricvalue=").append(getRealmetricvalue());
     	buffer.append(", serviceid=").append(getServiceid());
     	buffer.append(", deleteddate=").append(getDeleteddate()).append("}");
     	return buffer.toString();
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/ServiceLegalAssessment.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/ServiceLegalAssessment.java
new file mode 100644
index 0000000000000000000000000000000000000000..f38dd777def13c7502ded2e1dfaa746e85f170fa
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/ServiceLegalAssessment.java
@@ -0,0 +1,280 @@
+/*******************************************************************************
+ * Copyright (c) 2017 Tecnalia.
+ * 
+ * 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.
+ * 
+ * The code has been contributed over a stub generated with the JHipster
+ * Application generator http://www.jhipster.tech/.
+ * 
+ * Contributors (in alphabetical order):
+ * 
+ * Alberto Molinuevo					Tecnalia
+ * Gorka Benguria                       Tecnalia
+ * Iñaki Etxaniz                        Tecnalia
+ * Juncal Alonso                        Tecnalia
+ * Leire Orue-Echevarria                Tecnalia
+ * Maria Jose lopez                     Tecnalia
+ * Marisa Escalante                     Tecnalia
+ * 
+ * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+ ******************************************************************************/
+package eu.decideh2020.acsmi.backend.services.server.domain;
+
+import java.io.Serializable;
+import java.time.ZonedDateTime;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+
+import org.hibernate.annotations.Cache;
+import org.hibernate.annotations.CacheConcurrencyStrategy;
+
+/**
+ * A ServiceLegalAssessment.
+ */
+@Entity
+@Table(name = "service_legal_assessment")
+@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
+public class ServiceLegalAssessment extends AbstractAuditingEntity implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+    
+    @NotNull
+    @Column(name = "serviceid", nullable = false)
+    private Long serviceid;
+    
+    @NotNull
+    @Column(name = "controlid", nullable = false)
+    private Long controlid;
+    
+    @NotNull
+    @Column(name = "score", nullable = false)
+    private Short score;
+    
+    @Size(max = 150)
+    @Column(name = "justification", length = 150, nullable = true)
+    private String justification;
+    
+    @Column(name = "deleted_date")
+    private ZonedDateTime deleteddate;
+    
+    private transient String question;
+    private transient Boolean issimplecontrol;
+    private transient Long answerid;
+    private transient String answer;
+    private transient Short answerscore;
+    private transient List<LegalControl> controls;
+    
+    
+    public ServiceLegalAssessment() {
+    	controls = new ArrayList<LegalControl>();
+    }
+    
+    public ServiceLegalAssessment(final Long id, final Long serviceid,
+    		final Long controlid, final Short score,
+    		final String justification, final String question,
+    		final Boolean issimplecontrol, final Long answerid,
+    		final String answer, final Short answerscore) {
+    	this.id = id;
+    	this.serviceid = serviceid;
+    	this.controlid = controlid;
+    	this.score = score;
+    	this.justification = justification;
+    	this.question = question;
+    	this.issimplecontrol = issimplecontrol;
+    	this.answerid = answerid;
+    	this.answer = answer;
+    	this.answerscore = answerscore;
+    	controls = new ArrayList<LegalControl>();
+    }
+    
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+    
+    public Long getServiceid() {
+        return serviceid;
+    }
+
+    public ServiceLegalAssessment serviceid(Long serviceid) {
+        this.serviceid = serviceid;
+        return this;
+    }
+
+    public void setServiceid(Long serviceid) {
+        this.serviceid = serviceid;
+    }
+    
+    public Long getControlid() {
+        return controlid;
+    }
+
+    public ServiceLegalAssessment controlid(Long controlid) {
+        this.controlid = controlid;
+        return this;
+    }
+
+    public void setControlid(Long controlid) {
+        this.controlid = controlid;
+    }
+    
+    public Short getScore() {
+        return score;
+    }
+
+    public ServiceLegalAssessment score(Short score) {
+        this.score = score;
+        return this;
+    }
+
+    public void setScore(Short score) {
+        this.score = score;
+    }
+    
+    public String getJustification() {
+        return justification;
+    }
+
+    public ServiceLegalAssessment justification(String justification) {
+        this.justification = justification;
+        return this;
+    }
+
+    public void setJustification(String justification) {
+        this.justification = justification;
+    }
+    
+    public ZonedDateTime getDeleteddate() {
+        return deleteddate;
+    }
+
+    public ServiceLegalAssessment deleteddate(ZonedDateTime deleteddate) {
+        this.deleteddate = deleteddate;
+        return this;
+    }
+
+    public void setDeleteddate(ZonedDateTime deleteddate) {
+        this.deleteddate = deleteddate;
+    }
+    
+    public String getQuestion() {
+    	return question;
+    }
+    
+    public void setQuestion(String question) {
+    	this.question = question;
+    }
+    
+    public Boolean isIssimplecontrol() {
+    	return issimplecontrol;
+    }
+    
+    public void setIssimplecontrol(Boolean issimplecontrol) {
+    	this.issimplecontrol = issimplecontrol;
+    }
+    
+    public Long getAnswerid() {
+    	return answerid;
+    }
+    
+    public void setAnswerid(Long answerid) {
+    	this.answerid = answerid;
+    }
+    
+    public String getAnswer() {
+    	return answer;
+    }
+    
+    public void setAnswer(String answer) {
+    	this.answer = answer;
+    }
+    
+    public Short getAnswerscore() {
+    	return answerscore;
+    }
+    
+    public void setAnswerscore(Short answerscore) {
+    	this.answerscore = answerscore;
+    }
+    
+    public List<LegalControl> getControls() {
+    	return controls;
+    }
+    
+    public void setControls(List<LegalControl> controls) {
+    	this.controls = controls;
+    }
+
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+        ServiceLegalAssessment serviceLegalAssessment = (ServiceLegalAssessment) o;
+        if (serviceLegalAssessment.getId() == null || getId() == null) {
+            return false;
+        }
+        return Objects.equals(getId(), serviceLegalAssessment.getId());
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hashCode(getId());
+    }
+
+    @Override
+    public String toString() {
+    	StringBuffer buffer = new StringBuffer("ServiceLegalAssessment {");
+    	buffer.append("id=").append(getId());
+    	buffer.append(", serviceid=").append(getServiceid());
+    	buffer.append(", controlid=").append(getControlid());
+    	buffer.append(", score=").append(getScore());
+    	buffer.append(", justification=").append(getJustification());
+    	buffer.append(", question=").append(getQuestion());
+    	buffer.append(", issimplecontrol=").append(isIssimplecontrol());
+    	buffer.append(", answerid=").append(getAnswerid());
+    	buffer.append(", answer=").append(getAnswer());
+    	buffer.append(", answerscore=").append(getAnswerscore());
+    	buffer.append(", deleteddate=").append(getDeleteddate());
+    	buffer.append(", controls=[");
+    	if (controls != null && !controls.isEmpty()) {
+    		for (LegalControl ctrl : controls) {
+    			buffer.append(ctrl).append(" , ");
+    		}
+    	}
+    	buffer.append("]}");
+    	return buffer.toString();
+    }
+}
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/ServiceLegalManagement.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/ServiceLegalManagement.java
new file mode 100644
index 0000000000000000000000000000000000000000..0a15a6c703d3f9088e9ad8460720f1074425842c
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/ServiceLegalManagement.java
@@ -0,0 +1,199 @@
+/*******************************************************************************
+ * Copyright (c) 2017 Tecnalia.
+ * 
+ * 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.
+ * 
+ * The code has been contributed over a stub generated with the JHipster
+ * Application generator http://www.jhipster.tech/.
+ * 
+ * Contributors (in alphabetical order):
+ * 
+ * Alberto Molinuevo					Tecnalia
+ * Gorka Benguria                       Tecnalia
+ * Iñaki Etxaniz                        Tecnalia
+ * Juncal Alonso                        Tecnalia
+ * Leire Orue-Echevarria                Tecnalia
+ * Maria Jose lopez                     Tecnalia
+ * Marisa Escalante                     Tecnalia
+ * 
+ * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+ ******************************************************************************/
+package eu.decideh2020.acsmi.backend.services.server.domain;
+
+import java.io.Serializable;
+import java.time.ZonedDateTime;
+import java.util.Objects;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.validation.constraints.NotNull;
+
+import org.hibernate.annotations.Cache;
+import org.hibernate.annotations.CacheConcurrencyStrategy;
+
+/**
+ * A ServiceLegalManagement.
+ */
+@Entity
+@Table(name = "service_legal_management")
+@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
+public class ServiceLegalManagement extends AbstractAuditingEntity implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+    
+    @NotNull
+    @Column(name = "nocontractalert", nullable = false)
+    private Boolean nocontractalert;
+    
+    @NotNull
+    @Column(name = "modifiedcontractalert", nullable = false)
+    private Boolean modifiedcontractalert;
+    
+    @NotNull
+    @Column(name = "formalert", nullable = false)
+    private Boolean formalert;
+    
+    @NotNull
+    @Column(name = "serviceid", nullable = false)
+    private Long serviceid;
+    
+    @Column(name = "deleted_date")
+    private ZonedDateTime deleteddate;
+    
+    
+    public ServiceLegalManagement() {}
+    
+    public ServiceLegalManagement(final Boolean nocontractalert, final Boolean modifiedcontractalert,
+    		final Boolean formalert, final Long serviceid) {
+    	this.nocontractalert = nocontractalert;
+    	this.modifiedcontractalert = modifiedcontractalert;
+    	this.formalert = formalert;
+    	this.serviceid = serviceid;
+    }
+    
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+    
+    public Boolean isNocontractalert() {
+        return nocontractalert;
+    }
+
+    public ServiceLegalManagement nocontractalert(Boolean nocontractalert) {
+        this.nocontractalert = nocontractalert;
+        return this;
+    }
+
+    public void setNocontractalert(Boolean nocontractalert) {
+        this.nocontractalert = nocontractalert;
+    }
+    
+    public Boolean isModifiedcontractalert() {
+        return modifiedcontractalert;
+    }
+
+    public ServiceLegalManagement modifiedcontractalert(Boolean modifiedcontractalert) {
+        this.modifiedcontractalert = modifiedcontractalert;
+        return this;
+    }
+
+    public void setModifiedcontractalert(Boolean modifiedcontractalert) {
+        this.modifiedcontractalert = modifiedcontractalert;
+    }
+    
+    public Boolean isFormalert() {
+        return formalert;
+    }
+
+    public ServiceLegalManagement formalert(Boolean formalert) {
+        this.formalert = formalert;
+        return this;
+    }
+
+    public void setFormalert(Boolean formalert) {
+        this.formalert = formalert;
+    }
+    
+    public Long getServiceid() {
+        return serviceid;
+    }
+
+    public ServiceLegalManagement serviceid(Long serviceid) {
+        this.serviceid = serviceid;
+        return this;
+    }
+
+    public void setServiceid(Long serviceid) {
+        this.serviceid = serviceid;
+    }
+    
+    public ZonedDateTime getDeleteddate() {
+        return deleteddate;
+    }
+
+    public ServiceLegalManagement deleteddate(ZonedDateTime deleteddate) {
+        this.deleteddate = deleteddate;
+        return this;
+    }
+
+    public void setDeleteddate(ZonedDateTime deleteddate) {
+        this.deleteddate = deleteddate;
+    }
+
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+        ServiceLegalManagement serviceLegalManagement = (ServiceLegalManagement) o;
+        if (serviceLegalManagement.getId() == null || getId() == null) {
+            return false;
+        }
+        return Objects.equals(getId(), serviceLegalManagement.getId());
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hashCode(getId());
+    }
+
+    @Override
+    public String toString() {
+    	StringBuffer buffer = new StringBuffer("ServiceLegalManagement {");
+    	buffer.append("id=").append(getId());
+    	buffer.append(", nocontractalert=").append(isNocontractalert());
+    	buffer.append(", modifiedcontractalert=").append(isModifiedcontractalert());
+    	buffer.append(", formalert=").append(isFormalert());
+    	buffer.append(", serviceid=").append(getServiceid());
+    	buffer.append(", deleteddate=").append(getDeleteddate());
+    	buffer.append("}");
+    	return buffer.toString();
+    }
+}
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/User.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/User.java
index d430c6123cd076cecbaef1a65782d6662a22d38d..6c59afc5955c92a2ec13363bd084de44a5a085f8 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/User.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/User.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/package-info.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/package-info.java
index cb67994ea73da699277a997ae99086fdb3d58322..7bda20f6f52aa539c130a58266025fb8c6254819 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/package-info.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/package-info.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/vo/AttributeVO.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/vo/AttributeVO.java
index 4f0cff2ff9dbd8a3c5e974e4862a7be8e6f4d5e0..9880b406d0b9eeec001ee24eae6763eea6dd7402 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/vo/AttributeVO.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/vo/AttributeVO.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
@@ -43,7 +44,7 @@ public class AttributeVO implements Serializable {
     private String name;
     private String nfrname;
     private Boolean isenumeration;
-    private Boolean ischecklist;
+    private Boolean isform;
     private Boolean iscommon;
     private Boolean isfunctionalrequirement;
     private Long parentid;
@@ -51,7 +52,7 @@ public class AttributeVO implements Serializable {
     private String units;
     private String unitfactor;
     private String unitrule;
-    private String checklistevalrule;
+    private String evalrule;
     private String unitvalue;
     private String checklistvalue;
     private Long valueid;
@@ -95,12 +96,12 @@ public class AttributeVO implements Serializable {
         this.isenumeration = isenumeration;
     }
     
-    public Boolean isIschecklist() {
-        return ischecklist;
+    public Boolean isIsform() {
+        return isform;
     }
 
-    public void setIschecklist(final Boolean ischecklist) {
-        this.ischecklist = ischecklist;
+    public void setIsform(final Boolean isform) {
+        this.isform = isform;
     }
     
     public Boolean isIscommon() {
@@ -159,12 +160,12 @@ public class AttributeVO implements Serializable {
         this.unitrule = unitrule;
     }
     
-    public String getChecklistevalrule() {
-        return checklistevalrule;
+    public String getEvalrule() {
+        return evalrule;
     }
 
-    public void setChecklistevalrule(final String checklistevalrule) {
-        this.checklistevalrule = checklistevalrule;
+    public void setEvalrule(final String evalrule) {
+        this.evalrule = evalrule;
     }
     
     public String getUnitvalue() {
@@ -259,7 +260,7 @@ public class AttributeVO implements Serializable {
             ", name=" + getName() +
             ", nfrname=" + getNfrname() +
             ", isenumeration=" + isIsenumeration() +
-            ", ischecklist=" + isIschecklist() +
+            ", isform=" + isIsform() +
             ", iscommon=" + isIscommon() +
             ", isfunctionalrequirement=" + isIsfunctionalrequirement() +
             ", parentid=" + getParentid() +
@@ -267,7 +268,7 @@ public class AttributeVO implements Serializable {
             ", units=" + getUnits() +
             ", unitfactor=" + getUnitfactor() +
             ", unitrule=" + getUnitrule() +
-            ", checklistevalrule=" + getChecklistevalrule() +
+            ", evalrule=" + getEvalrule() +
             ", unitvalue=" + getUnitvalue() +
             ", checklistvalue=" + getChecklistvalue() +
             ", valueid=" + getValueid() +
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/vo/FieldValueVO.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/vo/FieldValueVO.java
index 58a71029f2627f12c1489e948a81a12cfc44895d..f876aaddc4d0cb6d08b9cc26d4a1c09cec2ef88d 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/vo/FieldValueVO.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/vo/FieldValueVO.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/vo/FilterAttributeVO.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/vo/FilterAttributeVO.java
index c77608bc83a7fa69f9bdf19d213db4f0ae1fcfe9..05af0393cd7c32e258663920ef3cf9b49c8d9f9b 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/vo/FilterAttributeVO.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/vo/FilterAttributeVO.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/vo/FilterServiceVO.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/vo/FilterServiceVO.java
index 59813020df9930dcf85873ef977f070a3765dbea..e3691bd0c9d2f547bd2ff256044f9aa93ff9e35b 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/vo/FilterServiceVO.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/vo/FilterServiceVO.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
@@ -42,12 +43,13 @@ public class FilterServiceVO implements Serializable {
     private static final long serialVersionUID = 1L;
     
    
-    private Long classid;    
+    private Long classid;
+    private String provider;
+    private String incidences;
     private List<FilterAttributeVO> attributes;
     
     
     public FilterServiceVO() {
-    	this.classid = null;
     	this.attributes = new ArrayList<FilterAttributeVO>();
     }
     
@@ -56,6 +58,19 @@ public class FilterServiceVO implements Serializable {
     	this.attributes = new ArrayList<FilterAttributeVO>();
     }
     
+    public FilterServiceVO(final Long classid, final String provider) {
+    	this.classid = classid;
+    	this.provider = provider;
+    	this.attributes = new ArrayList<FilterAttributeVO>();
+    }
+    
+    public FilterServiceVO(final Long classid, final String provider, final String incidences) {
+    	this.classid = classid;
+    	this.provider = provider;
+    	this.incidences = incidences;
+    	this.attributes = new ArrayList<FilterAttributeVO>();
+    }
+    
     
     public Long getClassid() {
         return classid;
@@ -65,6 +80,22 @@ public class FilterServiceVO implements Serializable {
         this.classid = classid;
     }
     
+    public String getProvider() {
+        return provider;
+    }
+
+    public void setProvider(final String provider) {
+        this.provider = provider;
+    }
+    
+    public String getIncidences() {
+    	return incidences;
+    }
+    
+    public void setIncidences(final String incidences) {
+    	this.incidences = incidences;
+    }
+    
     public List<FilterAttributeVO> getAttributes() {
     	return attributes;
     }
@@ -97,8 +128,10 @@ public class FilterServiceVO implements Serializable {
     @Override
     public String toString() {
     	StringBuffer ret = new StringBuffer();
-    	ret.append("FilterServiceVO{");
+    	ret.append("FilterServiceVO {");
     	ret.append("classid=").append(getClassid());
+    	ret.append(", provider=").append(getProvider());
+    	ret.append(", incidences=").append(getIncidences());
     	ret.append(", attributes=[");
     	for (FilterAttributeVO vo : attributes) {
     		ret.append(vo.toString()).append(",");
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/vo/InfluxDBConfigVO.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/vo/InfluxDBConfigVO.java
index b5bf695fe7a0687a7da784381f656a5c8d208e66..c001561cc455e9c0b9cedb2540cbfe5e4af3354c 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/vo/InfluxDBConfigVO.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/vo/InfluxDBConfigVO.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/vo/ServiceAttributeVO.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/vo/ServiceAttributeVO.java
index dfe85ad2247d09d8a46c50cc5e03983b5ecad3e9..d4e1131cf60ff55954f339c51e0a5a3a602d5d98 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/vo/ServiceAttributeVO.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/vo/ServiceAttributeVO.java
@@ -19,6 +19,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/vo/ServiceClassFullInfoVO.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/vo/ServiceClassFullInfoVO.java
index 568066dd125080bf5be67d91750d09e11c900919..1d3b6c5b6ccdcc140f77f207e7d0f34ed99ffbf3 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/vo/ServiceClassFullInfoVO.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/vo/ServiceClassFullInfoVO.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
@@ -45,7 +46,7 @@ public class ServiceClassFullInfoVO implements Serializable {
     private String attributename;
     private String attributenfrname;
     private Boolean isenumeration;
-    private Boolean ischecklist;
+    private Boolean isform;
     private Boolean iscommon;
     private Boolean isfunctionalrequirement;
     private Long parentid;
@@ -53,7 +54,7 @@ public class ServiceClassFullInfoVO implements Serializable {
     private String units;
     private String unitfactor;
     private String unitrule;
-    private String checklistevalrule;
+    private String evalrule;
     private String unitvalue;
     private String checklistvalue;
     private Long classattributeid;
@@ -65,9 +66,9 @@ public class ServiceClassFullInfoVO implements Serializable {
     
     public ServiceClassFullInfoVO(final Long id, final String name, final Long attributetypeid,
     		final String attributename, final String attributenfrname, final Boolean isenumeration,
-    		final Boolean ischecklist, final Boolean iscommon, final Boolean isfunctionalrequirement,
+    		final Boolean isform, final Boolean iscommon, final Boolean isfunctionalrequirement,
     		final Long parentid, final Long childid, final String units, final String unitfactor,
-    		final String unitrule, final String checklistevalrule, final Long classattributeid,
+    		final String unitrule, final String evalrule, final Long classattributeid,
     		final Integer weight, final Boolean ismandatory) {
     	this.id = id;
     	this.name = name;
@@ -75,7 +76,7 @@ public class ServiceClassFullInfoVO implements Serializable {
     	this.attributename = attributename;
     	this.attributenfrname = attributenfrname;
     	this.isenumeration = isenumeration;
-    	this.ischecklist = ischecklist;
+    	this.isform = isform;
     	this.iscommon = iscommon;
     	this.isfunctionalrequirement = isfunctionalrequirement;
     	this.parentid = parentid;
@@ -83,7 +84,7 @@ public class ServiceClassFullInfoVO implements Serializable {
     	this.units = units;
     	this.unitfactor = unitfactor;
     	this.unitrule = unitrule;
-    	this.checklistevalrule = checklistevalrule;
+    	this.evalrule = evalrule;
     	this.unitvalue = null;
     	this.checklistvalue = null;
     	this.classattributeid = classattributeid;
@@ -141,12 +142,12 @@ public class ServiceClassFullInfoVO implements Serializable {
         this.isenumeration = isenumeration;
     }
     
-    public Boolean isIschecklist() {
-        return ischecklist;
+    public Boolean isIsform() {
+        return isform;
     }
 
-    public void setIschecklist(final Boolean ischecklist) {
-        this.ischecklist = ischecklist;
+    public void setIsform(final Boolean isform) {
+        this.isform = isform;
     }
     
     public Boolean isIscommon() {
@@ -205,12 +206,12 @@ public class ServiceClassFullInfoVO implements Serializable {
         this.unitrule = unitrule;
     }
     
-    public String getChecklistevalrule() {
-        return checklistevalrule;
+    public String getEvalrule() {
+        return evalrule;
     }
 
-    public void setChecklistevalrule(final String checklistevalrule) {
-        this.checklistevalrule = checklistevalrule;
+    public void setEvalrule(final String evalrule) {
+        this.evalrule = evalrule;
     }
     
     public String getUnitvalue() {
@@ -283,7 +284,7 @@ public class ServiceClassFullInfoVO implements Serializable {
             ", attributename='" + getAttributename() + "'" +
             ", attributenfrname='" + getAttributenfrname() + "'" +
             ", isenumeration='" + isIsenumeration() + "'" +
-            ", ischecklist='" + isIschecklist() + "'" +
+            ", isform='" + isIsform() + "'" +
             ", iscommon='" + isIscommon() + "'" +
             ", isfunctionalrequirement='" + isIsfunctionalrequirement() + "'" +
             ", parentid='" + getParentid() + "'" +
@@ -291,7 +292,7 @@ public class ServiceClassFullInfoVO implements Serializable {
             ", units='" + getUnits() + "'" +
             ", unitfactor='" + getUnitfactor() + "'" +
             ", unitrule='" + getUnitrule() + "'" +
-            ", checklistevalrule='" + getChecklistevalrule() + "'" +
+            ", evalrule='" + getEvalrule() + "'" +
             ", unitvalue='" + getUnitvalue() + "'" +
             ", checklistvalue='" + getChecklistvalue() + "'" +
             ", classattributeid='" + getClassattributeid() + "'" +
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/vo/ServiceDevOpsInfoVO.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/vo/ServiceDevOpsInfoVO.java
index 96c77433b4151d6d7113b3e78de5af157c3a39a4..fc1902946dfad12af7d985fcd6b66fc74810d867 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/vo/ServiceDevOpsInfoVO.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/vo/ServiceDevOpsInfoVO.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/vo/ServiceDevOpsQueryInfoVO.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/vo/ServiceDevOpsQueryInfoVO.java
index 197e38a3df33c672eaf8a9c57e736a83106f2210..f457456b1a944bd72c7ce66b705cde39b86503da 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/vo/ServiceDevOpsQueryInfoVO.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/vo/ServiceDevOpsQueryInfoVO.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/vo/ServiceFullInfoVO.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/vo/ServiceFullInfoVO.java
index 12583dc8b81b460aa715fefb0e3a19d89cb14a5e..53b0d351bc736f3d1a2cfbff955b552d27270280 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/vo/ServiceFullInfoVO.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/vo/ServiceFullInfoVO.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
@@ -51,7 +52,7 @@ public class ServiceFullInfoVO implements Serializable {
     private String attributename;
     private String attributenfrname;
     private Boolean isenumeration;
-    private Boolean ischecklist;
+    private Boolean isform;
     private Boolean iscommon;
     private Boolean isfunctionalrequirement;
     private Long parentid;
@@ -59,7 +60,7 @@ public class ServiceFullInfoVO implements Serializable {
     private String units;
     private String unitfactor;
     private String unitrule;
-    private String checklistevalrule;
+    private String evalrule;
     private String unitvalue;
     private String checklistvalue;
     private Long attributevalueid;
@@ -73,9 +74,9 @@ public class ServiceFullInfoVO implements Serializable {
     public ServiceFullInfoVO(final Long id, final String name, final byte[] firstcontract,
     		final byte[] secondcontract, final byte[] thirdcontract, final Long classid, final String classname,
     		final Long attributetypeid, final String attributename, final String attributenfrname,
-    		final Boolean isenumeration, final Boolean ischecklist, final Boolean iscommon,
+    		final Boolean isenumeration, final Boolean isform, final Boolean iscommon,
     		final Boolean isfunctionalrequirement, final Long parentid, final Long childid, final String units,
-    		final String unitfactor, final String unitrule, final String checklistevalrule, final String unitvalue,
+    		final String unitfactor, final String unitrule, final String evalrule, final String unitvalue,
     		final String checklistvalue, final Long attributevalueid, final String value, final String definition,
     		final ZonedDateTime deleteddate) {
     	this.id = id;
@@ -89,7 +90,7 @@ public class ServiceFullInfoVO implements Serializable {
     	this.attributename = attributename;
     	this.attributenfrname = attributenfrname;
     	this.isenumeration = isenumeration;
-    	this.ischecklist = ischecklist;
+    	this.isform = isform;
     	this.iscommon = iscommon;
     	this.isfunctionalrequirement = isfunctionalrequirement;
     	this.parentid = parentid;
@@ -97,7 +98,7 @@ public class ServiceFullInfoVO implements Serializable {
     	this.units = units;
     	this.unitfactor = unitfactor;
     	this.unitrule = unitrule;
-    	this.checklistevalrule = checklistevalrule;
+    	this.evalrule = evalrule;
     	this.unitvalue = unitvalue;
     	this.checklistvalue = checklistvalue;
     	this.attributevalueid = attributevalueid;
@@ -196,12 +197,12 @@ public class ServiceFullInfoVO implements Serializable {
         this.isenumeration = isenumeration;
     }
     
-    public Boolean isIschecklist() {
-        return ischecklist;
+    public Boolean isIsform() {
+        return isform;
     }
 
-    public void setIschecklist(final Boolean ischecklist) {
-        this.ischecklist = ischecklist;
+    public void setIsform(final Boolean isform) {
+        this.isform = isform;
     }
     
     public Boolean isIscommon() {
@@ -260,12 +261,12 @@ public class ServiceFullInfoVO implements Serializable {
         this.unitrule = unitrule;
     }
     
-    public String getChecklistevalrule() {
-        return checklistevalrule;
+    public String getEvalrule() {
+        return evalrule;
     }
 
-    public void setChecklistevalrule(final String checklistevalrule) {
-        this.checklistevalrule = checklistevalrule;
+    public void setEvalrule(final String evalrule) {
+        this.evalrule = evalrule;
     }
     
     public String getUnitvalue() {
@@ -348,7 +349,7 @@ public class ServiceFullInfoVO implements Serializable {
             ", attributename='" + getAttributename() + "'" +
             ", attributenfrname='" + getAttributenfrname() + "'" +
             ", isenumeration='" + isIsenumeration() + "'" +            
-            ", ischecklist='" + isIschecklist() + "'" +
+            ", isform='" + isIsform() + "'" +
             ", iscommon='" + isIscommon() + "'" +
             ", isfunctionalrequirement='" + isIsfunctionalrequirement() + "'" +
             ", parentid='" + getParentid() + "'" +
@@ -356,7 +357,7 @@ public class ServiceFullInfoVO implements Serializable {
             ", units='" + getUnits() + "'" +
             ", unitfactor='" + getUnitfactor() + "'" +
             ", unitrule='" + getUnitrule() + "'" +
-            ", checklistevalrule='" + getChecklistevalrule() + "'" +
+            ", evalrule='" + getEvalrule() + "'" +
             ", unitvalue='" + getUnitvalue() + "'" +
             ", checklistvalue='" + getChecklistvalue() + "'" +
             ", attributevalueid='" + getAttributevalueid() + "'" +
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/vo/ServiceNFRInfoExtendedVO.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/vo/ServiceNFRInfoExtendedVO.java
index 0c14e95e20a80511527c85ade3f0417a35e6d331..c8c3cbc30bcc2cf70754ad751406d4c36f7d5ebc 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/vo/ServiceNFRInfoExtendedVO.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/vo/ServiceNFRInfoExtendedVO.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/vo/ServiceNFRInfoVO.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/vo/ServiceNFRInfoVO.java
index bdf8ce897569746ff664f2ff68da94d8f4002c6a..104aca751952bd5fbecc82d608cda82bee83c6d8 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/vo/ServiceNFRInfoVO.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/domain/vo/ServiceNFRInfoVO.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/DatasourceConfig.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/DatasourceConfig.java
index b37de1399d1a2e518dce234051d0b142cd718a81..f062ddce30c60585a3fe937ae015869b424f63d1 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/DatasourceConfig.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/DatasourceConfig.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/DefinitionRepository.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/DefinitionRepository.java
index 4f28a3fc6c266e3d3803f285849dff81d845f14e..e98d8af399f1d7d08e0d6b835c21584d6bb7f187 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/DefinitionRepository.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/DefinitionRepository.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
@@ -29,7 +30,10 @@
  ******************************************************************************/
 package eu.decideh2020.acsmi.backend.services.server.repository;
 
+import java.util.List;
+
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
 
 import eu.decideh2020.acsmi.backend.services.server.domain.Definition;
@@ -40,4 +44,9 @@ import eu.decideh2020.acsmi.backend.services.server.domain.Definition;
  */
 @Repository
 public interface DefinitionRepository extends JpaRepository<Definition,Long> {
+	@Query("select d from Definition d where d.typeid = ?1 order by d.value")
+	public List<Definition> getDefinitionsByAttribute(Long typeid);
+	
+	@Query("select d from Definition d where d.code LIKE ?1% order by d.id")
+	public List<Definition> getDefinitionsByStartingCode(String code);	
 }
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/LegalAssessmentRepository.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/LegalAssessmentRepository.java
new file mode 100644
index 0000000000000000000000000000000000000000..fd2b26b4a1dbc15fbcb283c084cf7d46178c6ec0
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/LegalAssessmentRepository.java
@@ -0,0 +1,62 @@
+/*******************************************************************************
+ * Copyright (c) 2017 Tecnalia.
+ * 
+ * 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.
+ * 
+ * The code has been contributed over a stub generated with the JHipster
+ * Application generator http://www.jhipster.tech/.
+ * 
+ * Contributors (in alphabetical order):
+ * 
+ * Alberto Molinuevo					Tecnalia
+ * Gorka Benguria                       Tecnalia
+ * Iñaki Etxaniz                        Tecnalia
+ * Juncal Alonso                        Tecnalia
+ * Leire Orue-Echevarria                Tecnalia
+ * Maria Jose lopez                     Tecnalia
+ * Marisa Escalante                     Tecnalia
+ * 
+ * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+ ******************************************************************************/
+package eu.decideh2020.acsmi.backend.services.server.repository;
+
+import java.util.List;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.stereotype.Repository;
+
+import eu.decideh2020.acsmi.backend.services.server.domain.LegalAssessment;
+import eu.decideh2020.acsmi.backend.services.server.domain.ServiceLegalAssessment;
+
+
+/**
+ * Spring Data JPA repository for the LegalAssessment and ServiceLegalAssessment entities.
+ */
+@Repository
+public interface LegalAssessmentRepository extends JpaRepository<LegalAssessment,Long>, LegalAssessmentRepositoryCustom {
+	@Modifying
+	@Query("delete from ServiceLegalAssessment s where s.serviceid = ?1")
+	public void deleteServiceLegalAssessmentQuestionnaire(Long serviceid);
+	
+	@Modifying
+	@Query("update ServiceLegalAssessment as s set s.score = 0, s.justification = null where s.serviceid = ?1 and s.controlid in (select l.id from LegalControl l where l.issimplecontrol = false)")
+	public void resetServiceLegalAssessmentQuestionnaire(Long serviceid);
+	
+	@Query("select new eu.decideh2020.acsmi.backend.services.server.domain.LegalAssessment(l.id, l.controlid, c.question, c.issimplecontrol, a.id, a.answer, l.score) from LegalAssessment l join LegalControl c on c.id = l.controlid join LegalAnswer a on a.id = l.answerid order by l.id")
+	public List<LegalAssessment> getLegalAssessments();
+	
+	@Query("select new eu.decideh2020.acsmi.backend.services.server.domain.ServiceLegalAssessment(s.id, s.serviceid, s.controlid, s.score, s.justification, c.question, c.issimplecontrol, a.id, a.answer, l.score) from ServiceLegalAssessment s join LegalControl c on c.id = s.controlid join LegalAssessment l on c.id = l.controlid join LegalAnswer a on a.id = l.answerid where s.serviceid = ?1 order by s.controlid")
+	public List<ServiceLegalAssessment> getServiceLegalAssessments(Long serviceid);
+}
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/LegalAssessmentRepositoryCustom.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/LegalAssessmentRepositoryCustom.java
new file mode 100644
index 0000000000000000000000000000000000000000..b6b8e254dfd79c72f8d7e840331de61c2431042e
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/LegalAssessmentRepositoryCustom.java
@@ -0,0 +1,8 @@
+package eu.decideh2020.acsmi.backend.services.server.repository;
+
+import eu.decideh2020.acsmi.backend.services.server.domain.ServiceLegalAssessment;
+
+
+public interface LegalAssessmentRepositoryCustom {
+	public void saveLegalAssessmentQuestionnaire(ServiceLegalAssessment object) throws Exception;
+}
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/LegalAssessmentRepositoryImpl.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/LegalAssessmentRepositoryImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..a6be8a37a844e05ba5e06ae35844943d0e0ad355
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/LegalAssessmentRepositoryImpl.java
@@ -0,0 +1,92 @@
+package eu.decideh2020.acsmi.backend.services.server.repository;
+
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import eu.decideh2020.acsmi.backend.services.server.domain.LegalControl;
+import eu.decideh2020.acsmi.backend.services.server.domain.ServiceLegalAssessment;
+
+
+public class LegalAssessmentRepositoryImpl implements LegalAssessmentRepositoryCustom {
+	
+	private final Logger log = LoggerFactory.getLogger(LegalAssessmentRepositoryImpl.class);
+	
+	@PersistenceContext
+    EntityManager entityManager;
+	
+	
+	/**
+	 * Updates a legal assessment questionnaire.
+	 * @param object The legal assessment questionnaire.
+	 * @throws Exception
+	 */
+	public void saveLegalAssessmentQuestionnaire(ServiceLegalAssessment object) throws Exception {
+		final String deleteQuery = buildDeleteQuery(object);
+		final String insertQuery = buildInsertQuery(object);
+		if (deleteQuery != null && insertQuery != null) {
+			log.debug("saveLegalAssessmentQuestionnaire : deleting existing assessments...");
+			entityManager.createNativeQuery(deleteQuery).executeUpdate();
+			
+			log.debug("saveLegalAssessmentQuestionnaire : inserting updated assessments...");
+			entityManager.createNativeQuery(insertQuery).executeUpdate();
+		}
+	}
+	
+	
+	/**
+	 * Builds the delete query.
+	 * @param object The source object.
+	 * @return String
+	 */
+	private String buildDeleteQuery(final ServiceLegalAssessment object) {
+		StringBuffer result = null;
+		if (object != null) {
+			final List<LegalControl> controls = object.getControls();
+			if (controls != null && !controls.isEmpty()) {
+				StringBuffer controlIds = new StringBuffer("");
+				int counter = 0;
+				for (LegalControl control : controls) {
+					controlIds.append(counter > 0 ? "," : "").append(control.getId());
+					counter++;
+				}
+				result = new StringBuffer("DELETE FROM service_legal_assessment WHERE serviceid = ")
+						.append(object.getServiceid())
+						.append(" AND controlid IN (")
+						.append(controlIds).append(")");
+			}
+		}
+		
+		return result != null ? result.toString() : null;
+	}
+	
+	
+	/**
+	 * Builds the insert query.
+	 * @param object The source object.
+	 * @return String
+	 */
+	private String buildInsertQuery(final ServiceLegalAssessment object) {
+		StringBuffer result = null;
+		if (object != null) {
+			final List<LegalControl> controls = object.getControls();
+			if (controls != null && !controls.isEmpty()) {
+				result = new StringBuffer("INSERT INTO service_legal_assessment (serviceid, controlid, score, justification, created_date, last_modified_date, deleted_Date) VALUES ");
+				int counter = 0;
+				for (LegalControl control : controls) {
+					result.append(counter > 0 ? "," : "").append("(").append(object.getServiceid()).append(", ")
+						.append(control.getId()).append(", ")
+						.append(control.getScore()).append(", ")
+						.append(control.getJustification() != null ? ("'" + control.getJustification() + "'") : control.getJustification())
+						.append(", now(), now(), null)");
+					counter++;
+				}
+			}
+		}
+		return result != null ? result.toString() : null;
+	}
+}
\ No newline at end of file
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/ServiceAttributeTypeRepository.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/ServiceAttributeTypeRepository.java
index e7826e465afd85e0230028dc81ed67b726492fc2..138a302672ef069b6daa205d507f0a06deff1c2e 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/ServiceAttributeTypeRepository.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/ServiceAttributeTypeRepository.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
@@ -43,10 +44,10 @@ import eu.decideh2020.acsmi.backend.services.server.domain.ServiceAttributeType;
  */
 @Repository
 public interface ServiceAttributeTypeRepository extends JpaRepository<ServiceAttributeType,Long> {
-	@Query("select new eu.decideh2020.acsmi.backend.services.server.domain.ServiceAttributeType(s.id, s.name, s.nfrname, s.isenumeration, s.ischecklist, s.iscommon, s.isfunctionalrequirement, s.parentid, s.childid, s.units, s.unitfactor, s.unitrule, s.checklistevalrule, s.deleteddate) from ServiceAttributeType s join ServiceClassAttribute scta on s.id = scta.serviceattributetypeid where scta.serviceclassid = 0 or scta.serviceclassid = ?1 order by scta.serviceclassid, scta.weight")
+	@Query("select new eu.decideh2020.acsmi.backend.services.server.domain.ServiceAttributeType(s.id, s.name, s.nfrname, s.isenumeration, s.isform, s.iscommon, s.isfunctionalrequirement, s.parentid, s.childid, s.units, s.unitfactor, s.unitrule, s.evalrule, s.deleteddate) from ServiceAttributeType s join ServiceClassAttribute scta on s.id = scta.serviceattributetypeid where scta.serviceclassid = 0 or scta.serviceclassid = ?1 order by scta.serviceclassid, scta.weight")
 	public List<ServiceAttributeType> findServiceAttributeTypesByClassid(Long classid);
 	
-	@Query("select new eu.decideh2020.acsmi.backend.services.server.domain.ServiceAttributeType(s.id, s.name, s.nfrname, s.isenumeration, s.ischecklist, s.iscommon, s.isfunctionalrequirement, s.parentid, s.childid, s.units, s.unitfactor, s.unitrule, s.checklistevalrule, s.deleteddate) from ServiceAttributeType s join ServiceClassAttribute scta on s.id = scta.serviceattributetypeid where (scta.serviceclassid = 0 or scta.serviceclassid = ?1) and s.id not in (?2) order by scta.serviceclassid, scta.weight")
+	@Query("select new eu.decideh2020.acsmi.backend.services.server.domain.ServiceAttributeType(s.id, s.name, s.nfrname, s.isenumeration, s.isform, s.iscommon, s.isfunctionalrequirement, s.parentid, s.childid, s.units, s.unitfactor, s.unitrule, s.evalrule, s.deleteddate) from ServiceAttributeType s join ServiceClassAttribute scta on s.id = scta.serviceattributetypeid where (scta.serviceclassid = 0 or scta.serviceclassid = ?1) and s.id not in (?2) order by scta.serviceclassid, scta.weight")
 	public List<ServiceAttributeType> findServiceAttributeTypesByClassidExcludingAttributes(Long classid, List<Long> excludedAttributeId);
 	
 	@Query("select s from ServiceAttributeType s where s.parentid != null")
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/ServiceAttributeValueRepository.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/ServiceAttributeValueRepository.java
index 0c411b26345f3cf90e6c06a7cfae8207cb04de81..f46b423095ed8b3d78163f45b3a777ffa9be2868 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/ServiceAttributeValueRepository.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/ServiceAttributeValueRepository.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
@@ -51,4 +52,8 @@ public interface ServiceAttributeValueRepository extends JpaRepository<ServiceAt
 	@Modifying
 	@Query("update ServiceAttributeValue as s set deleteddate = ?1  where s.serviceid = ?2")
 	public void updateDeletedDateByIdService(ZonedDateTime deletedDate, Long idservice);
+	
+	@Modifying
+	@Query("update ServiceAttributeValue as s set s.serviceattributevalue = ?2 where s.serviceid = ?1 and s.serviceattributetypeid = 24")
+	public void updateLegalLevelValue(Long idservice, String value);
 }
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/ServiceClassAttributeRepository.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/ServiceClassAttributeRepository.java
index 09b1fc995e53f67d2ad9d9f87b1fbc2318ff05a0..8c9a952f7377da78aabb96a9fdca9f19115d6bfe 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/ServiceClassAttributeRepository.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/ServiceClassAttributeRepository.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
@@ -43,6 +44,6 @@ import eu.decideh2020.acsmi.backend.services.server.domain.ServiceClassAttribute
  */
 @Repository
 public interface ServiceClassAttributeRepository extends JpaRepository<ServiceClassAttribute,Long> {
-	@Query("select new eu.decideh2020.acsmi.backend.services.server.domain.ServiceClassAttribute(t.id, t.weight, t.ismandatory, t.serviceclassid, t.serviceattributetypeid, t.deleteddate, s.name, s.isenumeration, s.ischecklist, s.isfunctionalrequirement, s.parentid, s.childid) from ServiceClassAttribute t join ServiceAttributeType s on t.serviceattributetypeid = s.id where t.serviceclassid = ?1 or t.serviceclassid = 0 order by t.serviceclassid")
+	@Query("select new eu.decideh2020.acsmi.backend.services.server.domain.ServiceClassAttribute(t.id, t.weight, t.ismandatory, t.serviceclassid, t.serviceattributetypeid, t.deleteddate, s.name, s.isenumeration, s.isform, s.isfunctionalrequirement, s.parentid, s.childid) from ServiceClassAttribute t join ServiceAttributeType s on t.serviceattributetypeid = s.id where t.serviceclassid = ?1 or t.serviceclassid = 0 order by t.serviceclassid")
 	public List<ServiceClassAttribute> findAttributes(Long classid);
 }
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/ServiceClassRepository.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/ServiceClassRepository.java
index 62ee8fdccab7b5ca6e2c9851dc5c96af2188d68e..2119476d5770ce7967333e11b0bc0c19cf26e711 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/ServiceClassRepository.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/ServiceClassRepository.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
@@ -44,6 +45,6 @@ import eu.decideh2020.acsmi.backend.services.server.domain.vo.ServiceClassFullIn
  */
 @Repository
 public interface ServiceClassRepository extends JpaRepository<ServiceClass,Long> {
-	@Query("select new eu.decideh2020.acsmi.backend.services.server.domain.vo.ServiceClassFullInfoVO(sc.id, sc.serviceclassname, sat.id, sat.name, sat.nfrname, sat.isenumeration, sat.ischecklist, sat.iscommon, sat.isfunctionalrequirement, sat.parentid, sat.childid, sat.units, sat.unitfactor, sat.unitrule, sat.checklistevalrule, sca.id, sca.weight, sca.ismandatory) from ServiceClass sc join ServiceClassAttribute sca on sca.serviceclassid = sc.id or sca.serviceclassid = 0 join ServiceAttributeType sat on sat.id = sca.serviceattributetypeid order by sc.id, sat.id")
+	@Query("select new eu.decideh2020.acsmi.backend.services.server.domain.vo.ServiceClassFullInfoVO(sc.id, sc.serviceclassname, sat.id, sat.name, sat.nfrname, sat.isenumeration, sat.isform, sat.iscommon, sat.isfunctionalrequirement, sat.parentid, sat.childid, sat.units, sat.unitfactor, sat.unitrule, sat.evalrule, sca.id, sca.weight, sca.ismandatory) from ServiceClass sc join ServiceClassAttribute sca on sca.serviceclassid = sc.id or sca.serviceclassid = 0 join ServiceAttributeType sat on sat.id = sca.serviceattributetypeid order by sc.id, sat.id")
 	public List<ServiceClassFullInfoVO> findServiceClasses();	
 }
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/ServiceIncidenceRepository.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/ServiceIncidenceRepository.java
index 755f10af0ee520453bf012ac594fe94c48e9c811..f21b391859ca0db08e92fc23b4de63e937d2e8d7 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/ServiceIncidenceRepository.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/ServiceIncidenceRepository.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/ServiceLegalManagementRepository.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/ServiceLegalManagementRepository.java
new file mode 100644
index 0000000000000000000000000000000000000000..8b98318b90a91f17a80f4fbb55d850891903870c
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/ServiceLegalManagementRepository.java
@@ -0,0 +1,56 @@
+/*******************************************************************************
+ * Copyright (c) 2017 Tecnalia.
+ * 
+ * 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.
+ * 
+ * The code has been contributed over a stub generated with the JHipster
+ * Application generator http://www.jhipster.tech/.
+ * 
+ * Contributors (in alphabetical order):
+ * 
+ * Alberto Molinuevo					Tecnalia
+ * Gorka Benguria                       Tecnalia
+ * Iñaki Etxaniz                        Tecnalia
+ * Juncal Alonso                        Tecnalia
+ * Leire Orue-Echevarria                Tecnalia
+ * Maria Jose lopez                     Tecnalia
+ * Marisa Escalante                     Tecnalia
+ * 
+ * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+ ******************************************************************************/
+package eu.decideh2020.acsmi.backend.services.server.repository;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.stereotype.Repository;
+
+import eu.decideh2020.acsmi.backend.services.server.domain.ServiceLegalManagement;
+
+
+/**
+ * Spring Data JPA repository for the ServiceLegalManagement entity.
+ */
+@Repository
+public interface ServiceLegalManagementRepository extends JpaRepository<ServiceLegalManagement,Long> {
+	@Query("select s from ServiceLegalManagement s where s.serviceid = ?1")
+	public ServiceLegalManagement findAlertsByServiceId(Long serviceid);
+	
+	@Modifying
+	@Query("update ServiceLegalManagement as s set s.nocontractalert = false, s.modifiedcontractalert = false, s.formalert = ?2  where s.serviceid = ?1")
+	public void updateFormAlertByServiceId(Long serviceid, Boolean formAlert);
+	
+	@Modifying
+	@Query("update ServiceLegalManagement as s set s.nocontractalert = ?2, s.modifiedcontractalert = ?3, s.formalert = ?4  where s.serviceid = ?1")
+	public void updateContractAlertsByServiceId(Long serviceid, Boolean nocontractalert, Boolean modifiedcontractalert, Boolean formalert);
+}
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/ServiceRepository.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/ServiceRepository.java
index 3ef2390f68e0452f170692eff62f5a52ec8aa781..bc8d04dfb635d74d6f63de3873cf7ce6f7919d64 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/ServiceRepository.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/ServiceRepository.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
@@ -46,10 +47,10 @@ import eu.decideh2020.acsmi.backend.services.server.domain.vo.ServiceNFRInfoExte
  */
 @Repository
 public interface ServiceRepository extends JpaRepository<Service,Long>, ServiceRepositoryCustom {
-	@Query("select new eu.decideh2020.acsmi.backend.services.server.domain.Service(s.id, s.servicename, s.serviceclassid, sc.serviceclassname, s.deleteddate, si.id, si.timestamp, si.detail, si.createdDate, si.lastModifiedDate) from Service s join ServiceClass sc on sc.id = s.serviceclassid left outer join ServiceIncidence si on s.id = si.serviceid order by s.servicename")
+	@Query("select new eu.decideh2020.acsmi.backend.services.server.domain.Service(s.id, s.servicename, s.serviceclassid, sc.serviceclassname, s.deleteddate, si.id, si.timestamp, si.detail, si.realmetricvalue, si.createdDate, si.lastModifiedDate, d.value) from Service s join ServiceAttributeValue sav on s.id = sav.serviceid and sav.serviceattributetypeid = 3 join ServiceClass sc on sc.id = s.serviceclassid join Definition d on d.code = sav.serviceattributevalue left outer join ServiceIncidence si on s.id = si.serviceid order by s.servicename")
 	public List<Service> findAllServices();
 	
-	@Query("select new eu.decideh2020.acsmi.backend.services.server.domain.vo.ServiceFullInfoVO(s.id, s.servicename, s.firstcontract, s.secondcontract, s.thirdcontract, sc.id, sc.serviceclassname, sat.id, sat.name, sat.nfrname, sat.isenumeration, sat.ischecklist, sat.iscommon, sat.isfunctionalrequirement, sat.parentid, sat.childid, sat.units, sat.unitfactor, sat.unitrule, sat.checklistevalrule, sav.unitvalue, sav.checklistvalue, sav.id, sav.serviceattributevalue, d.value, s.deleteddate) from Service s join ServiceClass sc on s.serviceclassid = sc.id join ServiceAttributeValue sav on s.id = sav.serviceid join ServiceAttributeType sat on sav.serviceattributetypeid = sat.id left outer join Definition d on sav.serviceattributevalue = d.code where s.id = ?1 order by sat.id")
+	@Query("select new eu.decideh2020.acsmi.backend.services.server.domain.vo.ServiceFullInfoVO(s.id, s.servicename, s.firstcontract, s.secondcontract, s.thirdcontract, sc.id, sc.serviceclassname, sat.id, sat.name, sat.nfrname, sat.isenumeration, sat.isform, sat.iscommon, sat.isfunctionalrequirement, sat.parentid, sat.childid, sat.units, sat.unitfactor, sat.unitrule, sat.evalrule, sav.unitvalue, sav.checklistvalue, sav.id, sav.serviceattributevalue, d.value, s.deleteddate) from Service s join ServiceClass sc on s.serviceclassid = sc.id join ServiceAttributeValue sav on s.id = sav.serviceid join ServiceAttributeType sat on sav.serviceattributetypeid = sat.id left outer join Definition d on sav.serviceattributevalue = d.code where s.id = ?1 order by sat.id")
 	public List<ServiceFullInfoVO> findService(Long id);
 
 	@Query("select concat(sc.serviceclassname, ';', d.value) as devopskey FROM ServiceClass sc, Definition d where d.typeid = 3")
@@ -61,7 +62,7 @@ public interface ServiceRepository extends JpaRepository<Service,Long>, ServiceR
 	@Query("select new eu.decideh2020.acsmi.backend.services.server.domain.vo.ServiceNFRInfoExtendedVO(s.id, s.servicename, sc.serviceclassname, sat.name, sat.nfrname, sav.serviceattributevalue, sat.isenumeration, sat.iscommon) from ServiceAttributeType sat join ServiceAttributeValue sav on sat.id = sav.serviceattributetypeid join Service s on sav.serviceid = s.id join ServiceClass sc on s.serviceclassid = sc.id where sat.isfunctionalrequirement = false and s.id in (?1)")
 	public List<ServiceNFRInfoExtendedVO> getNFRInfo(List<Long> serviceids);
 	
-	@Query("select new eu.decideh2020.acsmi.backend.services.server.domain.Service(s.id, s.servicename, s.serviceclassid, sc.serviceclassname, s.deleteddate, si.id, si.timestamp, si.detail, si.createdDate, si.lastModifiedDate) from Service s join ServiceClass sc on sc.id = s.serviceclassid left outer join ServiceIncidence si on s.id = si.serviceid where s.id in (?1)")
+	@Query("select new eu.decideh2020.acsmi.backend.services.server.domain.Service(s.id, s.servicename, s.serviceclassid, sc.serviceclassname, s.deleteddate, si.id, si.timestamp, si.detail, si.realmetricvalue, si.createdDate, si.lastModifiedDate) from Service s join ServiceClass sc on sc.id = s.serviceclassid left outer join ServiceIncidence si on s.id = si.serviceid where s.id in (?1)")
 	public List<Service> getOptimusInfo(List<Long> serviceids);
 	
 	@Query("select s from Service s where s.servicename = ?1")
@@ -70,6 +71,9 @@ public interface ServiceRepository extends JpaRepository<Service,Long>, ServiceR
 	@Query("select s from Service s where s.servicename = ?2 and s.id <> ?1")
 	public Service checkIfServiceExistsForUpdate(Long identifier, String name);
 	
-	@Query("select new eu.decideh2020.acsmi.backend.services.server.domain.Service(s.id, s.servicename, s.serviceclassid, sc.serviceclassname, s.deleteddate, si.id, si.timestamp, si.detail, si.createdDate, si.lastModifiedDate) from Service s join ServiceClass sc on sc.id = s.serviceclassid join ServiceAttributeValue sav on s.id = sav.serviceid join Definition d on sav.serviceattributevalue = d.code left outer join ServiceIncidence si on s.id = si.serviceid where d.typeid = ?1 and d.value = ?2 order by s.servicename")
+	@Query("select new eu.decideh2020.acsmi.backend.services.server.domain.Service(s.id, s.servicename, s.serviceclassid, sc.serviceclassname, s.deleteddate, si.id, si.timestamp, si.detail, si.realmetricvalue, si.createdDate, si.lastModifiedDate) from Service s join ServiceClass sc on sc.id = s.serviceclassid join ServiceAttributeValue sav on s.id = sav.serviceid join Definition d on sav.serviceattributevalue = d.code left outer join ServiceIncidence si on s.id = si.serviceid where d.typeid = ?1 and d.value = ?2 order by s.servicename")
 	public List<Service> findServicesByCSP(Long typeid, String cspname);
+	
+	@Query("select new eu.decideh2020.acsmi.backend.services.server.domain.Service(s.id, s.servicename, sc.serviceclassname, d.value, slm.nocontractalert, slm.modifiedcontractalert, slm.formalert) from Service s join ServiceClass sc on sc.id = s.serviceclassid join ServiceAttributeValue sav on s.id = sav.serviceid join ServiceLegalManagement slm on s.id = slm.serviceid join Definition d on d.code = sav.serviceattributevalue where sav.serviceattributetypeid = 3 order by s.servicename")
+	public List<Service> getServicesShortInfo();
 }
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/ServiceRepositoryImpl.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/ServiceRepositoryImpl.java
index 606afdfcc3f4923371644d6f546bac1656c05f37..908af0fee95a4147c6ba404192f22b1722bd8362 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/ServiceRepositoryImpl.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/ServiceRepositoryImpl.java
@@ -14,6 +14,8 @@ import javax.persistence.PersistenceContext;
 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.ObjectMapper;
 
 import eu.decideh2020.acsmi.backend.services.server.domain.Service;
@@ -30,6 +32,7 @@ public class ServiceRepositoryImpl implements ServiceRepositoryCustom {
 	private final String OPERATOR_GE = ">=";
 	private final String OPERATOR_LE = "<=";
 	private final String COMA_SEPARATOR = ",";
+	private final long PROVIDER_ATTRIBUTE_ID = 3L;
 	
 	private Map<Long, Service> matchMap;
 	private List<Service> matchList;
@@ -49,72 +52,106 @@ public class ServiceRepositoryImpl implements ServiceRepositoryCustom {
 		List<Service> result = null;
 		
 		if (filter != null && !filter.isEmpty()) {
-			ObjectMapper mapper = new ObjectMapper();
-    		FilterServiceVO filterServiceVO = mapper.readValue(filter, FilterServiceVO.class);
-    		if (filterServiceVO != null) {    			
-    			String strQuery = buildQueryString(filterServiceVO.getClassid(), filterServiceVO.getAttributes());
+			final FilterServiceVO filterServiceVO = buildFilter(filter);
+			filterServiceVO.setIncidences(Boolean.valueOf(filterServiceVO.getIncidences()).toString());
+    		if (filterServiceVO != null) {
+    			final String strQuery = buildQueryString(filterServiceVO);
     			if (strQuery != null) {
     				log.debug("discover : creating Query...  :  " + strQuery);
     				List<Service> serviceList = buildServiceList(entityManager.createNativeQuery(strQuery).getResultList());
+    				
+    				// Forzar valor de atributo
+    				result = forceAttribute(serviceList, filterServiceVO);
+    				
+    				// Cargar valor del proveedor para visualización
+    				result = loadProviderToScreen(result);
+    				
     				if (filterServiceVO.getAttributes() == null || filterServiceVO.getAttributes().isEmpty()) {
-    					// Solo se realiza la búsqueda por clase de servicio
-    					return removeAttributesFromResult(serviceList);
+    					// La búsqueda se realiza sin atributos
+    					result = removeAttributesFromResult(result);
     				} else {
-    					// La búsqueda se realiza por atributos
+    					// La búsqueda se realiza con atributos
     					if (serviceList != null && !serviceList.isEmpty()) {
-    						return removeAttributesFromResult(match(filterServiceVO.getAttributes(), serviceList));
+    						result = removeAttributesFromResult(match(filterServiceVO.getAttributes(), result));
     					}
     				}
     			}
     		}
 		}
-		
 		return result;
 	}
 	
 	
+	/**
+	 * Build the filter.
+	 * @param filter The filter string.
+	 * @return FilterServiceVO
+	 * @throws IOException 
+	 * @throws JsonMappingException 
+	 * @throws JsonParseException 
+	 */
+	private FilterServiceVO buildFilter(final String filter) throws JsonParseException, JsonMappingException, IOException {
+		final ObjectMapper mapper = new ObjectMapper();
+		FilterServiceVO filterServiceVO = mapper.readValue(filter, FilterServiceVO.class);
+		if (filterServiceVO.getAttributes() != null && !filterServiceVO.getAttributes().isEmpty()) {
+			for (FilterAttributeVO attr : filterServiceVO.getAttributes()) {
+				// Remove Provider if it is forced
+				if (filterServiceVO.getProvider() != null && !filterServiceVO.getProvider().isEmpty()
+						&& attr.getTypeid().longValue() == PROVIDER_ATTRIBUTE_ID) {
+					filterServiceVO.getAttributes().remove(attr);
+				}
+			}
+		}
+		return filterServiceVO;
+	}
+	
+	
 	/**
 	 * Build the query String.
-	 * @param classid The classid
-	 * @param attributes The attribute list
+	 * @param filter The filter
 	 * @return String
 	 */
-	private String buildQueryString(final Long classid, final List<FilterAttributeVO> attributes) {
+	private String buildQueryString(final FilterServiceVO filter) {
 		// Resolve typeid's
 		StringBuffer typeids = null;
-		if (attributes != null && !attributes.isEmpty()) {
+		if (filter.getAttributes() != null && !filter.getAttributes().isEmpty()) {
 			typeids = new StringBuffer("");
-			final int len = attributes.size();
+			final int len = filter.getAttributes().size();
 			for (int i = 0;i < len;i++) {
-				typeids.append(attributes.get(i).getTypeid());
-				if (attributes.get(i).getChildid() != null) {
-					typeids.append(",").append(attributes.get(i).getChildid());
+				typeids.append(filter.getAttributes().get(i).getTypeid());
+				if (filter.getAttributes().get(i).getChildid() != null) {
+					typeids.append(",").append(filter.getAttributes().get(i).getChildid());
 				}
 				if (i < len - 1) {
 					typeids.append(",");
 				}
 			}
-		}
+		}		
 		
 		// Service ([0-4]) and ServiceClass ([5]) properties
 		StringBuffer strQuery = new StringBuffer("SELECT s.id, s.servicename, ");
 		strQuery.append("s.serviceclassid, s.created_date, s.last_modified_date, sc.serviceclassname, ");
+		
 		// ServiceAttributeType and ServiceAttributeValue ([6-23]) properties
-		strQuery.append("sat.id as satid, sat.name, sat.nfrname, sat.isenumeration, sat.ischecklist, ");
+		strQuery.append("sat.id as satid, sat.name, sat.nfrname, sat.isenumeration, sat.isform, ");
 		strQuery.append("sat.iscommon, sat.isfunctionalrequirement, sat.parentid, sat.childid, sat.units, ");
-		strQuery.append("sat.unitfactor, sat.unitrule, sat.checklistevalrule, sav.unitvalue, sav.checklistvalue, ");
+		strQuery.append("sat.unitfactor, sat.unitrule, sat.evalrule, sav.unitvalue, sav.checklistvalue, ");
 		strQuery.append("sav.id as savid, sav.serviceattributevalue, d.value, ");
-		// ServiceIncidence properties ([24-29])
-		strQuery.append("si.id as incidenceid, si.timestamp, si.detail, si.serviceid, si.created_date as indicencecd, ");
-		strQuery.append("si.last_modified_date as incidencelmd ");
+		
+		// ServiceIncidence properties ([24-30])
+		strQuery.append("si.id as incidenceid, si.timestamp, si.detail, si.realmetricvalue,si.serviceid, ");
+		strQuery.append("si.created_date as indicencecd, si.last_modified_date as incidencelmd ");
 		strQuery.append("FROM service s ");
 		strQuery.append("JOIN service_class sc on s.serviceclassid = sc.id ");
 		strQuery.append("JOIN service_attribute_value sav on s.id = sav.serviceid ");
 		strQuery.append("JOIN service_attribute_type sat on sat.id = sav.serviceattributetypeid ");
 		strQuery.append("LEFT OUTER JOIN definition d on sav.serviceattributevalue = d.code ");
 		strQuery.append("LEFT OUTER JOIN service_incidence si on s.id = si.serviceid ");
-		strQuery.append("WHERE s.serviceclassid = ").append(classid);
-		strQuery.append(" AND s.deleted_date IS NULL ORDER BY s.servicename, sat.id, si.id");
+		strQuery.append("WHERE s.serviceclassid = ").append(filter.getClassid());
+		strQuery.append(" AND s.deleted_date IS NULL");
+		
+		// Get incidences or not
+		strQuery.append(!Boolean.valueOf(filter.getIncidences()) ? " AND si.id IS NULL" : "");
 		
 		return strQuery != null ? strQuery.toString() : null;
 	}
@@ -193,7 +230,7 @@ public class ServiceRepositoryImpl implements ServiceRepositoryCustom {
 		attributeVO.setName(String.valueOf(object[7]));
 		attributeVO.setNfrname(object[8] == null ? null : String.valueOf(object[8]));
 		attributeVO.setIsenumeration(new Boolean(String.valueOf(object[9])));
-		attributeVO.setIschecklist(new Boolean(String.valueOf(object[10])));
+		attributeVO.setIsform(new Boolean(String.valueOf(object[10])));
 		attributeVO.setIscommon(new Boolean(String.valueOf(object[11])));
 		attributeVO.setIsfunctionalrequirement(new Boolean(String.valueOf(object[12])));
 		attributeVO.setParentid(object[13] == null ? null : new BigInteger(String.valueOf(object[13])).longValue());
@@ -201,7 +238,7 @@ public class ServiceRepositoryImpl implements ServiceRepositoryCustom {
 		attributeVO.setUnits(object[15] == null ? null : String.valueOf(object[15]));
 		attributeVO.setUnitfactor(object[16] == null ? null : String.valueOf(object[16]));
 		attributeVO.setUnitrule(object[17] == null ? null : String.valueOf(object[17]));
-		attributeVO.setChecklistevalrule(object[18] == null ? null : String.valueOf(object[18]));
+		attributeVO.setEvalrule(object[18] == null ? null : String.valueOf(object[18]));
 		attributeVO.setUnitvalue(object[19] == null ? null : String.valueOf(object[19]));
 		attributeVO.setChecklistvalue(object[20] == null ? null : String.valueOf(object[20]));
 		attributeVO.setValueid(new BigInteger(String.valueOf(object[21])).longValue());
@@ -223,9 +260,10 @@ public class ServiceRepositoryImpl implements ServiceRepositoryCustom {
 				new BigInteger(String.valueOf(object[24])).longValue(),
 				new BigInteger(String.valueOf(object[25])).longValue(),
 				String.valueOf(object[26]),
-				new BigInteger(String.valueOf(object[27])).longValue(),
-				((Timestamp)object[28]).toInstant(),
-				((Timestamp)object[29]).toInstant());
+				String.valueOf(object[27]),
+				new BigInteger(String.valueOf(object[28])).longValue(),
+				((Timestamp)object[29]).toInstant(),
+				((Timestamp)object[30]).toInstant());
 	}
 	
 	
@@ -240,33 +278,42 @@ public class ServiceRepositoryImpl implements ServiceRepositoryCustom {
 		matchList = new ArrayList<Service>();
 		
 		// Cotejar datos
-		for (FilterAttributeVO attr : attributes) {
+		for (FilterAttributeVO filterAttr : attributes) {
 			for (Service srv : services) {
 				final List<AttributeVO> attributeList = srv.getAttributes();
 				for (AttributeVO attrSrv : attributeList) {
-					if (attr.getTypeid().longValue() == attrSrv.getTypeid().longValue()
-							|| (attr.getChildid() != null && attr.getChildid().longValue() == attrSrv.getTypeid().longValue())) {
+					if (filterAttr.getTypeid().longValue() == attrSrv.getTypeid().longValue()
+							|| (filterAttr.getChildid() != null && filterAttr.getChildid().longValue() == attrSrv.getTypeid().longValue())) {
+						boolean addMatch = false;
 						if (attrSrv.getUnits() != null && !attrSrv.getUnits().isEmpty()) {
-							// Preparar los valores a comparar
-							double[] values = convertValues(attr, attrSrv);
-
-							// Comparar valores
-							if (attrSrv.getUnitrule().equalsIgnoreCase(OPERATOR_GE) && values[1] >= values[0]) {
-								srv.getMatchingattributelist().add(attrSrv.getName());
-								buildMatch(srv, attrSrv.getName());
-							} else if (attrSrv.getUnitrule().equalsIgnoreCase(OPERATOR_LE) && values[1] <= values[0]) {
-								srv.getMatchingattributelist().add(attrSrv.getName());
-								buildMatch(srv, attrSrv.getName());
+							// El atributo tiene tiene unidades
+							double[] values = convertValues(filterAttr, attrSrv, true);
+							if ((attrSrv.getUnitrule().equalsIgnoreCase(OPERATOR_GE) && values[1] >= values[0])
+									|| (attrSrv.getUnitrule().equalsIgnoreCase(OPERATOR_LE) && values[1] <= values[0])) {
+								addMatch = true;
+							}
+						} else {
+							// El atributo NO tiene unidades
+							if (attrSrv.getUnitrule().equalsIgnoreCase(OPERATOR_GE) || attrSrv.getUnitrule().equalsIgnoreCase(OPERATOR_LE)) {
+								double[] values = convertValues(filterAttr, attrSrv, false);
+								if ((attrSrv.getUnitrule().equalsIgnoreCase(OPERATOR_GE) && values[1] >= values[0])
+										|| (attrSrv.getUnitrule().equalsIgnoreCase(OPERATOR_LE) && values[1] <= values[0])) {
+									addMatch = true;
+								}
+							} else if (attrSrv.getValue().toLowerCase().indexOf(filterAttr.getValue().toLowerCase()) != -1) {
+								addMatch = true;
 							}
 						}
-						else if (attrSrv.getValue().toLowerCase().indexOf(attr.getValue().toLowerCase()) != -1) {
+						
+						// Si se ha producido coincidencia, añadir a la lista
+						if (addMatch) {
 							srv.getMatchingattributelist().add(attrSrv.getName());
 							buildMatch(srv, attrSrv.getName());
 						}
 					}
 				}
 			}
-		}
+		}		
 		
 		// Calcular % de acierto
 		final double numCriteria = (double)attributes.size();
@@ -287,26 +334,34 @@ public class ServiceRepositoryImpl implements ServiceRepositoryCustom {
 	
 	/**
 	 * Convert the values of the filter and the VO stored to evaluate later
-	 * @param attr The filter
+	 * @param filterAttr The filter
 	 * @param vo The VO stored
+	 * @param hasUnits The attribute has units (or not)
 	 * @return double[]
 	 */
-	private double[] convertValues(final FilterAttributeVO attr, final AttributeVO vo) {
+	private double[] convertValues(final FilterAttributeVO filterAttr, final AttributeVO vo, final boolean hasUnits) {
 		double[] result = { 0d, 0d };
-		if (attr.getUnit().equalsIgnoreCase(vo.getUnitvalue())) {
-			result[0] = Double.valueOf(attr.getValue()).doubleValue();
-			if (vo.getValue() != null && !vo.getValue().equals(NULL_VALUE)) {
-				result[1] = Double.valueOf(vo.getValue()).doubleValue();
+		if (hasUnits) {
+			if (filterAttr.getUnit().equalsIgnoreCase(vo.getUnitvalue())) {
+				result[0] = Double.valueOf(filterAttr.getValue()).doubleValue();
+				if (vo.getValue() != null && !vo.getValue().equals(NULL_VALUE)) {
+					result[1] = Double.valueOf(vo.getValue()).doubleValue();
+				}
+			} else {
+				final String[] arrayunits = vo.getUnits().split(COMA_SEPARATOR);
+				final String[] arrayfactors = vo.getUnitfactor().split(COMA_SEPARATOR);
+				final int[] indexes = resolveIndexes(arrayunits, filterAttr.getUnit(), vo.getUnitvalue());
+				result[0] = Double.valueOf(filterAttr.getValue()).doubleValue() *
+						(Double.valueOf(arrayfactors[0]).doubleValue() / Double.valueOf(arrayfactors[indexes[0]]).doubleValue());
+				if (vo.getValue() != null && !vo.getValue().equals(NULL_VALUE)) {
+					result[1] = Double.valueOf(vo.getValue()).doubleValue() *
+							(Double.valueOf(arrayfactors[0]).doubleValue() / Double.valueOf(arrayfactors[indexes[1]]).doubleValue());
+				}
 			}
 		} else {
-			final String[] arrayunits = vo.getUnits().split(COMA_SEPARATOR);
-			final String[] arrayfactors = vo.getUnitfactor().split(COMA_SEPARATOR);
-			final int[] indexes = resolveIndexes(arrayunits, attr.getUnit(), vo.getUnitvalue());
-			result[0] = Double.valueOf(attr.getValue()).doubleValue() *
-					(Double.valueOf(arrayfactors[0]).doubleValue() / Double.valueOf(arrayfactors[indexes[0]]).doubleValue());
+			result[0] = Double.valueOf(filterAttr.getValue()).doubleValue();
 			if (vo.getValue() != null && !vo.getValue().equals(NULL_VALUE)) {
-				result[1] = Double.valueOf(vo.getValue()).doubleValue() *
-						(Double.valueOf(arrayfactors[0]).doubleValue() / Double.valueOf(arrayfactors[indexes[1]]).doubleValue());
+				result[1] = Double.valueOf(vo.getValue()).doubleValue();
 			}
 		}
 		return result;
@@ -347,7 +402,12 @@ public class ServiceRepositoryImpl implements ServiceRepositoryCustom {
 	}
 	
 	
-	private List<Service> removeAttributesFromResult(final List<Service> list) {
+	/**
+	 * Remove the attribute array from the result
+	 * @param list The source list.
+	 * @return List
+	 */
+	private List<Service> removeAttributesFromResult(List<Service> list) {
 		if (list != null && !list.isEmpty()) {
 			for (Service srv : list) {
 				srv.getAttributes().clear();
@@ -355,4 +415,58 @@ public class ServiceRepositoryImpl implements ServiceRepositoryCustom {
 		}
 		return list;
 	}
+	
+	
+	/**
+	 * Forces an attribute to be in the result
+	 * @param list The source list.
+	 * @param filter The source filter.
+	 * @return List
+	 */
+	private List<Service> forceAttribute(List<Service> list, final FilterServiceVO filter) {
+		List<Service> result = null;
+		if (list != null && !list.isEmpty() && filter != null && filter.getProvider() != null && !filter.getProvider().isEmpty()) {
+			result = new ArrayList<Service>();
+			for (Service srv : list) {
+				final List<AttributeVO> attributes = srv.getAttributes();
+				if (attributes != null && !attributes.isEmpty()) {
+					for (AttributeVO attr : attributes) {
+						// Force the Provider
+						if (attr.getTypeid().longValue() == PROVIDER_ATTRIBUTE_ID
+								&& attr.getValue().toLowerCase().indexOf(filter.getProvider().toLowerCase()) != -1) {
+							result.add(srv);
+							break;
+						}
+					}
+				}
+			}
+		}
+		return result != null && !result.isEmpty() ? result : list;
+	}
+	
+	
+	/**
+	 * Loads the provider to view in screen.
+	 * @param list The source list.
+	 * @return List
+	 */
+	private List<Service> loadProviderToScreen(List<Service> list) {
+		List<Service> result = null;
+		if (list != null && !list.isEmpty()) {
+			result = new ArrayList<Service>();
+			for (Service srv : list) {
+				final List<AttributeVO> attributes = srv.getAttributes();
+				if (attributes != null && !attributes.isEmpty()) {
+					for (AttributeVO attr : attributes) {
+						if (attr.getTypeid().longValue() == PROVIDER_ATTRIBUTE_ID) {
+							srv.setProvider(attr.getValue());
+							result.add(srv);
+							break;
+						}
+					}
+				}
+			}
+		}
+		return result != null && !result.isEmpty() ? result : list;
+	}
 }
\ No newline at end of file
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/UserRepository.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/UserRepository.java
index 7cb0adb5cdf1a6d5ed1069850badc5e69761b2e5..c6882fac3dc813d3c870ff8667565d66e0d9037a 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/UserRepository.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/UserRepository.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/package-info.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/package-info.java
index 672c84f58abbea5101647834d5fa6105a9484a54..da4403308dad1a88997753b0601af755f3b47a12 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/package-info.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/repository/package-info.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/security/AuthoritiesConstants.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/security/AuthoritiesConstants.java
index 2a1c112c663f31a8c3657575908ff7d2821e14d8..51659a72ecad1f4b2693f5e5742c2da9e840a8a0 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/security/AuthoritiesConstants.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/security/AuthoritiesConstants.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/security/SecurityUtils.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/security/SecurityUtils.java
index a095a2c745bf285efbfbe4227d45a1a58cff5d53..32962a23ca0ce30f0c27adccaf821c9a64342046 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/security/SecurityUtils.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/security/SecurityUtils.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/security/SpringSecurityAuditorAware.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/security/SpringSecurityAuditorAware.java
index 9be06c074eb5b23e021b6101c73508dfe943f48f..02522e2ab33a040c090c125b851cca29b4b74a1d 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/security/SpringSecurityAuditorAware.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/security/SpringSecurityAuditorAware.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/security/jwt/JWTConfigurer.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/security/jwt/JWTConfigurer.java
index 3ffcc91b15e8e623556089bcda19ab92aa70d275..8a1faaddc194e259113c335a6611609b07d298bd 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/security/jwt/JWTConfigurer.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/security/jwt/JWTConfigurer.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/security/jwt/JWTFilter.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/security/jwt/JWTFilter.java
index a400d207afb40a3b57e8822c25c9d9f9c66824c4..3ec8dfa1256035c9692c9980c9e60e46df159345 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/security/jwt/JWTFilter.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/security/jwt/JWTFilter.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/security/jwt/TokenProvider.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/security/jwt/TokenProvider.java
index b24f8af89edae0b41311ce58b5a98879d9ce172b..a62a15e14f96564b58b7cb252be8966ba851e8f6 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/security/jwt/TokenProvider.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/security/jwt/TokenProvider.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/service/MailService.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/service/MailService.java
index fe19cb20027543b9d8941c93f59c0aafeadf0f0a..30cbbdf76c80e5762b4ca242f7ac8dd508d7fa4f 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/service/MailService.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/service/MailService.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/service/RequestToken.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/service/RequestToken.java
index 34fe1ff43e3dc109e62f6fd1bf909a8c85b68fdb..c028391e4d16b47a83b359f4a3c464631cebca16 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/service/RequestToken.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/service/RequestToken.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/service/RequestURI.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/service/RequestURI.java
index 0a1e3d3ff0459184a134c65804c5c2c1eadb71a5..9ea1d1a8a3d58d620adfd8d23226896e79cec894 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/service/RequestURI.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/service/RequestURI.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/service/package-info.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/service/package-info.java
index 081e7b3dab55d0b534b0b30289cd583a0236e3ce..253f16f2eef200d4650b38827ccffa1476af8f2f 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/service/package-info.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/service/package-info.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/DefinitionResource.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/DefinitionResource.java
index 88cf1654acc90887815e53322473b680d07e0586..db4473d6c26e090783d2b8eb3a59a3377bc5cb68 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/DefinitionResource.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/DefinitionResource.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
@@ -41,6 +42,7 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import com.codahale.metrics.annotation.Timed;
@@ -87,6 +89,52 @@ public class DefinitionResource {
                     		ENTITY_NAME, "definitionGetAllError", "Cannot get the list of Definitions")).body(null);
         }
     }
+    
+    
+    /**
+     * GET  /definitions-by-attribute : get all the definitions by an attribute.
+     * 
+     * @param typeid The attribute identifier
+     *
+     * @return the ResponseEntity with status 200 (OK) and the list of definitions in body
+     */
+    @GetMapping("/definitions-by-attribute")
+    @Timed
+    @Transactional
+    public ResponseEntity<List<Definition>> getDefinitionsByAttribute(@RequestParam Long typeid) {
+       log.debug("REST request to get the Definitions for the attribute: " + typeid);
+        try {log.debug("getDefinitionsByAttribute  ::  getting the definitions...");
+        	return ResponseEntity.ok(definitionRepository.getDefinitionsByAttribute(typeid));
+        } catch (Exception e) {
+        	log.error("getDefinitionsByAttribute  ::  Exception  ::  " + e.getMessage());
+        	return ResponseEntity.badRequest()
+                    .headers(HeaderUtil.createFailureAlert(
+                    		ENTITY_NAME, "definitionGetByAttributeError", "Cannot get the list of Definitions for the attribute")).body(null);
+        }
+    }
+    
+    
+    /**
+     * GET  /definitions-by-starting-code : get all the definitions by a starting code
+     * 
+     * @param code The code
+     *
+     * @return the ResponseEntity with status 200 (OK) and the list of definitions in body
+     */
+    @GetMapping("/definitions-by-starting-code")
+    @Timed
+    @Transactional
+    public ResponseEntity<List<Definition>> getDefinitionsByStartingCode(@RequestParam String code) {
+       log.debug("REST request to get the Definitions for the starting code: " + code);
+        try {log.debug("getDefinitionsByStartingCode  ::  getting the definitions...");
+        	return ResponseEntity.ok(definitionRepository.getDefinitionsByStartingCode(code.trim().toUpperCase()));
+        } catch (Exception e) {
+        	log.error("getDefinitionsByStartingCode  ::  Exception  ::  " + e.getMessage());
+        	return ResponseEntity.badRequest()
+                    .headers(HeaderUtil.createFailureAlert(
+                    		ENTITY_NAME, "definitionGetByStartingCodeError", "Cannot get the list of Definitions for the starting code")).body(null);
+        }
+    }
 
     
     /**
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/LegalAssessmentResource.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/LegalAssessmentResource.java
new file mode 100644
index 0000000000000000000000000000000000000000..3830b2dc6eaa8f6f545a1bac0217a872b796d372
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/LegalAssessmentResource.java
@@ -0,0 +1,491 @@
+/*******************************************************************************
+ * Copyright (c) 2017 Tecnalia.
+ * 
+ * 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.
+ * 
+ * The code has been contributed over a stub generated with the JHipster
+ * Application generator http://www.jhipster.tech/.
+ * 
+ * Contributors (in alphabetical order):
+ * 
+ * Alberto Molinuevo					Tecnalia
+ * Gorka Benguria                       Tecnalia
+ * Iñaki Etxaniz                        Tecnalia
+ * Juncal Alonso                        Tecnalia
+ * Leire Orue-Echevarria                Tecnalia
+ * Maria Jose lopez                     Tecnalia
+ * Marisa Escalante                     Tecnalia
+ * 
+ * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+ ******************************************************************************/
+package eu.decideh2020.acsmi.backend.services.server.web.rest;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.validation.Valid;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.http.ResponseEntity;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.codahale.metrics.annotation.Timed;
+
+import eu.decideh2020.acsmi.backend.services.server.domain.LegalAnswer;
+import eu.decideh2020.acsmi.backend.services.server.domain.LegalAssessment;
+import eu.decideh2020.acsmi.backend.services.server.domain.LegalControl;
+import eu.decideh2020.acsmi.backend.services.server.domain.ServiceLegalAssessment;
+import eu.decideh2020.acsmi.backend.services.server.domain.ServiceLegalManagement;
+import eu.decideh2020.acsmi.backend.services.server.repository.LegalAssessmentRepository;
+import eu.decideh2020.acsmi.backend.services.server.repository.ServiceAttributeValueRepository;
+import eu.decideh2020.acsmi.backend.services.server.repository.ServiceLegalManagementRepository;
+import eu.decideh2020.acsmi.backend.services.server.web.rest.util.HeaderUtil;
+
+
+/**
+ * REST controller for managing LegalAssessment.
+ */
+@RestController
+@RequestMapping("/api")
+public class LegalAssessmentResource {
+
+    private final Logger log = LoggerFactory.getLogger(LegalAssessmentResource.class);
+
+    private static final String ENTITY_NAME = "legalAssessment";
+    
+    private final LegalAssessmentRepository legalAssessmentRepository;
+    private final ServiceLegalManagementRepository serviceLegalManagementRepository;
+    private final ServiceAttributeValueRepository serviceAttributeValueRepository;
+
+    
+    public LegalAssessmentResource(LegalAssessmentRepository legalAssessmentRepository,
+    		ServiceLegalManagementRepository serviceLegalManagementRepository,
+    		ServiceAttributeValueRepository serviceAttributeValueRepository) {
+        this.legalAssessmentRepository = legalAssessmentRepository;
+        this.serviceLegalManagementRepository = serviceLegalManagementRepository;
+        this.serviceAttributeValueRepository = serviceAttributeValueRepository;
+    }
+
+
+    /**
+     * GET  /legal-assessments : get the legal assessments.
+     *
+     * @return the ResponseEntity with status 200 (OK) and the list of legal assessments in body
+     */
+    @GetMapping("/legal-assessments")
+    @Timed
+    public ResponseEntity<LegalAssessment> getLegalAssessments() {
+    	log.debug("REST request to get the legal assessments");
+        try {
+        	log.debug("getLegalAssessments  ::  getting the legal assessments...");
+        	return ResponseEntity.ok(processLegalAssessmentsQuery(legalAssessmentRepository.getLegalAssessments()));
+        } catch (Exception e) {
+        	log.error("getLegalAssessments  ::  Exception  ::  " + e.getMessage());
+        	return ResponseEntity.badRequest()
+                    .headers(HeaderUtil.createFailureAlert(
+                    		ENTITY_NAME, "legalAssessmentGetAllError", "Cannot get the list of legal assessments")).body(null);
+        }
+    }
+    
+    
+    /**
+     * GET  /service-legal-assessments : get the full service legal assessment.
+     *
+     * @return the ResponseEntity with status 200 (OK) and the service legal assessment in body
+     */
+    @GetMapping("/service-legal-assessments")
+    @Timed
+    public ResponseEntity<ServiceLegalAssessment> getServiceLegalAssessments(@RequestParam String serviceid) {
+    	log.debug("REST request to get the service legal assessment");
+        try {
+        	log.debug("getServiceLegalAssessments  ::  getting the service legal assessment...");
+        	return ResponseEntity.ok(processServiceLegalAssessmentsQuery(legalAssessmentRepository.getServiceLegalAssessments(Long.valueOf(serviceid))));
+        } catch (Exception e) {
+        	log.error("getServiceLegalAssessments  ::  Exception  ::  " + e.getMessage());
+        	return ResponseEntity.badRequest()
+                    .headers(HeaderUtil.createFailureAlert(
+                    		ENTITY_NAME, "serviceLegalAssessmentGetFullError", "Cannot get the full service legal assessment")).body(null);
+        }
+    }
+    
+    
+    /**
+     * PUT  /service-legal-assessments : Saves the legal assessment questionnaire.
+     *
+     * @param serviceLegalAssessment the questionnaire to update
+     * @return the ResponseEntity with status 200 (OK) and with body the updated questionnaire.
+     */
+    @PutMapping("/service-legal-assessments")
+    @Timed
+    @Transactional
+    public ResponseEntity<Void> saveServiceLegalAssessmentQuestionnaire(@RequestBody ServiceLegalAssessment serviceLegalAssessment) {
+    	log.debug("REST request to save service legal assessment...");
+        try {
+        	// Save the legal questionnaire
+        	log.debug("saveLegalAssessmentQuestionnaire  ::  saving service legal assessment...");
+        	legalAssessmentRepository.saveLegalAssessmentQuestionnaire(serviceLegalAssessment);
+        	log.debug("saveLegalAssessmentQuestionnaire  ::  saving OK");
+        	
+        	// Calculate the legal level
+        	log.debug("saveLegalAssessmentQuestionnaire  ::  calculating the legal level...");
+        	final String legalLevel = String.valueOf(calculateLegalLevel(serviceLegalAssessment));
+        	serviceAttributeValueRepository.updateLegalLevelValue(serviceLegalAssessment.getServiceid(), legalLevel);
+        	log.debug("saveLegalAssessmentQuestionnaire  ::  calculating OK  ::  " + legalLevel);
+        	
+        	// Update alerts
+        	log.debug("saveLegalAssessmentQuestionnaire  ::  updating form alert...");
+        	serviceLegalManagementRepository.updateFormAlertByServiceId(serviceLegalAssessment.getServiceid(), false);
+        	log.debug("saveLegalAssessmentQuestionnaire  ::  updating OK...");
+        	
+            return ResponseEntity.ok().build();
+        } catch (Exception e) {
+        	log.error("saveLegalAssessmentQuestionnaire  ::  Exception  ::  " + e.getMessage());
+        	return ResponseEntity.badRequest()
+                    .headers(HeaderUtil.createFailureAlert(ENTITY_NAME, "serviceLegalAssessmentUpdateError", "Cannot save the legal assessment questionnaire"))
+                    .body(null);
+        }
+    }
+    
+    
+    /**
+     * PUT  /service-legal-assessments : Resets the legal assessment questionnaire.
+     *
+     * @param serviceid the serviceid
+     * @return the ResponseEntity with status 200 (OK)
+     */
+    @PutMapping("/service-legal-assessments/reset")
+    @Timed
+    @Transactional
+    public ResponseEntity<Void> resetServiceLegalAssessmentQuestionnaire(@RequestParam String serviceid) {
+    	log.debug("REST request to reset service legal assessment...");
+        try {
+        	log.debug("resetServiceLegalAssessmentQuestionnaire  ::  reseting service legal assessment...");
+        	legalAssessmentRepository.resetServiceLegalAssessmentQuestionnaire(Long.valueOf(serviceid));
+        	log.debug("resetServiceLegalAssessmentQuestionnaire  ::  reseting OK");
+        	
+            return ResponseEntity.ok().build();
+        } catch (Exception e) {
+        	log.error("resetServiceLegalAssessmentQuestionnaire  ::  Exception  ::  " + e.getMessage());
+        	return ResponseEntity.badRequest()
+                    .headers(HeaderUtil.createFailureAlert(ENTITY_NAME, "serviceLegalAssessmentResetError", "Cannot reset the legal assessment questionnaire"))
+                    .body(null);
+        }
+    }
+    
+    
+    /**
+     * DELETE  /service-legal-assessments : delete a service legal assessment
+     *
+     * @param serviceid the serviceid
+     * @return the ResponseEntity with status 200 (OK)
+     */
+    @DeleteMapping("/service-legal-assessments")
+    @Timed
+    @Transactional
+    public ResponseEntity<Void> deleteServiceLegalAssessmentQuestionnaire(@RequestParam String serviceid) {
+    	log.debug("REST request to delete legal assessment");
+        try {
+       		log.debug("deleteServiceLegalAssessmentQuestionnaire  ::  deleting legal assessment...");
+       		legalAssessmentRepository.deleteServiceLegalAssessmentQuestionnaire(Long.valueOf(serviceid));
+        	log.debug("deleteServiceLegalAssessmentQuestionnaire  ::  deleting OK");
+        	
+            return ResponseEntity.ok().build();
+        } catch (Exception e) {
+        	log.error("deleteServiceLegalAssessmentQuestionnaire  ::  Exception  ::  " + e.getMessage());
+        	return ResponseEntity.badRequest()
+                    .headers(HeaderUtil.createFailureAlert(ENTITY_NAME, "serviceLegalAssessmentDeleteError", "Cannot delete the legal assessment questionnaire"))
+                    .body(null);
+        }
+    }
+    
+    
+    /**
+     * POST  /service-legal-managements : Create a new service legal management.
+     *
+     * @param serviceLegalManagement the service legal management to create
+     * @return the ResponseEntity with status 201 (Created) and with body the new service legal management, or with status 400 (Bad Request) if the service legal management has already an ID
+     * @throws URISyntaxException if the Location URI syntax is incorrect
+     */
+    @PostMapping("/service-legal-managements")
+    @Timed
+    @Transactional
+    public ResponseEntity<ServiceLegalManagement> createServiceLegalManagement(@Valid @RequestBody ServiceLegalManagement serviceLegalManagement) throws URISyntaxException {
+    	log.debug("REST request to save ServiceLegalManagement : {}", serviceLegalManagement);
+        try {        	
+        	if (serviceLegalManagement.getId() != null) {
+                return ResponseEntity.badRequest().headers(HeaderUtil.createFailureAlert(
+                		ENTITY_NAME, "idexists", "A new serviceLegalManagement cannot already have an ID")).body(null);
+            }
+        	
+        	// Insertar fila
+        	log.debug("createServiceLegalManagement  ::  creating service legal management...");
+        	ServiceLegalManagement result = serviceLegalManagementRepository.saveAndFlush(serviceLegalManagement);
+        	log.debug("createServiceLegalManagement  ::  creating OK");
+        	
+            return ResponseEntity.created(new URI("/api/service-legal-managements/" + result.getId()))
+                .headers(HeaderUtil.createEntityCreationAlert(ENTITY_NAME, "" + result.getId()))
+                .body(result);
+        } catch (Exception e) {
+        	log.error("createServiceLegalManagement  ::  Exception  ::  " + e.getMessage());
+        	e.printStackTrace();
+        	return ResponseEntity.badRequest()
+                    .headers(HeaderUtil.createFailureAlert(ENTITY_NAME, "serviceLegalManagementCreateError", "Cannot create the Service legal management"))
+                    .body(null);
+        }
+    }
+    
+    
+    /**
+     * POST  /service-legal-managements : insert a new legal management for a service.
+     *
+     * @return the ResponseEntity with status 200 (OK) and the legal assessment in body
+     */
+    @GetMapping("/service-legal-managements")
+    @Timed
+    public ResponseEntity<ServiceLegalManagement> findServiceLegalManagement(@RequestParam String serviceid) {
+    	log.debug("REST request to get the service legal management");
+        try {
+        	log.debug("findServiceLegalManagement  ::  getting the service legal assessment...");
+        	return ResponseEntity.ok(serviceLegalManagementRepository.findAlertsByServiceId(Long.valueOf(serviceid)));
+        } catch (Exception e) {
+        	log.error("findServiceLegalManagement  ::  Exception  ::  " + e.getMessage());
+        	return ResponseEntity.badRequest()
+                    .headers(HeaderUtil.createFailureAlert(
+                    		ENTITY_NAME, "serviceLegalManagementGetError", "Cannot get the Service legal management")).body(null);
+        }
+    }
+    
+    
+    /**
+     * DELETE  /service-legal-managements : delete a service legal management
+     *
+     * @param serviceid the serviceid
+     * @return the ResponseEntity with status 200 (OK)
+     */
+    @DeleteMapping("/service-legal-managements")
+    @Timed
+    @Transactional
+    public ResponseEntity<Void> deleteServiceLegalManagement(@RequestParam String serviceid) {
+    	log.debug("REST request to delete legal management");
+        try {
+       		log.debug("deleteServiceLegalManagement  ::  deleting legal assessment...");
+       		serviceLegalManagementRepository.delete(Long.valueOf(serviceid));
+        	log.debug("deleteServiceLegalManagement  ::  deleting OK");
+        	
+            return ResponseEntity.ok().build();
+        } catch (Exception e) {
+        	log.error("deleteServiceLegalManagement  ::  Exception  ::  " + e.getMessage());
+        	return ResponseEntity.badRequest()
+                    .headers(HeaderUtil.createFailureAlert(ENTITY_NAME, "serviceLegalManagementDeleteError", "The Service legal management cannot be deleted"))
+                    .body(null);
+        }
+    }
+    
+    
+    /**
+     * Processes the result of the query of legal assessment.
+     * @param list The result of the query.
+     * @return LegalAssessment
+     */
+    private LegalAssessment processLegalAssessmentsQuery(final List<LegalAssessment> list) {
+    	LegalAssessment result = new LegalAssessment();
+    	if (list != null && !list.isEmpty()) {
+    		for (LegalAssessment assessment : list) {
+    			if (!containsControl(result.getControls(), assessment.getControlid())) {
+    				LegalControl control = new LegalControl(assessment.getControlid(), assessment.getQuestion(), assessment.isIssimplecontrol(), (short)0, null);
+    				for (LegalAssessment assessmentTemp : list) {
+    					if (control.getId().longValue() == assessmentTemp.getControlid().longValue()) {
+    						LegalAnswer answer = new LegalAnswer(assessmentTemp.getAnswerid(), assessmentTemp.getAnswer(), assessmentTemp.getScore());
+    						control.getAnswers().add(answer);
+    					}
+    				}
+    				result.getControls().add(control);
+    			}
+    		}
+    	}
+    	return result;
+    }
+    
+    
+    /**
+     * Processes the query results.
+     * @param list The results.
+     * @return ServiceLegalAssessment
+     */
+    private ServiceLegalAssessment processServiceLegalAssessmentsQuery(final List<ServiceLegalAssessment> list) {
+    	ServiceLegalAssessment result = new ServiceLegalAssessment();
+    	if (list != null && !list.isEmpty()) {
+    		for (ServiceLegalAssessment assessment : list) {
+    			if (result.getId() == null) {
+    				result.setId(assessment.getId());
+    				result.setServiceid(assessment.getServiceid());
+    				result.setScore(assessment.getScore());
+    			}
+   				if (!containsControl(result.getControls(), assessment.getControlid().longValue())) {
+   					final LegalControl control = new LegalControl(assessment.getControlid(), assessment.getQuestion(),
+       						assessment.isIssimplecontrol(), assessment.getScore(), assessment.getJustification());
+       				for (ServiceLegalAssessment assessmentTemp : list) {
+    					if (control.getId().longValue() == assessmentTemp.getControlid().longValue()) {
+    						final LegalAnswer answer = new LegalAnswer(assessmentTemp.getAnswerid(),
+    								assessmentTemp.getAnswer(), assessmentTemp.getAnswerscore());
+    						control.getAnswers().add(answer);
+    					}
+    				}
+       				result.getControls().add(control);
+       			}
+    		}
+    	}
+    	return result;
+    }
+    
+    
+    /**
+     * Resolves if the list contains the control. 
+     * @param controlList The controlList.
+     * @param controlId The controlId.
+     * @return boolean
+     */
+    private boolean containsControl(final List<LegalControl> controlList, final long controlId) {
+    	if (!controlList.isEmpty()) {
+    		for (LegalControl obj : controlList) {
+    			if (obj.getId().longValue() == controlId) {
+    				return true;
+    			}
+    		}
+    	}
+    	return false;
+    }
+    
+    
+    /**
+     * Calculates the legal level.
+     * @param serviceLegalAssessment The serviceLegalAssessment.
+     * @return int
+     */
+    private int calculateLegalLevel(final ServiceLegalAssessment serviceLegalAssessment) {
+    	int simpleControlsLevel = 0;
+    	int layeredControlsLevel = 0;
+    	final List<LegalControl> controls = serviceLegalAssessment.getControls();
+    	if (controls != null && !controls.isEmpty()) {
+    		Map<Long, Short> simpleControlsMap = new HashMap<Long, Short>();
+    		Map<Long, Short> layeredControlsMap = new HashMap<Long, Short>();
+    		for (LegalControl ctrl : serviceLegalAssessment.getControls()) {
+    			if (ctrl.isIssimplecontrol()) {
+    				simpleControlsMap.put(ctrl.getId(), ctrl.getScore());
+    			} else {
+    				layeredControlsMap.put(ctrl.getId(), ctrl.getScore());
+    			}
+        	}
+    		simpleControlsLevel = calculateSimpleControlsLevel(simpleControlsMap);
+    		layeredControlsLevel = calculateLayeredControlsLevel(layeredControlsMap);
+    	}
+    	return calculateTotalLevel(simpleControlsLevel, layeredControlsLevel);
+    }
+    
+    
+    /**
+     * Calculates the level for the simple controls.
+     * @param simpleControlsMap The simpleControlsMap.
+     * @return int
+     */
+    private int calculateSimpleControlsLevel(final Map<Long, Short> simpleControlsMap) {
+    	int result = 0;
+    	if (!simpleControlsMap.isEmpty()) {
+    		if (simpleControlsMap.get(1L).shortValue() == 1 && simpleControlsMap.get(2L).shortValue() == 1
+    				&& simpleControlsMap.get(3L).shortValue() == 1 && simpleControlsMap.get(4L).shortValue() == 1
+    				&& simpleControlsMap.get(6L).shortValue() == 1) {
+        		result = 3;
+    			if (simpleControlsMap.get(31L).shortValue() == 1) {
+    				result = 2;
+    				if (simpleControlsMap.get(32L).shortValue() == 1 && simpleControlsMap.get(33L).shortValue() == 1
+    						&& simpleControlsMap.get(34L).shortValue() == 1) {
+    					result = 1;
+    				}
+    			}
+    		}
+    	}
+    	return result;
+    }
+    
+    /**
+     * Calculates the level for the layered controls.
+     * @param layeredControlsMap The layeredControlsMap.
+     * @return int
+     */
+    private int calculateLayeredControlsLevel(final Map<Long, Short> layeredControlsMap) {
+    	int result = 3;
+    	if (layeredControlsMap.isEmpty()) {
+    		result = 0;
+		} else {
+			for (Map.Entry<Long, Short> entry : layeredControlsMap.entrySet()) {
+				if (entry.getValue().shortValue() < 1) {
+					result = 0;
+					break;
+				}
+			}
+			
+			if (layeredControlsMap.get(5L).shortValue() > 2 && layeredControlsMap.get(7L).shortValue() > 2
+					&& layeredControlsMap.get(5L).shortValue() > 2 && layeredControlsMap.get(7L).shortValue() > 2
+					&& layeredControlsMap.get(8L).shortValue() > 2 && layeredControlsMap.get(9L).shortValue() > 2
+					&& layeredControlsMap.get(10L).shortValue() > 2 && layeredControlsMap.get(11L).shortValue() > 2
+					&& layeredControlsMap.get(12L).shortValue() > 2 && layeredControlsMap.get(13L).shortValue() > 2
+					&& layeredControlsMap.get(14L).shortValue() > 2 && layeredControlsMap.get(15L).shortValue() > 2
+					&& layeredControlsMap.get(16L).shortValue() > 2 && layeredControlsMap.get(17L).shortValue() > 2
+					&& layeredControlsMap.get(18L).shortValue() > 2 && layeredControlsMap.get(19L).shortValue() > 2
+					&& layeredControlsMap.get(20L).shortValue() > 2 && layeredControlsMap.get(21L).shortValue() > 2
+					&& layeredControlsMap.get(22L).shortValue() > 2 && layeredControlsMap.get(23L).shortValue() > 2
+					&& layeredControlsMap.get(26L).shortValue() > 2 && layeredControlsMap.get(27L).shortValue() > 2
+					&& layeredControlsMap.get(30L).shortValue() > 2) {
+				result = 1;
+			} else if (layeredControlsMap.get(5L).shortValue() > 1 && layeredControlsMap.get(7L).shortValue() > 1
+					&& layeredControlsMap.get(5L).shortValue() > 1 && layeredControlsMap.get(7L).shortValue() > 1
+					&& layeredControlsMap.get(8L).shortValue() > 1 && layeredControlsMap.get(9L).shortValue() > 1
+					&& layeredControlsMap.get(10L).shortValue() > 1 && layeredControlsMap.get(11L).shortValue() > 1
+					&& layeredControlsMap.get(12L).shortValue() > 1 && layeredControlsMap.get(13L).shortValue() > 1
+					&& layeredControlsMap.get(14L).shortValue() > 1 && layeredControlsMap.get(15L).shortValue() > 1
+					&& layeredControlsMap.get(16L).shortValue() > 1 && layeredControlsMap.get(17L).shortValue() > 1
+					&& layeredControlsMap.get(18L).shortValue() > 1 && layeredControlsMap.get(19L).shortValue() > 1
+					&& layeredControlsMap.get(20L).shortValue() > 1 && layeredControlsMap.get(21L).shortValue() > 1
+					&& layeredControlsMap.get(22L).shortValue() > 1 && layeredControlsMap.get(23L).shortValue() > 1
+					&& layeredControlsMap.get(26L).shortValue() > 1 && layeredControlsMap.get(27L).shortValue() > 1
+					&& layeredControlsMap.get(30L).shortValue() > 1) {
+				result = 2;
+			}
+		}
+    	return result;
+    }
+    
+    
+    /**
+     * Calculates the total level.
+     * @param simpleControlsLevel The simpleControlsLevel.
+     * @param layeredControlsLevel The layeredControlsLevel.
+     * @return int
+     */
+    private int calculateTotalLevel(final int simpleControlsLevel, final int layeredControlsLevel) {
+    	return simpleControlsLevel == 0 || layeredControlsLevel == 0 ? 0
+    			: (simpleControlsLevel == 0 || layeredControlsLevel == 0 ? simpleControlsLevel : layeredControlsLevel); 
+    }
+}
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/LogsResource.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/LogsResource.java
index 09eed4af2ea728e47d1d8d1e24322e1b8e17709a..19c22daeb646b86768d08521fb0dd07be6252e75 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/LogsResource.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/LogsResource.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/ProfileInfoResource.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/ProfileInfoResource.java
index 67150122868a216032a8d0ee5e56f1801b013bea..c311e93b275a35430b378b874dae39c0780d4236 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/ProfileInfoResource.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/ProfileInfoResource.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/ServiceAttributeTypeResource.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/ServiceAttributeTypeResource.java
index a09401620db7026866a95cc190433f1a169e0639..098095281a5599e7350c862e0264739baa898866 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/ServiceAttributeTypeResource.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/ServiceAttributeTypeResource.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/ServiceAttributeValueResource.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/ServiceAttributeValueResource.java
index ba496042a63db3d76f87d656e704f6c365d563f7..5c0f3104ef70ed7bf67de9e1c62f0927af8bfd87 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/ServiceAttributeValueResource.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/ServiceAttributeValueResource.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
@@ -140,6 +141,35 @@ public class ServiceAttributeValueResource {
                     .body(null);
         }
     }
+    
+    
+    /**
+     * PUT  /service-attribute-values : Updates an existing serviceAttributeValue.
+     *
+     * @param serviceAttributeValue the serviceAttributeValue to update
+     * @return the ResponseEntity with status 200 (OK) and with body the updated serviceAttributeValue,
+     * or with status 400 (Bad Request) if the serviceAttributeValue is not valid,
+     * or with status 500 (Internal Server Error) if the serviceAttributeValue couldnt be updated
+     * @throws URISyntaxException if the Location URI syntax is incorrect
+     */
+    @PutMapping("/service-attribute-values/legal-level")
+    @Timed
+    @Transactional
+    public ResponseEntity<ServiceAttributeValue> updateLegalLevelValue(@RequestParam Long serviceid, @RequestParam String value) {
+    	log.debug("REST request to update the legal level value...");
+        try {
+        	log.debug("updateLegalLevelValue  ::  updating...");
+        	serviceAttributeValueRepository.updateLegalLevelValue(serviceid, value);
+        	log.debug("updateLegalLevelValue  ::  updating OK");
+        	
+        	return ResponseEntity.noContent().build();
+        } catch (Exception e) {
+        	log.error("updateLegalLevelValue  ::  Exception  ::  " + e.getMessage());
+        	return ResponseEntity.badRequest()
+                    .headers(HeaderUtil.createFailureAlert(ENTITY_NAME, "serviceAttributeValueUpdateError", "No puede actualizarse el Valor del atributo"))
+                    .body(null);
+        }
+    }
 
     /**
      * GET  /service-attribute-values/:id : get the "id" ServiceAttributeValues.
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/ServiceClassAttributeResource.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/ServiceClassAttributeResource.java
index 7228f17317d2b019ca961e8321f47341e260e07d..ab91db7c40b77eb2a39d6e1c54205a55e00620cc 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/ServiceClassAttributeResource.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/ServiceClassAttributeResource.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/ServiceClassResource.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/ServiceClassResource.java
index 3430bd3b35dcc257433d0f1f03eb1059ec3953e8..ed347ebed576d646563d0a981eaeca058616edb9 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/ServiceClassResource.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/ServiceClassResource.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
@@ -174,13 +175,13 @@ public class ServiceClassResource {
 		attr.setName(object.getAttributename());
 		attr.setNfrname(object.getAttributenfrname());
 		attr.setIsenumeration(object.isIsenumeration());
-		attr.setIschecklist(object.isIschecklist());
+		attr.setIsform(object.isIsform());
 		attr.setIscommon(object.isIscommon());
 		attr.setIsfunctionalrequirement(object.isIsfunctionalrequirement());
 		attr.setParentid(object.getParentid());
 		attr.setChildid(object.getChildid());
 		attr.setUnits(object.getUnits());
-		attr.setChecklistevalrule(object.getChecklistevalrule());
+		attr.setEvalrule(object.getEvalrule());
 		attr.setUnitvalue(object.getUnitvalue());
 		attr.setUnitfactor(object.getUnitfactor());
 		attr.setUnitrule(object.getUnitrule());
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/ServiceIncidenceResource.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/ServiceIncidenceResource.java
index 8df3b9583a758920428929603e0e65a8a806524c..7871dcbeae27cf015abc28d57ae338ac3eddd6dc 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/ServiceIncidenceResource.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/ServiceIncidenceResource.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/ServiceResource.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/ServiceResource.java
index f99aabf40cfc914273d561b06a831ff77e1ecd92..d779c9e6b23e320592287742e534189dd4fa790a 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/ServiceResource.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/ServiceResource.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
@@ -29,17 +30,21 @@
  ******************************************************************************/
 package eu.decideh2020.acsmi.backend.services.server.web.rest;
 
+import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.text.SimpleDateFormat;
 import java.time.ZonedDateTime;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 
 import javax.validation.Valid;
+import javax.xml.bind.DatatypeConverter;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -59,12 +64,27 @@ import org.springframework.web.bind.annotation.RestController;
 
 import com.codahale.metrics.annotation.Timed;
 import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.JsonMappingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.itextpdf.text.BaseColor;
+import com.itextpdf.text.Document;
+import com.itextpdf.text.DocumentException;
+import com.itextpdf.text.Font;
+import com.itextpdf.text.Font.FontFamily;
+import com.itextpdf.text.Paragraph;
+import com.itextpdf.text.pdf.PdfPCell;
+import com.itextpdf.text.pdf.PdfPTable;
+import com.itextpdf.text.pdf.PdfWriter;
 
 import eu.decideh2020.acsmi.backend.services.server.domain.Definition;
+import eu.decideh2020.acsmi.backend.services.server.domain.LegalAnswer;
+import eu.decideh2020.acsmi.backend.services.server.domain.LegalControl;
 import eu.decideh2020.acsmi.backend.services.server.domain.Service;
 import eu.decideh2020.acsmi.backend.services.server.domain.ServiceAttributeValue;
+import eu.decideh2020.acsmi.backend.services.server.domain.ServiceIncidence;
+import eu.decideh2020.acsmi.backend.services.server.domain.ServiceLegalAssessment;
+import eu.decideh2020.acsmi.backend.services.server.domain.ServiceLegalManagement;
 import eu.decideh2020.acsmi.backend.services.server.domain.vo.AttributeVO;
 import eu.decideh2020.acsmi.backend.services.server.domain.vo.ServiceDevOpsInfoVO;
 import eu.decideh2020.acsmi.backend.services.server.domain.vo.ServiceDevOpsQueryInfoVO;
@@ -72,12 +92,15 @@ import eu.decideh2020.acsmi.backend.services.server.domain.vo.ServiceFullInfoVO;
 import eu.decideh2020.acsmi.backend.services.server.domain.vo.ServiceNFRInfoExtendedVO;
 import eu.decideh2020.acsmi.backend.services.server.domain.vo.ServiceNFRInfoVO;
 import eu.decideh2020.acsmi.backend.services.server.repository.DefinitionRepository;
+import eu.decideh2020.acsmi.backend.services.server.repository.LegalAssessmentRepository;
 import eu.decideh2020.acsmi.backend.services.server.repository.ServiceAttributeValueRepository;
 import eu.decideh2020.acsmi.backend.services.server.repository.ServiceIncidenceRepository;
+import eu.decideh2020.acsmi.backend.services.server.repository.ServiceLegalManagementRepository;
 import eu.decideh2020.acsmi.backend.services.server.repository.ServiceRepository;
 import eu.decideh2020.acsmi.backend.services.server.web.rest.util.HeaderUtil;
 import io.github.jhipster.web.util.ResponseUtil;
 
+
 /**
  * REST controller for managing Service.
  */
@@ -93,18 +116,26 @@ public class ServiceResource {
     private final ServiceAttributeValueRepository serviceAttributeValueRepository;
     private final DefinitionRepository definitionRepository;
     private final ServiceIncidenceRepository serviceIncidenceRepository;
+    private final LegalAssessmentRepository legalAssessmentRepository;
+    private final ServiceLegalManagementRepository serviceLegalManagementRepository;
     
     private final Long CSP_TYPE_ID = 3L;
+    private final Long LEGAL_LEVEL_TYPE_ID = 24L;
+    private final String LEGAL_LEVEL_STARTING_CODE = "LEG";
 
     
     public ServiceResource(ServiceRepository serviceRepository, ServiceAttributeValueRepository serviceAttributeValueRepository,
-    		DefinitionRepository definitionRepository, ServiceIncidenceRepository serviceIncidenceRepository) {
+    		DefinitionRepository definitionRepository, ServiceIncidenceRepository serviceIncidenceRepository,
+    		LegalAssessmentRepository legalAssessmentRepository, ServiceLegalManagementRepository serviceLegalManagementRepository) {
         this.serviceRepository = serviceRepository;
         this.serviceAttributeValueRepository = serviceAttributeValueRepository;
         this.definitionRepository = definitionRepository;
         this.serviceIncidenceRepository = serviceIncidenceRepository;
+        this.legalAssessmentRepository = legalAssessmentRepository;
+        this.serviceLegalManagementRepository = serviceLegalManagementRepository;
     }
 
+    
     /**
      * POST  /services : Create a new service.
      *
@@ -115,7 +146,7 @@ public class ServiceResource {
     @PostMapping("/services")
     @Timed
     @Transactional
-    public ResponseEntity<Service> createService(@Valid @RequestBody Service service, @RequestParam List<String> attributes) throws URISyntaxException {
+    public ResponseEntity<Service> createService(@Valid @RequestBody Service service, @RequestParam List<String> attributes, @RequestParam List<String> controls) throws URISyntaxException {
     	log.debug("REST request to save Service : {}", service);
         try {        	
         	if (service.getId() != null) {
@@ -136,12 +167,36 @@ public class ServiceResource {
         	
         	// Insertar los valores de atributos
         	if (attributes != null && !attributes.isEmpty()) {
-    			ServiceAttributeValueResource attrResource = new ServiceAttributeValueResource(serviceAttributeValueRepository);
+        		log.debug("createService  ::  creating attributes...");
+    			final ServiceAttributeValueResource attrResource = new ServiceAttributeValueResource(serviceAttributeValueRepository);
         		for (String attr : attributes) {
         			ServiceAttributeValue attribute = convertAttributeStringToObject(result.getId(), attr);
         			attrResource.createServiceAttributeValue(attribute);
         		}
+        		log.debug("createService  ::  attributes created");
     		}
+        	
+        	// Insertar legal assessment y service legal management
+        	if (controls != null && !controls.isEmpty()) {
+    			final LegalAssessmentResource legalResource = new LegalAssessmentResource(legalAssessmentRepository,
+    					serviceLegalManagementRepository, serviceAttributeValueRepository);
+    			
+    			log.debug("createService  ::  creating service legal assessment...");
+    			final ServiceLegalAssessment assessment = convertLegalControlsStringToObject(controls, result.getId());
+    			legalResource.saveServiceLegalAssessmentQuestionnaire(assessment);
+    			log.debug("createService  ::  service legal assessment created");
+    			
+    			log.debug("createService  ::  creating service legal management...");
+    			final boolean noContractAlert = calculateNoContractAlert(result);
+    			ServiceLegalManagement serviceLegalManagement = new ServiceLegalManagement();
+    			serviceLegalManagement.setNocontractalert(noContractAlert);
+    			serviceLegalManagement.setModifiedcontractalert(false);
+    			serviceLegalManagement.setFormalert(!noContractAlert);
+    			serviceLegalManagement.setServiceid(result.getId());
+    			legalResource.createServiceLegalManagement(serviceLegalManagement);
+    			log.debug("createService  ::  service legal management created");
+    		}        	
+        	
         	log.debug("createService  ::  creating OK");
         	
             return ResponseEntity.created(new URI("/api/services/" + result.getId()))
@@ -167,7 +222,7 @@ public class ServiceResource {
     @PutMapping("/services")
     @Timed
     @Transactional
-    public ResponseEntity<Service> updateService(@Valid @RequestBody Service service, @RequestParam List<String> attributes) throws URISyntaxException {
+    public ResponseEntity<Service> updateService(@Valid @RequestBody Service service, @RequestParam List<String> attributes, @RequestParam List<String> controls) throws URISyntaxException {
     	log.debug("REST request to update Service : {}", service);
         try {
         	boolean reactivate = false;
@@ -183,7 +238,7 @@ public class ServiceResource {
         		service.setDeleteddate(null);
         	} else {
         		if (service.getId() == null) {
-                    return createService(service, attributes);
+                    return createService(service, attributes, controls);
                 }
         		
         		// Comprobar que el servicio no existe previamente
@@ -206,6 +261,42 @@ public class ServiceResource {
             			attrResource.createServiceAttributeValue(attribute);
             		}
         		}
+        		
+        		// Tratar Legal Assessment y Service Legal Management
+        		if (controls != null && !controls.isEmpty()) {
+        			// Obtener alertas previas
+        			log.debug("updateService  ::  getting previous legal management for the service...");
+        			final ServiceLegalManagement previousServiceLegalManagement = serviceLegalManagementRepository.findAlertsByServiceId(service.getId());
+        			
+        			// Guardar cuestionario legal
+        			log.debug("updateService  ::  saving service legal assessment...");
+        			final LegalAssessmentResource legalResource = new LegalAssessmentResource(legalAssessmentRepository,
+        					serviceLegalManagementRepository, serviceAttributeValueRepository);			
+        			final ServiceLegalAssessment assessment = convertLegalControlsStringToObject(controls, service.getId());
+        			legalResource.saveServiceLegalAssessmentQuestionnaire(assessment);
+        			log.debug("updateService  ::  saving OK...");
+        			
+        			// Actualizar alertas
+        			log.debug("updateService  ::  calculating legal alerts...");
+        			final boolean noContractAlert = calculateNoContractAlert(service);
+        			final boolean[] modifiedContractAndFormAlert = calculateModifiedContractAndFormAlert(
+        					service, serviceRepository.findOne(service.getId()), previousServiceLegalManagement, noContractAlert);
+        			
+        			log.debug("updateService  ::  updating service legal management...");
+        			ServiceLegalManagement serviceLegalManagement = new ServiceLegalManagement();
+        			serviceLegalManagement.setNocontractalert(noContractAlert);
+        			serviceLegalManagement.setModifiedcontractalert(modifiedContractAndFormAlert[0]);
+        			serviceLegalManagement.setFormalert(modifiedContractAndFormAlert[1]);
+        			serviceLegalManagement.setServiceid(service.getId());
+        			serviceLegalManagementRepository.updateContractAlertsByServiceId(service.getId(), noContractAlert, modifiedContractAndFormAlert[0], modifiedContractAndFormAlert[1]);
+        			log.debug("updateService  ::  updating OK...");
+        			
+        			// Reiniciar formulario legal si ha cambiado algún contrato de servicio
+        			log.debug("updateService  ::  reseting questionnaire if necessary...");
+        			if (noContractAlert || modifiedContractAndFormAlert[0]) {
+        				legalResource.resetServiceLegalAssessmentQuestionnaire(String.valueOf(service.getId()));
+        			}
+        		}
         	}
         	
         	// Modificar el servicio
@@ -383,7 +474,7 @@ public class ServiceResource {
     
     
     /**
-     * GET  /service-providers/cspservices : get all the servics by CSP.
+     * GET  /services/cspservices : get all the services by CSP.
      *
      * @return the ResponseEntity with status 200 (OK) and the list of services in body
      */
@@ -407,6 +498,28 @@ public class ServiceResource {
        	}
     }
     
+    
+    /**
+     * GET  /services/short-info : get the id and name of all the services.
+     *
+     * @return the ResponseEntity with status 200 (OK) and the list of services in body
+     */
+    @GetMapping("/services/short-info")
+    @Timed
+    @Transactional
+    public ResponseEntity<List<Service>> getServicesShortInfo() {
+       log.debug("REST request to get Services");
+       try {
+    	   log.debug("getServicesShortInfo  ::  loading services info...");
+    	   return ResponseEntity.ok(serviceRepository.getServicesShortInfo());
+       	} catch (Exception e) {
+       		log.error("getServicesShortInfo  ::  Exception  ::  " + e.getMessage());
+       		return ResponseEntity.badRequest()
+                   .headers(HeaderUtil.createFailureAlert(
+                   		ENTITY_NAME, "serviceGetShortInfoError", "Cannot get the list of Services")).body(null);
+       	}
+    }
+    
 
     /**
      * GET  /services/:id : get the "id" service.
@@ -449,6 +562,47 @@ public class ServiceResource {
         }
     }
     
+    
+    /**
+     * GET  /services/pdf : get the "id" service.
+     *
+     * @param id the id of the service to retrieve
+     * @return the ResponseEntity with status 200 (OK) and with body the service, or with status 404 (Not Found)
+     */
+    @GetMapping("/services/pdf")
+    @Timed
+    public ResponseEntity<Map<String, String>> exportPDF(@RequestParam Long serviceid) {
+    	log.debug("REST request to export to PDF");
+        try {
+        	log.debug("exportPDF  ::  getting Service...");
+        	final Service service = getService(serviceid).getBody();
+        	log.debug("exportPDF  ::  getting OK...");
+        	
+        	if (service != null) {
+        		// Build PDF
+            	log.debug("exportPDF  ::  Building PDF...");
+            	byte[] result = buildPDF(service);
+            	log.debug("exportPDF  ::  building OK");
+            	
+            	// Get the PDF file
+    	        if (result != null && result.length > 0) {
+    	       		Map<String, String> map = new HashMap<String, String>();
+    	    		map.put("data", DatatypeConverter.printBase64Binary(result));
+    	    		return ResponseEntity.ok().body(map);
+    	    	}
+        	}
+        	
+	        return ResponseEntity.badRequest()
+                    .headers(HeaderUtil.createFailureAlert(ENTITY_NAME, "serviceExportPDFError", "Cannot export to PDF"))
+                    .body(null);
+        } catch (Exception e) {
+        	log.error("exportPDF  ::  Exception  ::  " + e.getMessage());
+        	return ResponseEntity.badRequest()
+                    .headers(HeaderUtil.createFailureAlert(ENTITY_NAME, "serviceExportPDFError", "Cannot export to PDF"))
+                    .body(null);
+        }
+    }
+    
 
     /**
      * DELETE  /services/:id : delete the "id" service.
@@ -485,6 +639,10 @@ public class ServiceResource {
         		// Eliminar definitivamente los atributos del servicio
         		serviceAttributeValueRepository.deleteByIdService(id);
         		
+        		// Eliminar definitivamente el cuestionario de legal assessment y el service lefal management
+        		legalAssessmentRepository.deleteServiceLegalAssessmentQuestionnaire(id);
+        		serviceLegalManagementRepository.delete(id);
+        		
         		// Eliminar definitivamente el servicio
         		log.debug("deleteService  ::  deleting service...");
             	serviceRepository.delete(id);
@@ -522,8 +680,8 @@ public class ServiceResource {
     	log.debug("deleteSconvertAttributeStringToObjectervice  ::  converting String...");
     	ServiceAttributeValue object = null;
     	if (attribute != null && !attribute.isEmpty()) {
-    		ObjectMapper mapper = new ObjectMapper();
-    		AttributeVO vo = mapper.readValue(attribute, AttributeVO.class);
+    		final ObjectMapper mapper = new ObjectMapper();
+    		final AttributeVO vo = mapper.readValue(attribute, AttributeVO.class);
     		if (vo != null) {
     			object = new ServiceAttributeValue();
     			object.setServiceattributevalue(vo.getValue());
@@ -538,6 +696,28 @@ public class ServiceResource {
     }
     
     
+    /**
+     * Converts a list of LegalControl in String format into an ServiceLegalAssessment object
+     * @param serviceid The original attribute in String format
+     * @return ServiceLegalAssessment
+     * @throws IOException 
+     * @throws JsonMappingException 
+     * @throws JsonParseException
+     */
+    private ServiceLegalAssessment convertLegalControlsStringToObject(final List<String> controls, final Long serviceid) throws JsonParseException, JsonMappingException, IOException {
+    	log.debug("deleteSconvertAttributeStringToObjectervice  ::  converting String...");
+    	final ObjectMapper mapper = new ObjectMapper();
+		mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+		ServiceLegalAssessment assessment = new ServiceLegalAssessment();
+		assessment.setServiceid(serviceid);
+		for (String control : controls) {
+			final LegalControl legalControl = mapper.readValue(control, LegalControl.class);
+			assessment.getControls().add(legalControl);
+		}
+		return assessment;
+    }
+    
+    
     /**
      * Builds an AttributeVO object.
      * @param object ServiceFullInfoVO object.
@@ -549,7 +729,7 @@ public class ServiceResource {
 		attr.setName(object.getAttributename());
 		attr.setNfrname(object.getAttributenfrname());
 		attr.setIsenumeration(object.isIsenumeration());
-		attr.setIschecklist(object.isIschecklist());
+		attr.setIsform(object.isIsform());
 		attr.setIscommon(object.isIscommon());
 		attr.setIsfunctionalrequirement(object.isIsfunctionalrequirement());
 		attr.setParentid(object.getParentid());
@@ -557,12 +737,23 @@ public class ServiceResource {
 		attr.setUnits(object.getUnits());
 		attr.setUnitfactor(object.getUnitfactor());
 		attr.setUnitrule(object.getUnitrule());
-		attr.setChecklistevalrule(object.getChecklistevalrule());
+		attr.setEvalrule(object.getEvalrule());
 		attr.setUnitvalue(object.getUnitvalue());
 		attr.setChecklistvalue(object.getChecklistvalue());
 		attr.setValueid(object.getAttributevalueid());
 		attr.setValue(object.getValue());
 		attr.setHuman(object.getDefinition());
+		if (object.getAttributetypeid().longValue() == LEGAL_LEVEL_TYPE_ID && object.getValue() != null) {
+			final List<Definition> definitions = definitionRepository.getDefinitionsByStartingCode(LEGAL_LEVEL_STARTING_CODE);
+			if (definitions != null && !definitions.isEmpty()) {
+				for (Definition def : definitions) {
+					if (def.getCode().equals(LEGAL_LEVEL_STARTING_CODE + object.getValue())) {
+						attr.setHuman(def.getValue());
+						break;
+					}
+				}
+			}
+		}
 		return attr;
     }
     
@@ -619,4 +810,308 @@ public class ServiceResource {
     	
     	return new ArrayList<Service>(map.values());
     }
+    
+    
+    /**
+     * Calculates the "no contract" alert for a service.
+     * @param service The source service.
+     * @return boolean
+     */
+    private boolean calculateNoContractAlert(final Service service) {
+    	return service.getFirstcontract() == null && service.getSecondcontract() == null && service.getThirdcontract() == null;
+    }
+    
+    
+    /**
+     * Calculates the "modified contract" and "form" alerts for a service.
+     * @param service The source service.
+     * @param previousService The previous service in database.
+     * @return boolean[]
+     */
+    private boolean[] calculateModifiedContractAndFormAlert(final Service service, final Service previousService,
+    		final ServiceLegalManagement previousServiceLegalManagement, final boolean noContractAlert) {
+    	boolean[] result = new boolean[2];
+    	result[0] = previousServiceLegalManagement.isModifiedcontractalert();
+    	result[1] = previousServiceLegalManagement.isFormalert();
+    	
+    	if (!noContractAlert) {
+    		if (calculateNoContractAlert(previousService)) {
+    			result[1] = true;
+    		} else {
+    			final boolean firstContract = areByteArraysDifferent(previousService.getFirstcontract(), service.getFirstcontract());
+        		final boolean secondContract = areByteArraysDifferent(previousService.getSecondcontract(), service.getSecondcontract());
+        		final boolean thirdContract = areByteArraysDifferent(previousService.getThirdcontract(), service.getThirdcontract());
+        		if (firstContract || secondContract || thirdContract) {
+        			result[0] = true;
+        			result[1] = true;
+        		}
+    		}
+    	}
+    	return result;
+    }
+    
+    
+    /**
+     * Compares two byte arrays. Returns true if both arrays are not equal.
+     * @param firstArray The first array.
+     * @param secondArray The second array.
+     * @return boolean
+     */
+    private boolean areByteArraysDifferent(final byte[] firstArray, final byte[] secondArray) {
+    	if (firstArray == null && secondArray == null) {
+    		return false;
+    	}
+
+    	if (firstArray == null || secondArray == null) {
+    		return true;
+    	}
+
+    	if (firstArray.length != secondArray.length) {
+    		return true;
+    	}
+
+    	for (int i = 0; i < firstArray.length; i++) {
+    		if (firstArray[i] != secondArray[i]) {
+    			return true;
+    		}
+    	}
+    	return false;
+    }
+    
+    
+    /**
+     * Build the PDF document to export
+     * @param service The service.
+     * @return byte[]
+     * @throws DocumentException
+     */
+    private byte[] buildPDF(final Service service) throws DocumentException {
+    	ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+    	final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+    	
+    	// Open Document
+    	Document document = new Document();
+    	PdfWriter.getInstance(document, byteArrayOutputStream);
+        document.open();
+        
+        // Add title
+        document.add(buildPDFParagraph("Service " + service.getServicename()));
+        
+        // Print attributes
+        final List<AttributeVO> attributes = service.getAttributes();
+        if (attributes != null && !attributes.isEmpty()) {
+	        // Create the table for common attributes
+        	PdfPTable commonAttributesTable = buildPDFTable("Common attributes", 30, 70);
+        	for (final AttributeVO attr : attributes) {
+        		if (attr.isIscommon() && attr.getHuman() != null) {
+        			final String[] rowData = buildPDFRow(attr.getName(), attr.getHuman(), null, null);
+            		List<String[]> row = new ArrayList<String[]>();
+            		row.add(rowData);
+            		
+            		commonAttributesTable.addCell(buildPDFTableCell(rowData[0], true));
+            		commonAttributesTable.addCell(buildPDFTableCell(rowData[1], false));
+        		}
+        	}
+        	
+        	// Create the table for functional attributes
+        	PdfPTable functionalAttributesTable = buildPDFTable("FR (Functional Requirements) attributes", 30, 70);
+            for (final AttributeVO attr : attributes) {
+            	if (attr.isIsfunctionalrequirement() && attr.getValue() != null) {
+            		final String[] rowData = buildPDFRow(attr.getName(), attr.getValue(), attr.getUnitvalue(), attr.getUnits());
+            		List<String[]> row = new ArrayList<String[]>();
+            		row.add(rowData);
+            		
+            		functionalAttributesTable.addCell(buildPDFTableCell(rowData[0], true));
+            		functionalAttributesTable.addCell(buildPDFTableCell(rowData[1], false));
+        		}
+            }
+            
+            // Create the table for non functional attributes
+            PdfPTable nonFunctionalAttributesTable = buildPDFTable("NFR (Non Functional Requirements) attributes", 40, 60);
+            for (final AttributeVO attr : attributes) {
+            	if (!attr.isIscommon() && !attr.isIsfunctionalrequirement() && attr.getValue() != null) {
+            		final String[] rowData = buildPDFRow(attr.getName(), (attr.getHuman() != null ? attr.getHuman() : attr.getValue()), attr.getUnitvalue(), attr.getUnits());
+            		List<String[]> row = new ArrayList<String[]>();
+            		row.add(rowData);
+            		
+            		nonFunctionalAttributesTable.addCell(buildPDFTableCell(rowData[0], true));
+            		nonFunctionalAttributesTable.addCell(buildPDFTableCell(rowData[1], false));
+        		}
+            }
+            
+            // Add tables to the document
+            document.add(commonAttributesTable);
+            document.add(functionalAttributesTable);
+            document.add(nonFunctionalAttributesTable);
+        }
+        
+        // Print incidences
+        final List<ServiceIncidence> incidences = service.getIncidences();
+        if (incidences != null && !incidences.isEmpty()) {
+        	// Create the table for incidences
+            PdfPTable incidencesTable = buildPDFTable("Incidences in the last 30 days", 30, 70);
+        	for (ServiceIncidence incidence : incidences) {
+        		float diff = (Math.abs(new Date().getTime() - new Date(incidence.getTimestamp()).getTime())) / (1000 * 60 * 60 * 24);
+        		if (diff <= 30) {
+        			final String[] rowData = buildPDFRow("[ " + sdf.format(incidence.getTimestamp()) + " ]", incidence.getDetail(), null, null);
+            		List<String[]> row = new ArrayList<String[]>();
+            		row.add(rowData);
+            		
+            		incidencesTable.addCell(buildPDFTableCell(rowData[0], true));
+            		incidencesTable.addCell(buildPDFTableCell(rowData[1], false));
+        		}
+        	}
+        	// Add table to the document
+            document.add(incidencesTable);
+        }
+        
+        
+        // Print legal information provided by the CSP
+        final LegalAssessmentResource legalResource = new LegalAssessmentResource(legalAssessmentRepository,
+				serviceLegalManagementRepository, serviceAttributeValueRepository);
+        final ServiceLegalAssessment assessment = legalResource.getServiceLegalAssessments("" + service.getId()).getBody();
+        
+        if (assessment != null) {
+        	// Insert new page and add a new title
+        	document.newPage();
+        	document.add(buildPDFParagraph("Legal information provided by the CSP"));
+        	
+        	final List<LegalControl> controls = assessment.getControls();
+        	if (controls != null && !controls.isEmpty()) {
+        		for (LegalControl control : controls) {
+        			if (control.isIssimplecontrol()) {
+        				// Create the table for simple control
+	        			PdfPTable simpleControlTable = buildPDFTable(control.getQuestion(), 10, 90);
+	        			
+	        			final List<LegalAnswer> answers = control.getAnswers();
+	        			if (answers != null && !answers.isEmpty()) {
+        					for (LegalAnswer answer : answers) {
+        						if (control.getScore().shortValue() == answer.getScore().shortValue()) {
+        							final String[] rowData = buildPDFRow("Answer", answer.getAnswer(), null, null);
+        		               		List<String[]> row = new ArrayList<String[]>();
+        		               		row.add(rowData);
+        		               		
+        		               		simpleControlTable.addCell(buildPDFTableCell(rowData[0], true));
+        		               		simpleControlTable.addCell(buildPDFTableCell(rowData[1], false));
+        		               		
+        							break;
+        						}
+        					}
+        				}
+	        			
+	        			// Add table to the document
+	                    document.add(simpleControlTable);
+        			}
+        		}
+        		
+        		// Insert new page and add a new title
+        		document.newPage();
+            	document.add(buildPDFParagraph("Legal information provided by the Legal Expert"));
+        		
+        		for (LegalControl control : controls) {
+        			if (!control.isIssimplecontrol()) {
+        				// Create the table for layered control
+	        			PdfPTable layeredControlTable = buildPDFTable(control.getQuestion(), 15, 85);
+	        			
+	        			final List<LegalAnswer> answers = control.getAnswers();
+	        			if (answers != null && !answers.isEmpty()) {
+        					for (LegalAnswer answer : answers) {
+        						if (control.getScore().shortValue() == answer.getScore().shortValue()) {
+        							String[] rowData = buildPDFRow("Answer", answer.getAnswer(), null, null);
+        		               		List<String[]> row = new ArrayList<String[]>();
+        		               		row.add(rowData);
+        		               		
+        		               		layeredControlTable.addCell(buildPDFTableCell(rowData[0], true));
+        		               		layeredControlTable.addCell(buildPDFTableCell(rowData[1], false));
+        		               		
+        		               		rowData = buildPDFRow("Justification", control.getJustification() != null ? control.getJustification() : "", null, null);
+        		               		row = new ArrayList<String[]>();
+        		               		row.add(rowData);
+        		               		
+        		               		layeredControlTable.addCell(buildPDFTableCell(rowData[0], true));
+        		               		layeredControlTable.addCell(buildPDFTableCell(rowData[1], false));
+        		               		
+        							break;
+        						}
+        					}
+        				}
+	        			
+	        			// Add table to the document
+	                    document.add(layeredControlTable);
+        			}
+        		}
+        	}
+        }
+        
+        // Close document
+        document.close();
+    	
+    	return (byteArrayOutputStream != null ? byteArrayOutputStream.toByteArray() : null);
+    }
+    
+    
+    /**
+     * Builds a paragraph for the PDF document.
+     * @param text The text.
+     * @return Paragraph
+     */
+    private Paragraph buildPDFParagraph(final String text) {
+        Paragraph paragrapah = new Paragraph(text, new Font(FontFamily.HELVETICA, 12, Font.NORMAL));
+        paragrapah.setIndentationLeft(40f);
+        paragrapah.setSpacingAfter(20f);
+        return paragrapah;
+    }
+    
+    
+    /**
+     * Builds a table for the PDF Document.
+     * @param title The title.
+     * @param firstColumnWidth The firstColumnWidth.
+     * @param secondColumnWidth The secondColumnWidth.
+     * @return PdfPTable
+     */
+    private PdfPTable buildPDFTable(final String title, final float firstColumnWidth, final float secondColumnWidth) {
+    	PdfPTable table = new PdfPTable(new float[] { firstColumnWidth, secondColumnWidth });
+    	table.setSpacingAfter(20f);
+    	PdfPCell header = new PdfPCell(new Paragraph(title, new Font(FontFamily.HELVETICA, 8, Font.BOLD)));
+        header.setColspan(2);
+        header.setPadding(8.0f);
+        header.setBackgroundColor(new BaseColor(128, 179, 252));
+        table.addCell(header);
+        return table;
+    }
+    
+    
+    /**
+     * Build a row for a PDF Table.
+     * @param attributeName The attributeName.
+     * @param attributeValue The attributeValue.
+     * @param unitValue The unitValue.
+     * @param units The units.
+     * @return String[]
+     */
+    private String[] buildPDFRow(final String attributeName, final String attributeValue, final String unitValue, final String units) {
+    	String[] rowData = {attributeName, attributeValue};
+		if (unitValue != null) {
+			rowData[1] += " (" + unitValue + ")";
+		} else if (units != null) {
+			rowData[1] += " (" + units + ")";
+		}
+		return rowData;
+    }
+    
+    
+    /**
+     * Build a cell for a PDF Table.
+     * @param data The data.
+     * @param font The font.
+     * @return PdfPCell
+     */
+    private PdfPCell buildPDFTableCell(final String data, final boolean isFirstColumn) {
+    	PdfPCell cell = new PdfPCell(new Paragraph(data, isFirstColumn ?
+    			new Font(FontFamily.HELVETICA, 7, Font.BOLD) : new Font(FontFamily.HELVETICA, 7, Font.NORMAL)));
+    	cell.setBackgroundColor(isFirstColumn ? new BaseColor(226, 237, 255) : new BaseColor(250, 252, 248));
+    	cell.setPadding(4.0f);
+		return cell;
+    }
 }
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/VaultResource.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/VaultResource.java
new file mode 100644
index 0000000000000000000000000000000000000000..3d030248ae57d89e145e5a86660e54b07b90bdd1
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/VaultResource.java
@@ -0,0 +1,129 @@
+/*******************************************************************************
+ * Copyright (c) 2017 Tecnalia.
+ * 
+ * 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.
+ * 
+ * The code has been contributed over a stub generated with the JHipster
+ * Application generator http://www.jhipster.tech/.
+ * 
+ * Contributors (in alphabetical order):
+ * 
+ * Alberto Molinuevo					Tecnalia
+ * Gorka Benguria                       Tecnalia
+ * Iñaki Etxaniz                        Tecnalia
+ * Juncal Alonso                        Tecnalia
+ * Leire Orue-Echevarria                Tecnalia
+ * Maria Jose lopez                     Tecnalia
+ * Marisa Escalante                     Tecnalia
+ * 
+ * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+ ******************************************************************************/
+package eu.decideh2020.acsmi.backend.services.server.web.rest;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.Arrays;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.http.server.ServletServerHttpRequest;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.client.RestTemplate;
+import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
+import org.springframework.web.util.UriComponents;
+import org.springframework.web.util.UriComponentsBuilder;
+
+import com.codahale.metrics.annotation.Timed;
+
+import eu.decideh2020.acsmi.backend.services.server.web.rest.util.HeaderUtil;
+import eu.decideh2020.acsmi.backend.services.server.web.rest.vm.LoginVM;
+
+
+/**
+ * REST controller for managing Vault.
+ */
+@RestController
+@RequestMapping("/api")
+public class VaultResource {
+
+    private final Logger log = LoggerFactory.getLogger(VaultResource.class);
+    
+    private static final String ENTITY_NAME = "vault";
+    
+    private final String FRONTEND_AUTHENTICATION_PATH = "/api/authenticate";
+    
+    
+    @GetMapping("/vault/acsmi-authenticate")
+    @Timed
+    public ResponseEntity<String> acsmiAuthenticate(@RequestParam String username, @RequestParam String password, HttpServletRequest request) {
+    	log.debug("REST request to login");
+        try {
+        	log.debug("acsmiAuthenticate  ::  build parameters...");
+        	final URI uri = buildAuthenticationURI(request);
+        	final HttpEntity<LoginVM> entity = buildEntity(username, password);
+
+        	log.debug("acsmiAuthenticate  ::  Call to authentication API...");
+        	ResponseEntity<String> response = new RestTemplate().exchange(uri, HttpMethod.POST, entity, String.class);
+        	if (response.getStatusCode() != HttpStatus.OK) {
+        		throw new Exception();
+            }
+        	return ResponseEntity.ok(response.getBody());
+        } catch (Exception e) {
+        	log.error("acsmiAuthenticate  ::  Exception  ::  " + e.getMessage());
+        	return ResponseEntity.badRequest()
+                    .headers(HeaderUtil.createFailureAlert(
+                    		ENTITY_NAME, "acsmiAuthenticateError", "Bad credentials")).body(null);
+        }
+    }
+    
+    
+    /**
+     * Builds the authentication URI.
+     * @param request The request.
+     * @return URI
+     * @throws URISyntaxException
+     */
+    private URI buildAuthenticationURI(final HttpServletRequest request) throws URISyntaxException {
+    	final UriComponents uriComponents = UriComponentsBuilder.fromHttpRequest(new ServletServerHttpRequest(request)).build();
+    	UriComponentsBuilder builder = ServletUriComponentsBuilder.newInstance();
+    	builder
+    		.scheme(uriComponents.getScheme())
+    		.host(uriComponents.getHost())
+    		.port(uriComponents.getPort());
+    	return new URI((new StringBuffer(builder.build().toString()).append(FRONTEND_AUTHENTICATION_PATH)).toString());
+    }
+    
+    
+    /**
+     * Build the entity.
+     * @param username The username.
+     * @param password The password.
+     * @return HttpEntity
+     */
+    private HttpEntity<LoginVM> buildEntity(final String username, final String password) {
+		HttpHeaders headers = new HttpHeaders();
+		headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
+		return new HttpEntity<LoginVM>(new LoginVM(username, password, false), headers);
+    }
+}
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/errors/CustomParameterizedException.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/errors/CustomParameterizedException.java
index d3545d22c4b6ea8be15617c4cef24703350dced0..0281d5659ccadb5f2c5b15282f6870cfdf02e3a3 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/errors/CustomParameterizedException.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/errors/CustomParameterizedException.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/errors/ErrorConstants.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/errors/ErrorConstants.java
index 750b6ed8f30790cd00f1d7c612137c59b0fac912..a418fbc4bb58efac7b4351b8069f5e3133506e3a 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/errors/ErrorConstants.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/errors/ErrorConstants.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/errors/ErrorVM.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/errors/ErrorVM.java
index 4bcee24af186ff33da9461c9f9f1ac7a358feca6..281cec6c1915ad94d049fc27dac1238714272d05 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/errors/ErrorVM.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/errors/ErrorVM.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/errors/ExceptionTranslator.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/errors/ExceptionTranslator.java
index 43c13dc955477047cf9a09f88fc13b296fc42a7a..06f47d9c9f87562abdb6fff034bb4ba26be64e58 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/errors/ExceptionTranslator.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/errors/ExceptionTranslator.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/errors/FieldErrorVM.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/errors/FieldErrorVM.java
index c72ec30044e6de61b85fdf93423a9acac39a49ca..d4d498f36880582d6de88dcb00d25199ff9444d3 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/errors/FieldErrorVM.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/errors/FieldErrorVM.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/errors/ParameterizedErrorVM.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/errors/ParameterizedErrorVM.java
index 49cd5fa63ab4de45880e314f608a661c9b90ab4b..92eccc87baf54b9adb53ea2d6b9aa2a8a7646903 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/errors/ParameterizedErrorVM.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/errors/ParameterizedErrorVM.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/package-info.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/package-info.java
index cca0bde33aacb89fa8e4aeb5cfb7b8d211a9b7bd..345b2b8874c3f7a8233c52f401c17a6e9c97fd02 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/package-info.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/package-info.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/util/HeaderUtil.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/util/HeaderUtil.java
index 2559079d21e580749c2b6d0f83eb98e1e281a347..da8724fe14f6b217fa5f9a26a65aa4463e09e390 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/util/HeaderUtil.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/util/HeaderUtil.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/util/PaginationUtil.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/util/PaginationUtil.java
index a21249ab445d845f20ec6b1874eb88641fd3057a..e79f0732a6ef8342f6b72b875d950cfdb5f8b3ba 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/util/PaginationUtil.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/util/PaginationUtil.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/vm/LoggerVM.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/vm/LoggerVM.java
index 61ccd84285bc28afe778cdba82c09141ea6d651c..1fbbfb81dff8ea97190193e137606df3508ea4f5 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/vm/LoggerVM.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/vm/LoggerVM.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/vm/LoginVM.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/vm/LoginVM.java
index 52f34a47dbb515afcc8ffad5beec209eb786d0c9..6f0ec346f09b059ad7b2b5d8de9ece927c7ad3a2 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/vm/LoginVM.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/vm/LoginVM.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
@@ -48,6 +49,16 @@ public class LoginVM {
     private String password;
 
     private Boolean rememberMe;
+    
+    
+    public LoginVM() {}
+    
+    public LoginVM(final String username, final String password, final Boolean rememberMe) {
+    	this.username = username;
+    	this.password = password;
+    	this.rememberMe = rememberMe;
+    }
+    
 
     public String getUsername() {
         return username;
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/vm/package-info.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/vm/package-info.java
index 7269d8345c763b1c71fe25eef687ceda36ee3108..055477ef02a05aa8d7a57d8a1ba058fa31592212 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/vm/package-info.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/java/eu/decideh2020/acsmi/backend/services/server/web/rest/vm/package-info.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/resources/config/application-prod.yml b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/resources/config/application-prod.yml
index 730c356ebbc264cf43407a63a25d6fbd17799736..a199dceeee78af763c1de6571c53fb71637dd606 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/resources/config/application-prod.yml
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/resources/config/application-prod.yml
@@ -28,7 +28,7 @@ spring:
             enabled: false
     datasource:
         type: com.zaxxer.hikari.HikariDataSource
-        url: jdbc:mysql://localhost:3306/acsmiservices?useUnicode=true&characterEncoding=utf8&useSSL=false
+        url: jdbc:mysql://localhost:3306/acsmi_backend_services_server?useUnicode=true&characterEncoding=utf8&useSSL=false
         username: root
         password:
         hikari:
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/resources/config/influxdb-prod.yml b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/resources/config/influxdb-prod.yml
index 2047df9f57631f32997dbf19c62fa1f167792398..3be45f4abb3aaf0d73a0f371625c7899669710cb 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/resources/config/influxdb-prod.yml
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/resources/config/influxdb-prod.yml
@@ -1,4 +1,4 @@
-url: http://influxdb.backend.integration.acsmi.esilab.org/write?db=
+url: http://acsmi.influxdb/write?db=
 database: test
 repeat: 6
 delay: 500
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/resources/config/liquibase/changelog/20170717114231_added_entity_ServiceAttributeType.xml b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/resources/config/liquibase/changelog/20170717114232_added_entity_ServiceAttributeType.xml
similarity index 91%
rename from ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/resources/config/liquibase/changelog/20170717114231_added_entity_ServiceAttributeType.xml
rename to ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/resources/config/liquibase/changelog/20170717114232_added_entity_ServiceAttributeType.xml
index 9e93f7cd8d25a7e8f679da198aecededdd585677..87bdbc9e240a79fe421c55c19825bc4590c3aee8 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/resources/config/liquibase/changelog/20170717114231_added_entity_ServiceAttributeType.xml
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/resources/config/liquibase/changelog/20170717114232_added_entity_ServiceAttributeType.xml
@@ -17,7 +17,7 @@
     <!--
         Added the entity ServiceAttributeType.
     -->
-    <changeSet id="20170717114231-1" author="jhipster">
+    <changeSet id="20170717114232-1" author="jhipster">
         <createTable tableName="service_attribute_type">
             <column name="id" type="bigint" autoIncrement="${autoIncrement}">
                 <constraints primaryKey="true" nullable="false"/>
@@ -35,7 +35,7 @@
                 <constraints nullable="false" />
             </column>
             
-            <column name="ischecklist" type="boolean">
+            <column name="isform" type="boolean">
                 <constraints nullable="false" />
             </column>
             
@@ -55,7 +55,7 @@
                 <constraints nullable="true" />
             </column>
             
-            <column name="units" type="varchar(20)">
+            <column name="units" type="varchar(35)">
                 <constraints nullable="true" />
             </column>
             
@@ -63,11 +63,11 @@
                 <constraints nullable="true" />
             </column>
             
-            <column name="unitrule" type="varchar(2)">
+            <column name="unitrule" type="varchar(4)">
                 <constraints nullable="true" />
             </column>
             
-            <column name="checklistevalrule" type="varchar(70)">
+            <column name="evalrule" type="varchar(70)">
                 <constraints nullable="true" />
             </column>
 
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/resources/config/liquibase/changelog/20170717115247_added_entity_ServiceAttributeValue.xml b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/resources/config/liquibase/changelog/20170717115247_added_entity_ServiceAttributeValue.xml
index 569eaa23c9781bf1356d57e4fb94f24aea811614..23eaa298845e8f162adac8786bb0ab71bdd2a6ef 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/resources/config/liquibase/changelog/20170717115247_added_entity_ServiceAttributeValue.xml
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/resources/config/liquibase/changelog/20170717115247_added_entity_ServiceAttributeValue.xml
@@ -27,7 +27,7 @@
                 <constraints nullable="true" />
             </column>
             
-            <column name="unitvalue" type="varchar(10)">
+            <column name="unitvalue" type="varchar(15)">
                 <constraints nullable="true" />
             </column>
             
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/resources/config/liquibase/changelog/20181005115200_added_entity_ServiceIncidence.xml b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/resources/config/liquibase/changelog/20181005115200_added_entity_ServiceIncidence.xml
index 20b73d24b2b08d492dc0f3563380b68370644ee3..580d7b399f68ecf9a935ffeb5b934221dd65d0d5 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/resources/config/liquibase/changelog/20181005115200_added_entity_ServiceIncidence.xml
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/resources/config/liquibase/changelog/20181005115200_added_entity_ServiceIncidence.xml
@@ -31,6 +31,10 @@
                 <constraints nullable="false" />
             </column>
             
+            <column name="realmetricvalue" type="varchar(60)">
+                <constraints nullable="true" />
+            </column>
+            
             <column name="serviceid" type="bigint">
                 <constraints nullable="false" />
             </column>
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/resources/config/liquibase/changelog/20190306104000_added_entity_LegalControl.xml b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/resources/config/liquibase/changelog/20190306104000_added_entity_LegalControl.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2d4eca9e90a1b35c6ebd39887db9219153fba072
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/resources/config/liquibase/changelog/20190306104000_added_entity_LegalControl.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="utf-8"?>
+<databaseChangeLog
+    xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+    xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd
+                        http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd">
+
+    <property name="now" value="now()" dbms="h2"/>
+
+    <property name="now" value="now()" dbms="mysql"/>
+    <property name="autoIncrement" value="true"/>
+
+    <property name="floatType" value="float4" dbms="postgresql, h2"/>
+    <property name="floatType" value="float" dbms="mysql, oracle, mssql"/>
+
+    <!--
+        Added the entity LegalControl
+    -->
+    <changeSet id="20190306104000-1" author="jhipster">
+        <createTable tableName="legal_control">
+            <column name="id" type="bigint" autoIncrement="${autoIncrement}">
+                <constraints primaryKey="true" nullable="false"/>
+            </column>
+                        
+            <column name="question" type="text">
+                <constraints nullable="false" />
+            </column>
+            
+            <column name="issimplecontrol" type="boolean">
+                <constraints nullable="false" />
+            </column>
+
+
+			<!--auditable columns-->
+            <column name="created_date" type="timestamp" defaultValueDate="${now}">
+                <constraints nullable="false"/>
+            </column>
+
+            <column name="last_modified_date" type="timestamp"/>
+
+			<column name="deleted_date" type="timestamp">
+                <constraints nullable="true" />
+            </column>
+
+            <!-- jhipster-needle-liquibase-add-column - JHipster will add columns here, do not remove-->
+        </createTable>
+        <dropDefaultValue tableName="legal_control" columnName="deleted_date" columnDataType="datetime"/>
+        
+    </changeSet>
+</databaseChangeLog>
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/resources/config/liquibase/changelog/20190306105000_added_entity_LegalAnswer.xml b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/resources/config/liquibase/changelog/20190306105000_added_entity_LegalAnswer.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ae03eede822264473a386d31196677446e00d885
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/resources/config/liquibase/changelog/20190306105000_added_entity_LegalAnswer.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="utf-8"?>
+<databaseChangeLog
+    xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+    xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd
+                        http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd">
+
+    <property name="now" value="now()" dbms="h2"/>
+
+    <property name="now" value="now()" dbms="mysql"/>
+    <property name="autoIncrement" value="true"/>
+
+    <property name="floatType" value="float4" dbms="postgresql, h2"/>
+    <property name="floatType" value="float" dbms="mysql, oracle, mssql"/>
+
+    <!--
+        Added the entity LegalAnswer
+    -->
+    <changeSet id="20190306105000-1" author="jhipster">
+        <createTable tableName="legal_answer">
+            <column name="id" type="bigint" autoIncrement="${autoIncrement}">
+                <constraints primaryKey="true" nullable="false"/>
+            </column>
+                        
+            <column name="answer" type="text">
+                <constraints nullable="false" />
+            </column>
+
+
+			<!--auditable columns-->
+            <column name="created_date" type="timestamp" defaultValueDate="${now}">
+                <constraints nullable="false"/>
+            </column>
+
+            <column name="last_modified_date" type="timestamp"/>
+
+			<column name="deleted_date" type="timestamp">
+                <constraints nullable="true" />
+            </column>
+
+            <!-- jhipster-needle-liquibase-add-column - JHipster will add columns here, do not remove-->
+        </createTable>
+        <dropDefaultValue tableName="legal_answer" columnName="deleted_date" columnDataType="datetime"/>
+        
+    </changeSet>
+</databaseChangeLog>
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/resources/config/liquibase/changelog/20190306121000_added_entity_LegalAssessment.xml b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/resources/config/liquibase/changelog/20190306121000_added_entity_LegalAssessment.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5086071997284409560d0efb023c3fd651daad7d
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/resources/config/liquibase/changelog/20190306121000_added_entity_LegalAssessment.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="utf-8"?>
+<databaseChangeLog
+    xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+    xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd
+                        http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd">
+
+    <property name="now" value="now()" dbms="h2"/>
+
+    <property name="now" value="now()" dbms="mysql"/>
+    <property name="autoIncrement" value="true"/>
+
+    <property name="floatType" value="float4" dbms="postgresql, h2"/>
+    <property name="floatType" value="float" dbms="mysql, oracle, mssql"/>
+
+    <!--
+        Added the entity LegalAssessment
+    -->
+    <changeSet id="20190306121000-1" author="jhipster">
+        <createTable tableName="legal_assessment">
+            <column name="id" type="bigint" autoIncrement="${autoIncrement}">
+                <constraints primaryKey="true" nullable="false"/>
+            </column>
+            
+            <column name="controlid" type="bigint">
+                <constraints nullable="false" />
+            </column>
+            
+            <column name="answerid" type="bigint">
+                <constraints nullable="false" />
+            </column>
+            
+            <column name="score" type="smallint">
+                <constraints nullable="false" />
+            </column>
+
+
+			<!--auditable columns-->
+            <column name="created_date" type="timestamp" defaultValueDate="${now}">
+                <constraints nullable="false"/>
+            </column>
+
+            <column name="last_modified_date" type="timestamp"/>
+
+			<column name="deleted_date" type="timestamp">
+                <constraints nullable="true" />
+            </column>
+
+            <!-- jhipster-needle-liquibase-add-column - JHipster will add columns here, do not remove-->
+        </createTable>
+        <dropDefaultValue tableName="legal_assessment" columnName="deleted_date" columnDataType="datetime"/>
+        
+    </changeSet>
+</databaseChangeLog>
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/resources/config/liquibase/changelog/20190403150500_added_entity_ServiceLegalAssessment.xml b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/resources/config/liquibase/changelog/20190403150500_added_entity_ServiceLegalAssessment.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8a034a8668026b62459b5a18e0ba56c94e2064c5
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/resources/config/liquibase/changelog/20190403150500_added_entity_ServiceLegalAssessment.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8"?>
+<databaseChangeLog
+    xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+    xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd
+                        http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd">
+
+    <property name="now" value="now()" dbms="h2"/>
+
+    <property name="now" value="now()" dbms="mysql"/>
+    <property name="autoIncrement" value="true"/>
+
+    <property name="floatType" value="float4" dbms="postgresql, h2"/>
+    <property name="floatType" value="float" dbms="mysql, oracle, mssql"/>
+
+    <!--
+        Added the entity ServiceLegalAssessment
+    -->
+    <changeSet id="20190403150500-1" author="jhipster">
+        <createTable tableName="service_legal_assessment">
+            <column name="id" type="bigint" autoIncrement="${autoIncrement}">
+                <constraints primaryKey="true" nullable="false"/>
+            </column>
+            
+            <column name="serviceid" type="bigint">
+                <constraints nullable="false" />
+            </column>
+            
+            <column name="controlid" type="bigint">
+                <constraints nullable="false" />
+            </column>
+            
+            <column name="score" type="smallint">
+                <constraints nullable="false" />
+            </column>
+            
+            <column name="justification" type="varchar(150)">
+                <constraints nullable="true" />
+            </column>
+
+
+			<!--auditable columns-->
+            <column name="created_date" type="timestamp" defaultValueDate="${now}">
+                <constraints nullable="false"/>
+            </column>
+
+            <column name="last_modified_date" type="timestamp"/>
+
+			<column name="deleted_date" type="timestamp">
+                <constraints nullable="true" />
+            </column>
+
+            <!-- jhipster-needle-liquibase-add-column - JHipster will add columns here, do not remove-->
+        </createTable>
+        <dropDefaultValue tableName="service_legal_assessment" columnName="deleted_date" columnDataType="datetime"/>
+        
+    </changeSet>
+</databaseChangeLog>
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/resources/config/liquibase/changelog/20190506073900_added_entity_ServiceLegalManagement.xml b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/resources/config/liquibase/changelog/20190506073900_added_entity_ServiceLegalManagement.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3f8b96aa806911b1dedfd0b89fa109bc98a6f933
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/resources/config/liquibase/changelog/20190506073900_added_entity_ServiceLegalManagement.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8"?>
+<databaseChangeLog
+    xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+    xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd
+                        http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd">
+
+    <property name="now" value="now()" dbms="h2"/>
+
+    <property name="now" value="now()" dbms="mysql"/>
+    <property name="autoIncrement" value="true"/>
+
+    <property name="floatType" value="float4" dbms="postgresql, h2"/>
+    <property name="floatType" value="float" dbms="mysql, oracle, mssql"/>
+
+    <!--
+        Added the entity ServiceLegalManagement
+    -->
+    <changeSet id="20190506073900-1" author="jhipster">
+        <createTable tableName="service_legal_management">
+            <column name="id" type="bigint" autoIncrement="${autoIncrement}">
+                <constraints primaryKey="true" nullable="false"/>
+            </column>
+            
+            <column name="nocontractalert" type="boolean">
+                <constraints nullable="false" />
+            </column>
+            
+            <column name="modifiedcontractalert" type="boolean">
+                <constraints nullable="false" />
+            </column>
+            
+            <column name="formalert" type="boolean">
+                <constraints nullable="false" />
+            </column>
+            
+            <column name="serviceid" type="bigint">
+                <constraints nullable="false" />
+            </column>
+
+
+			<!--auditable columns-->
+            <column name="created_date" type="timestamp" defaultValueDate="${now}">
+                <constraints nullable="false"/>
+            </column>
+
+            <column name="last_modified_date" type="timestamp"/>
+
+			<column name="deleted_date" type="timestamp">
+                <constraints nullable="true" />
+            </column>
+
+            <!-- jhipster-needle-liquibase-add-column - JHipster will add columns here, do not remove-->
+        </createTable>
+        <dropDefaultValue tableName="service_legal_management" columnName="deleted_date" columnDataType="datetime"/>
+        
+    </changeSet>
+</databaseChangeLog>
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/resources/config/liquibase/master.xml b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/resources/config/liquibase/master.xml
index 72ae5b1d77c50e6867b55c2ead18ca3514c00297..518fcd20b1aa7a0cd7bc2c336da8d28f0463018d 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/resources/config/liquibase/master.xml
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/resources/config/liquibase/master.xml
@@ -7,10 +7,15 @@
     <include file="classpath:config/liquibase/changelog/00000000000000_initial_schema.xml" relativeToChangelogFile="false"/>
     <include file="classpath:config/liquibase/changelog/20170523072708_added_entity_Service.xml" relativeToChangelogFile="false"/>
     <include file="classpath:config/liquibase/changelog/20170717105245_added_entity_ServiceClass.xml" relativeToChangelogFile="false"/>
-    <include file="classpath:config/liquibase/changelog/20170717114231_added_entity_ServiceAttributeType.xml" relativeToChangelogFile="false"/>
+    <include file="classpath:config/liquibase/changelog/20170717114232_added_entity_ServiceAttributeType.xml" relativeToChangelogFile="false"/>
     <include file="classpath:config/liquibase/changelog/20170717115247_added_entity_ServiceAttributeValue.xml" relativeToChangelogFile="false"/>
     <include file="classpath:config/liquibase/changelog/20170718105315_added_entity_ServiceClassAttribute.xml" relativeToChangelogFile="false"/>
     <include file="classpath:config/liquibase/changelog/20180515151200_added_entity_Definition.xml" relativeToChangelogFile="false"/>
     <include file="classpath:config/liquibase/changelog/20181005115200_added_entity_ServiceIncidence.xml" relativeToChangelogFile="false"/>
+    <include file="classpath:config/liquibase/changelog/20190306104000_added_entity_LegalControl.xml" relativeToChangelogFile="false"/>
+    <include file="classpath:config/liquibase/changelog/20190306105000_added_entity_LegalAnswer.xml" relativeToChangelogFile="false"/>
+    <include file="classpath:config/liquibase/changelog/20190306121000_added_entity_LegalAssessment.xml" relativeToChangelogFile="false"/>
+    <include file="classpath:config/liquibase/changelog/20190403150500_added_entity_ServiceLegalAssessment.xml" relativeToChangelogFile="false"/>
+    <include file="classpath:config/liquibase/changelog/20190506073900_added_entity_ServiceLegalManagement.xml" relativeToChangelogFile="false"/>
     <!-- jhipster-needle-liquibase-add-changelog - JHipster will add liquibase changelogs here -->
 </databaseChangeLog>
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/resources/swagger/swagger.json b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/resources/swagger/swagger.json
index 35eddfcf58473523a96b756323c104d5cd2faf0b..26437626264918ee8f1813063e775e3506fe1c66 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/resources/swagger/swagger.json
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/main/resources/swagger/swagger.json
@@ -1 +1 @@
-{"swagger":"2.0","info":{"description":"acsmiservices API documentation","version":"0.0.1","title":"acsmiservices API","contact":{},"license":{}},"host":"localhost:12080","basePath":"/acsmiservices","tags":[{"name":"service-class-resource","description":"Service Class Resource"},{"name":"profile-info-resource","description":"Profile Info Resource"},{"name":"definition-resource","description":"Definition Resource"},{"name":"service-class-attribute-resource","description":"Service Class Attribute Resource"},{"name":"service-attribute-type-resource","description":"Service Attribute Type Resource"},{"name":"service-resource","description":"Service Resource"},{"name":"service-attribute-value-resource","description":"Service Attribute Value Resource"},{"name":"service-incidence-resource","description":"Service Incidence Resource"}],"paths":{"/api/definitions":{"get":{"tags":["definition-resource"],"summary":"getAllDefinitions","operationId":"getAllDefinitionsUsingGET","consumes":["application/json"],"produces":["*/*"],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/Definition"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/definitions/{id}":{"get":{"tags":["definition-resource"],"summary":"getDefinition","operationId":"getDefinitionUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"id","in":"path","description":"id","required":true,"type":"integer","format":"int64"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/Definition"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/profile-info":{"get":{"tags":["profile-info-resource"],"summary":"getActiveProfiles","operationId":"getActiveProfilesUsingGET","consumes":["application/json"],"produces":["*/*"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/ProfileInfoVM"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/service-attribute-types":{"get":{"tags":["service-attribute-type-resource"],"summary":"findServiceAttributeTypes","operationId":"findServiceAttributeTypesUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"classid","in":"query","description":"classid","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/ServiceAttributeType"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/service-attribute-types/{id}":{"get":{"tags":["service-attribute-type-resource"],"summary":"getServiceAttributeType","operationId":"getServiceAttributeTypeUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"id","in":"path","description":"id","required":true,"type":"integer","format":"int64"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/ServiceAttributeType"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/service-attribute-values":{"post":{"tags":["service-attribute-value-resource"],"summary":"createServiceAttributeValue","operationId":"createServiceAttributeValueUsingPOST","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"serviceAttributeValue","description":"serviceAttributeValue","required":true,"schema":{"$ref":"#/definitions/ServiceAttributeValue"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/ServiceAttributeValue"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}},"put":{"tags":["service-attribute-value-resource"],"summary":"updateServiceAttributeValue","operationId":"updateServiceAttributeValueUsingPUT","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"serviceAttributeValue","description":"serviceAttributeValue","required":true,"schema":{"$ref":"#/definitions/ServiceAttributeValue"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/ServiceAttributeValue"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/service-attribute-values/{id}":{"get":{"tags":["service-attribute-value-resource"],"summary":"getServiceAttributeValue","operationId":"getServiceAttributeValueUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"id","in":"path","description":"id","required":true,"type":"integer","format":"int64"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/ServiceAttributeValue"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}},"delete":{"tags":["service-attribute-value-resource"],"summary":"deleteServiceAttributeValue","operationId":"deleteServiceAttributeValueUsingDELETE","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"id","in":"path","description":"id","required":true,"type":"integer","format":"int64"},{"name":"forcedelete","in":"query","description":"forcedelete","required":true,"type":"string"}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized"},"204":{"description":"No Content"},"403":{"description":"Forbidden"}}}},"/api/service-class-attributes":{"get":{"tags":["service-class-attribute-resource"],"summary":"getAllServiceClassAttributes","operationId":"getAllServiceClassAttributesUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"classid","in":"query","description":"classid","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/ServiceClassAttribute"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/service-class-attributes/{id}":{"get":{"tags":["service-class-attribute-resource"],"summary":"getServiceClassAttribute","operationId":"getServiceClassAttributeUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"id","in":"path","description":"id","required":true,"type":"integer","format":"int64"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/ServiceClassAttribute"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/service-classes":{"get":{"tags":["service-class-resource"],"summary":"getAllServiceClasses","operationId":"getAllServiceClassesUsingGET","consumes":["application/json"],"produces":["*/*"],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/ServiceClass"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/service-classes/full":{"get":{"tags":["service-class-resource"],"summary":"getAllServiceClassesFullInfo","operationId":"getAllServiceClassesFullInfoUsingGET","consumes":["application/json"],"produces":["*/*"],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/ServiceClass"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/service-classes/{id}":{"get":{"tags":["service-class-resource"],"summary":"getServiceClass","operationId":"getServiceClassUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"id","in":"path","description":"id","required":true,"type":"integer","format":"int64"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/ServiceClass"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/service-incidences":{"post":{"tags":["service-incidence-resource"],"summary":"createServiceIncidence","operationId":"createServiceIncidenceUsingPOST","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"serviceIncidence","description":"serviceIncidence","required":true,"schema":{"$ref":"#/definitions/ServiceIncidence"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/ServiceIncidence"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/service-incidences/{id}":{"get":{"tags":["service-incidence-resource"],"summary":"getAllServiceIncidences","operationId":"getAllServiceIncidencesUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"id","in":"path","description":"id","required":true,"type":"integer","format":"int64"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/ServiceIncidence"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/services":{"get":{"tags":["service-resource"],"summary":"getAllServices","operationId":"getAllServicesUsingGET","consumes":["application/json"],"produces":["*/*"],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/Service"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}},"post":{"tags":["service-resource"],"summary":"createService","operationId":"createServiceUsingPOST","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"service","description":"service","required":true,"schema":{"$ref":"#/definitions/Service"}},{"name":"attributes","in":"query","description":"attributes","required":true,"type":"array","items":{"type":"string"},"collectionFormat":"multi"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/Service"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}},"put":{"tags":["service-resource"],"summary":"updateService","operationId":"updateServiceUsingPUT","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"service","description":"service","required":true,"schema":{"$ref":"#/definitions/Service"}},{"name":"attributes","in":"query","description":"attributes","required":true,"type":"array","items":{"type":"string"},"collectionFormat":"multi"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/Service"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/services/cspservices":{"get":{"tags":["service-resource"],"summary":"findServicesByCSP","operationId":"findServicesByCSPUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"cspname","in":"query","description":"cspname","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/Service"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/services/devops":{"get":{"tags":["service-resource"],"summary":"getDevOpsInfo","operationId":"getDevOpsInfoUsingGET","consumes":["application/json"],"produces":["*/*"],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/ServiceDevOpsInfoVO"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/services/find":{"get":{"tags":["service-resource"],"summary":"findServices","operationId":"findServicesUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"filter","in":"query","description":"filter","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/Service"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/services/nfr":{"get":{"tags":["service-resource"],"summary":"getServiceNfrInfo","operationId":"getServiceNfrInfoUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"serviceids","in":"query","description":"serviceids","required":true,"type":"array","items":{"type":"integer","format":"int64"},"collectionFormat":"multi"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/ServiceNFRInfoVO"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/services/optimus":{"get":{"tags":["service-resource"],"summary":"getOptimusInfo","operationId":"getOptimusInfoUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"serviceids","in":"query","description":"serviceids","required":true,"type":"array","items":{"type":"integer","format":"int64"},"collectionFormat":"multi"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/Service"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/services/{id}":{"get":{"tags":["service-resource"],"summary":"getService","operationId":"getServiceUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"id","in":"path","description":"id","required":true,"type":"integer","format":"int64"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/Service"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}},"delete":{"tags":["service-resource"],"summary":"deleteService","operationId":"deleteServiceUsingDELETE","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"id","in":"path","description":"id","required":true,"type":"integer","format":"int64"},{"name":"forcedelete","in":"query","description":"forcedelete","required":true,"type":"string"}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized"},"204":{"description":"No Content"},"403":{"description":"Forbidden"}}}}},"definitions":{"ServiceClass":{"type":"object","required":["serviceclassname"],"properties":{"commonattributes":{"type":"array","items":{"$ref":"#/definitions/AttributeVO"}},"createdDate":{"type":"string","format":"date-time"},"deleteddate":{"type":"string","format":"date-time"},"functionalattributes":{"type":"array","items":{"$ref":"#/definitions/AttributeVO"}},"id":{"type":"integer","format":"int64"},"lastModifiedDate":{"type":"string","format":"date-time"},"nonfunctionalattributes":{"type":"array","items":{"$ref":"#/definitions/AttributeVO"}},"serviceclassname":{"type":"string","minLength":0,"maxLength":20}}},"ProfileInfoVM":{"type":"object","properties":{"activeProfiles":{"type":"array","items":{"type":"string"}},"ribbonEnv":{"type":"string"}}},"ServiceAttributeValue":{"type":"object","required":["serviceattributetypeid","serviceid"],"properties":{"checklistvalue":{"type":"string","minLength":0,"maxLength":40},"createdDate":{"type":"string","format":"date-time"},"deleteddate":{"type":"string","format":"date-time"},"id":{"type":"integer","format":"int64"},"lastModifiedDate":{"type":"string","format":"date-time"},"serviceattributetypeid":{"type":"integer","format":"int64"},"serviceattributevalue":{"type":"string","minLength":0,"maxLength":50},"serviceid":{"type":"integer","format":"int64"},"unitvalue":{"type":"string","minLength":0,"maxLength":10}}},"ServiceAttributeType":{"type":"object","required":["ischecklist","iscommon","isenumeration","isfunctionalrequirement","name"],"properties":{"checklistevalrule":{"type":"string","minLength":0,"maxLength":70},"childid":{"type":"integer","format":"int64"},"createdDate":{"type":"string","format":"date-time"},"deleteddate":{"type":"string","format":"date-time"},"id":{"type":"integer","format":"int64"},"ischecklist":{"type":"boolean"},"iscommon":{"type":"boolean"},"isenumeration":{"type":"boolean"},"isfunctionalrequirement":{"type":"boolean"},"lastModifiedDate":{"type":"string","format":"date-time"},"name":{"type":"string","minLength":0,"maxLength":50},"nfrname":{"type":"string","minLength":0,"maxLength":20},"parentid":{"type":"integer","format":"int64"},"unitfactor":{"type":"string","minLength":0,"maxLength":30},"unitrule":{"type":"string","minLength":0,"maxLength":2},"units":{"type":"string","minLength":0,"maxLength":20}}},"ServiceClassAttribute":{"type":"object","required":["ismandatory","serviceattributetypeid","serviceclassid","weight"],"properties":{"childid":{"type":"integer","format":"int64"},"createdDate":{"type":"string","format":"date-time"},"deleteddate":{"type":"string","format":"date-time"},"id":{"type":"integer","format":"int64"},"ischecklist":{"type":"boolean"},"isenumeration":{"type":"boolean"},"isfunctionalrequirement":{"type":"boolean"},"ismandatory":{"type":"boolean"},"lastModifiedDate":{"type":"string","format":"date-time"},"parentid":{"type":"integer","format":"int64"},"serviceattributetypeid":{"type":"integer","format":"int64"},"serviceattributetypename":{"type":"string"},"serviceclassid":{"type":"integer","format":"int64"},"weight":{"type":"integer","format":"int32"}}},"AttributeVO":{"type":"object","properties":{"checklistevalrule":{"type":"string"},"checklistvalue":{"type":"string"},"childid":{"type":"integer","format":"int64"},"classattributeid":{"type":"integer","format":"int64"},"human":{"type":"string"},"ischecklist":{"type":"boolean"},"iscommon":{"type":"boolean"},"isenumeration":{"type":"boolean"},"isfunctionalrequirement":{"type":"boolean"},"ismandatory":{"type":"boolean"},"name":{"type":"string"},"nfrname":{"type":"string"},"parentid":{"type":"integer","format":"int64"},"typeid":{"type":"integer","format":"int64"},"unitfactor":{"type":"string"},"unitrule":{"type":"string"},"units":{"type":"string"},"unitvalue":{"type":"string"},"value":{"type":"string"},"valueid":{"type":"integer","format":"int64"},"weight":{"type":"integer","format":"int32"}}},"Definition":{"type":"object","required":["code","ischeckoption","ismainattribute","value"],"properties":{"code":{"type":"string","minLength":0,"maxLength":4},"createdDate":{"type":"string","format":"date-time"},"deleteddate":{"type":"string","format":"date-time"},"id":{"type":"integer","format":"int64"},"ischeckoption":{"type":"boolean"},"ismainattribute":{"type":"boolean"},"lastModifiedDate":{"type":"string","format":"date-time"},"typeid":{"type":"integer","format":"int64"},"value":{"type":"string","minLength":0,"maxLength":60}}},"ServiceIncidence":{"type":"object","required":["detail","serviceid","timestamp"],"properties":{"createdDate":{"type":"string","format":"date-time"},"deleteddate":{"type":"string","format":"date-time"},"detail":{"type":"string","minLength":0,"maxLength":60},"id":{"type":"integer","format":"int64"},"lastModifiedDate":{"type":"string","format":"date-time"},"serviceid":{"type":"integer","format":"int64"},"timestamp":{"type":"string","format":"date-time"}}},"Service":{"type":"object","required":["serviceclassid","servicename"],"properties":{"attributes":{"type":"array","items":{"$ref":"#/definitions/AttributeVO"}},"createdDate":{"type":"string","format":"date-time"},"deleteddate":{"type":"string","format":"date-time"},"firstcontract":{"type":"array","items":{"type":"string","format":"byte"}},"id":{"type":"integer","format":"int64"},"incidences":{"type":"array","items":{"$ref":"#/definitions/ServiceIncidence"}},"lastModifiedDate":{"type":"string","format":"date-time"},"match":{"type":"number","format":"double"},"matchingattributelist":{"type":"array","items":{"type":"string"}},"secondcontract":{"type":"array","items":{"type":"string","format":"byte"}},"serviceclassid":{"type":"integer","format":"int64"},"serviceclassname":{"type":"string"},"servicename":{"type":"string","minLength":0,"maxLength":70},"thirdcontract":{"type":"array","items":{"type":"string","format":"byte"}}}},"ServiceNFRInfoVO":{"type":"object","properties":{"nfrmetric":{"type":"string"},"nfrname":{"type":"string"},"nfrvalue":{"type":"string"},"serviceclassname":{"type":"string"},"serviceid":{"type":"integer","format":"int64"},"servicename":{"type":"string"}}},"ServiceDevOpsInfoVO":{"type":"object","properties":{"numservices":{"type":"integer","format":"int32"},"providername":{"type":"string"},"serviceclassname":{"type":"string"}}}}}
\ No newline at end of file
+{"swagger":"2.0","info":{"description":"acsmiservices API documentation","version":"0.0.1","title":"acsmiservices API","contact":{},"license":{}},"host":"localhost:12080","basePath":"/acsmiservices","tags":[{"name":"service-class-resource","description":"Service Class Resource"},{"name":"profile-info-resource","description":"Profile Info Resource"},{"name":"definition-resource","description":"Definition Resource"},{"name":"service-class-attribute-resource","description":"Service Class Attribute Resource"},{"name":"service-attribute-type-resource","description":"Service Attribute Type Resource"},{"name":"service-resource","description":"Service Resource"},{"name":"service-attribute-value-resource","description":"Service Attribute Value Resource"},{"name":"service-incidence-resource","description":"Service Incidence Resource"}],"paths":{"/api/definitions":{"get":{"tags":["definition-resource"],"summary":"getAllDefinitions","operationId":"getAllDefinitionsUsingGET","consumes":["application/json"],"produces":["*/*"],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/Definition"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/definitions-by-attribute":{"get":{"tags":["definition-resource"],"summary":"getDefinitionsByAttribute","operationId":"getDefinitionsByAttributeUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"typeid","in":"query","description":"typeid","required":true,"type":"integer","format":"int64"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/Definition"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/definitions/{id}":{"get":{"tags":["definition-resource"],"summary":"getDefinition","operationId":"getDefinitionUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"id","in":"path","description":"id","required":true,"type":"integer","format":"int64"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/Definition"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/profile-info":{"get":{"tags":["profile-info-resource"],"summary":"getActiveProfiles","operationId":"getActiveProfilesUsingGET","consumes":["application/json"],"produces":["*/*"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/ProfileInfoVM"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/service-attribute-types":{"get":{"tags":["service-attribute-type-resource"],"summary":"findServiceAttributeTypes","operationId":"findServiceAttributeTypesUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"classid","in":"query","description":"classid","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/ServiceAttributeType"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/service-attribute-types/{id}":{"get":{"tags":["service-attribute-type-resource"],"summary":"getServiceAttributeType","operationId":"getServiceAttributeTypeUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"id","in":"path","description":"id","required":true,"type":"integer","format":"int64"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/ServiceAttributeType"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/service-attribute-values":{"post":{"tags":["service-attribute-value-resource"],"summary":"createServiceAttributeValue","operationId":"createServiceAttributeValueUsingPOST","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"serviceAttributeValue","description":"serviceAttributeValue","required":true,"schema":{"$ref":"#/definitions/ServiceAttributeValue"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/ServiceAttributeValue"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}},"put":{"tags":["service-attribute-value-resource"],"summary":"updateServiceAttributeValue","operationId":"updateServiceAttributeValueUsingPUT","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"serviceAttributeValue","description":"serviceAttributeValue","required":true,"schema":{"$ref":"#/definitions/ServiceAttributeValue"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/ServiceAttributeValue"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/service-attribute-values/{id}":{"get":{"tags":["service-attribute-value-resource"],"summary":"getServiceAttributeValue","operationId":"getServiceAttributeValueUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"id","in":"path","description":"id","required":true,"type":"integer","format":"int64"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/ServiceAttributeValue"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}},"delete":{"tags":["service-attribute-value-resource"],"summary":"deleteServiceAttributeValue","operationId":"deleteServiceAttributeValueUsingDELETE","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"id","in":"path","description":"id","required":true,"type":"integer","format":"int64"},{"name":"forcedelete","in":"query","description":"forcedelete","required":true,"type":"string"}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized"},"204":{"description":"No Content"},"403":{"description":"Forbidden"}}}},"/api/service-class-attributes":{"get":{"tags":["service-class-attribute-resource"],"summary":"getAllServiceClassAttributes","operationId":"getAllServiceClassAttributesUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"classid","in":"query","description":"classid","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/ServiceClassAttribute"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/service-class-attributes/{id}":{"get":{"tags":["service-class-attribute-resource"],"summary":"getServiceClassAttribute","operationId":"getServiceClassAttributeUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"id","in":"path","description":"id","required":true,"type":"integer","format":"int64"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/ServiceClassAttribute"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/service-classes":{"get":{"tags":["service-class-resource"],"summary":"getAllServiceClasses","operationId":"getAllServiceClassesUsingGET","consumes":["application/json"],"produces":["*/*"],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/ServiceClass"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/service-classes/full":{"get":{"tags":["service-class-resource"],"summary":"getAllServiceClassesFullInfo","operationId":"getAllServiceClassesFullInfoUsingGET","consumes":["application/json"],"produces":["*/*"],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/ServiceClass"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/service-classes/{id}":{"get":{"tags":["service-class-resource"],"summary":"getServiceClass","operationId":"getServiceClassUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"id","in":"path","description":"id","required":true,"type":"integer","format":"int64"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/ServiceClass"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/service-incidences":{"post":{"tags":["service-incidence-resource"],"summary":"createServiceIncidence","operationId":"createServiceIncidenceUsingPOST","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"serviceIncidence","description":"serviceIncidence","required":true,"schema":{"$ref":"#/definitions/ServiceIncidence"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/ServiceIncidence"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/service-incidences/{id}":{"get":{"tags":["service-incidence-resource"],"summary":"getAllServiceIncidences","operationId":"getAllServiceIncidencesUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"id","in":"path","description":"id","required":true,"type":"integer","format":"int64"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/ServiceIncidence"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/services":{"get":{"tags":["service-resource"],"summary":"getAllServices","operationId":"getAllServicesUsingGET","consumes":["application/json"],"produces":["*/*"],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/Service"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}},"post":{"tags":["service-resource"],"summary":"createService","operationId":"createServiceUsingPOST","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"service","description":"service","required":true,"schema":{"$ref":"#/definitions/Service"}},{"name":"attributes","in":"query","description":"attributes","required":true,"type":"array","items":{"type":"string"},"collectionFormat":"multi"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/Service"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}},"put":{"tags":["service-resource"],"summary":"updateService","operationId":"updateServiceUsingPUT","consumes":["application/json"],"produces":["*/*"],"parameters":[{"in":"body","name":"service","description":"service","required":true,"schema":{"$ref":"#/definitions/Service"}},{"name":"attributes","in":"query","description":"attributes","required":true,"type":"array","items":{"type":"string"},"collectionFormat":"multi"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/Service"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/services/cspservices":{"get":{"tags":["service-resource"],"summary":"findServicesByCSP","operationId":"findServicesByCSPUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"cspname","in":"query","description":"cspname","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/Service"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/services/devops":{"get":{"tags":["service-resource"],"summary":"getDevOpsInfo","operationId":"getDevOpsInfoUsingGET","consumes":["application/json"],"produces":["*/*"],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/ServiceDevOpsInfoVO"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/services/find":{"get":{"tags":["service-resource"],"summary":"findServices","operationId":"findServicesUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"filter","in":"query","description":"filter","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/Service"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/services/nfr":{"get":{"tags":["service-resource"],"summary":"getServiceNfrInfo","operationId":"getServiceNfrInfoUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"serviceids","in":"query","description":"serviceids","required":true,"type":"array","items":{"type":"integer","format":"int64"},"collectionFormat":"multi"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/ServiceNFRInfoVO"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/services/optimus":{"get":{"tags":["service-resource"],"summary":"getOptimusInfo","operationId":"getOptimusInfoUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"serviceids","in":"query","description":"serviceids","required":true,"type":"array","items":{"type":"integer","format":"int64"},"collectionFormat":"multi"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/Service"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/services/{id}":{"get":{"tags":["service-resource"],"summary":"getService","operationId":"getServiceUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"id","in":"path","description":"id","required":true,"type":"integer","format":"int64"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/Service"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}},"delete":{"tags":["service-resource"],"summary":"deleteService","operationId":"deleteServiceUsingDELETE","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"id","in":"path","description":"id","required":true,"type":"integer","format":"int64"},{"name":"forcedelete","in":"query","description":"forcedelete","required":true,"type":"string"}],"responses":{"200":{"description":"OK"},"401":{"description":"Unauthorized"},"204":{"description":"No Content"},"403":{"description":"Forbidden"}}}}},"definitions":{"ServiceClass":{"type":"object","required":["serviceclassname"],"properties":{"commonattributes":{"type":"array","items":{"$ref":"#/definitions/AttributeVO"}},"createdDate":{"type":"string","format":"date-time"},"deleteddate":{"type":"string","format":"date-time"},"functionalattributes":{"type":"array","items":{"$ref":"#/definitions/AttributeVO"}},"id":{"type":"integer","format":"int64"},"lastModifiedDate":{"type":"string","format":"date-time"},"nonfunctionalattributes":{"type":"array","items":{"$ref":"#/definitions/AttributeVO"}},"serviceclassname":{"type":"string","minLength":0,"maxLength":20}}},"ProfileInfoVM":{"type":"object","properties":{"activeProfiles":{"type":"array","items":{"type":"string"}},"ribbonEnv":{"type":"string"}}},"ServiceAttributeValue":{"type":"object","required":["serviceattributetypeid","serviceid"],"properties":{"checklistvalue":{"type":"string","minLength":0,"maxLength":40},"createdDate":{"type":"string","format":"date-time"},"deleteddate":{"type":"string","format":"date-time"},"id":{"type":"integer","format":"int64"},"lastModifiedDate":{"type":"string","format":"date-time"},"serviceattributetypeid":{"type":"integer","format":"int64"},"serviceattributevalue":{"type":"string","minLength":0,"maxLength":50},"serviceid":{"type":"integer","format":"int64"},"unitvalue":{"type":"string","minLength":0,"maxLength":10}}},"ServiceAttributeType":{"type":"object","required":["ischecklist","iscommon","isenumeration","isfunctionalrequirement","name"],"properties":{"childid":{"type":"integer","format":"int64"},"createdDate":{"type":"string","format":"date-time"},"deleteddate":{"type":"string","format":"date-time"},"evalrule":{"type":"string","minLength":0,"maxLength":70},"id":{"type":"integer","format":"int64"},"ischecklist":{"type":"boolean"},"iscommon":{"type":"boolean"},"isenumeration":{"type":"boolean"},"isfunctionalrequirement":{"type":"boolean"},"lastModifiedDate":{"type":"string","format":"date-time"},"name":{"type":"string","minLength":0,"maxLength":50},"nfrname":{"type":"string","minLength":0,"maxLength":20},"parentid":{"type":"integer","format":"int64"},"unitfactor":{"type":"string","minLength":0,"maxLength":30},"unitrule":{"type":"string","minLength":0,"maxLength":4},"units":{"type":"string","minLength":0,"maxLength":20}}},"ServiceClassAttribute":{"type":"object","required":["ismandatory","serviceattributetypeid","serviceclassid","weight"],"properties":{"childid":{"type":"integer","format":"int64"},"createdDate":{"type":"string","format":"date-time"},"deleteddate":{"type":"string","format":"date-time"},"id":{"type":"integer","format":"int64"},"ischecklist":{"type":"boolean"},"isenumeration":{"type":"boolean"},"isfunctionalrequirement":{"type":"boolean"},"ismandatory":{"type":"boolean"},"lastModifiedDate":{"type":"string","format":"date-time"},"parentid":{"type":"integer","format":"int64"},"serviceattributetypeid":{"type":"integer","format":"int64"},"serviceattributetypename":{"type":"string"},"serviceclassid":{"type":"integer","format":"int64"},"weight":{"type":"integer","format":"int32"}}},"AttributeVO":{"type":"object","properties":{"checklistvalue":{"type":"string"},"childid":{"type":"integer","format":"int64"},"classattributeid":{"type":"integer","format":"int64"},"evalrule":{"type":"string"},"human":{"type":"string"},"ischecklist":{"type":"boolean"},"iscommon":{"type":"boolean"},"isenumeration":{"type":"boolean"},"isfunctionalrequirement":{"type":"boolean"},"ismandatory":{"type":"boolean"},"name":{"type":"string"},"nfrname":{"type":"string"},"parentid":{"type":"integer","format":"int64"},"typeid":{"type":"integer","format":"int64"},"unitfactor":{"type":"string"},"unitrule":{"type":"string"},"units":{"type":"string"},"unitvalue":{"type":"string"},"value":{"type":"string"},"valueid":{"type":"integer","format":"int64"},"weight":{"type":"integer","format":"int32"}}},"Definition":{"type":"object","required":["code","ischeckoption","ismainattribute","value"],"properties":{"code":{"type":"string","minLength":0,"maxLength":4},"createdDate":{"type":"string","format":"date-time"},"deleteddate":{"type":"string","format":"date-time"},"id":{"type":"integer","format":"int64"},"ischeckoption":{"type":"boolean"},"ismainattribute":{"type":"boolean"},"lastModifiedDate":{"type":"string","format":"date-time"},"typeid":{"type":"integer","format":"int64"},"value":{"type":"string","minLength":0,"maxLength":60}}},"ServiceIncidence":{"type":"object","required":["detail","serviceid","timestamp"],"properties":{"createdDate":{"type":"string","format":"date-time"},"deleteddate":{"type":"string","format":"date-time"},"detail":{"type":"string","minLength":0,"maxLength":60},"id":{"type":"integer","format":"int64"},"lastModifiedDate":{"type":"string","format":"date-time"},"realmetricvalue":{"type":"string","minLength":0,"maxLength":50},"serviceid":{"type":"integer","format":"int64"},"timestamp":{"type":"integer","format":"int64"}}},"Service":{"type":"object","required":["serviceclassid","servicename"],"properties":{"attributes":{"type":"array","items":{"$ref":"#/definitions/AttributeVO"}},"createdDate":{"type":"string","format":"date-time"},"deleteddate":{"type":"string","format":"date-time"},"firstcontract":{"type":"array","items":{"type":"string","format":"byte"}},"id":{"type":"integer","format":"int64"},"incidences":{"type":"array","items":{"$ref":"#/definitions/ServiceIncidence"}},"lastModifiedDate":{"type":"string","format":"date-time"},"match":{"type":"number","format":"double"},"matchingattributelist":{"type":"array","items":{"type":"string"}},"secondcontract":{"type":"array","items":{"type":"string","format":"byte"}},"serviceclassid":{"type":"integer","format":"int64"},"serviceclassname":{"type":"string"},"servicename":{"type":"string","minLength":0,"maxLength":70},"thirdcontract":{"type":"array","items":{"type":"string","format":"byte"}}}},"ServiceNFRInfoVO":{"type":"object","properties":{"nfrmetric":{"type":"string"},"nfrname":{"type":"string"},"nfrvalue":{"type":"string"},"serviceclassname":{"type":"string"},"serviceid":{"type":"integer","format":"int64"},"servicename":{"type":"string"}}},"ServiceDevOpsInfoVO":{"type":"object","properties":{"numservices":{"type":"integer","format":"int32"},"providername":{"type":"string"},"serviceclassname":{"type":"string"}}}}}
\ No newline at end of file
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/test/java/eu/decideh2020/acsmi/backend/test/server/config/WebConfigurerTest.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/test/java/eu/decideh2020/acsmi/backend/test/server/config/WebConfigurerTest.java
index ec19f789c27549f3b06af4dc05c9ef346458cd86..657b693651ee466f75d2cd703324fcf9365d97f4 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/test/java/eu/decideh2020/acsmi/backend/test/server/config/WebConfigurerTest.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/test/java/eu/decideh2020/acsmi/backend/test/server/config/WebConfigurerTest.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/test/java/eu/decideh2020/acsmi/backend/test/server/config/WebConfigurerTestController.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/test/java/eu/decideh2020/acsmi/backend/test/server/config/WebConfigurerTestController.java
index 0659bd43e589a3ac697a066b5961ece9274270a6..ab4511bcff8a06f83966d8827e9d16a79b44efbe 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/test/java/eu/decideh2020/acsmi/backend/test/server/config/WebConfigurerTestController.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/test/java/eu/decideh2020/acsmi/backend/test/server/config/WebConfigurerTestController.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/test/java/eu/decideh2020/acsmi/backend/test/server/web/rest/LogsResourceIntTest.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/test/java/eu/decideh2020/acsmi/backend/test/server/web/rest/LogsResourceIntTest.java
index 9b97aa33b197f08606310670d70e06e0ed858bea..74cf9867f3a29db967b188dc74cd479a100bf643 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/test/java/eu/decideh2020/acsmi/backend/test/server/web/rest/LogsResourceIntTest.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/test/java/eu/decideh2020/acsmi/backend/test/server/web/rest/LogsResourceIntTest.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/test/java/eu/decideh2020/acsmi/backend/test/server/web/rest/ProfileInfoResourceIntTest.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/test/java/eu/decideh2020/acsmi/backend/test/server/web/rest/ProfileInfoResourceIntTest.java
index 5755ee014e506d85c40ef97874cb5f85f5a68a9f..e5f85a54b0b977acaafb71f78122fb8e91fbbd65 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/test/java/eu/decideh2020/acsmi/backend/test/server/web/rest/ProfileInfoResourceIntTest.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/test/java/eu/decideh2020/acsmi/backend/test/server/web/rest/ProfileInfoResourceIntTest.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/test/java/eu/decideh2020/acsmi/backend/test/server/web/rest/ServiceResourceIntTest.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/test/java/eu/decideh2020/acsmi/backend/test/server/web/rest/ServiceResourceIntTest.java
index dbbe8148aa5b232f0e946122a9bc6349d390f37b..e2f437845b67b470dba8a944af506330a8dfbfd2 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/test/java/eu/decideh2020/acsmi/backend/test/server/web/rest/ServiceResourceIntTest.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/test/java/eu/decideh2020/acsmi/backend/test/server/web/rest/ServiceResourceIntTest.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/test/java/eu/decideh2020/acsmi/backend/test/server/web/rest/TestUtil.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/test/java/eu/decideh2020/acsmi/backend/test/server/web/rest/TestUtil.java
index d257934e08f3971e525fd41cc2942d2e04118e13..f252256e051349361f0944f8c9e33062b3087115 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/test/java/eu/decideh2020/acsmi/backend/test/server/web/rest/TestUtil.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/test/java/eu/decideh2020/acsmi/backend/test/server/web/rest/TestUtil.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/test/java/eu/decideh2020/acsmi/backend/test/server/web/rest/errors/ExceptionTranslatorIntTest.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/test/java/eu/decideh2020/acsmi/backend/test/server/web/rest/errors/ExceptionTranslatorIntTest.java
index 87b148764b07412907d548a45ed5d3379b14e8e0..360a3e96f31e4c1590e4b89a5cb94a8088038e3a 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/test/java/eu/decideh2020/acsmi/backend/test/server/web/rest/errors/ExceptionTranslatorIntTest.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/test/java/eu/decideh2020/acsmi/backend/test/server/web/rest/errors/ExceptionTranslatorIntTest.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/test/java/eu/decideh2020/acsmi/backend/test/server/web/rest/errors/ExceptionTranslatorTestController.java b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/test/java/eu/decideh2020/acsmi/backend/test/server/web/rest/errors/ExceptionTranslatorTestController.java
index a6dc0dbab9542d6c5c3409fb0f11975d42349c7b..a82ce7e3cb892052abd332efafff013e077506ee 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/test/java/eu/decideh2020/acsmi/backend/test/server/web/rest/errors/ExceptionTranslatorTestController.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server/src/test/java/eu/decideh2020/acsmi/backend/test/server/web/rest/errors/ExceptionTranslatorTestController.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.testcors.server.src.dvp/WebContent/index.html b/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.testcors.server.src.dvp/WebContent/index.html
deleted file mode 100644
index f1890555e968a6577186c91d0a3865b5e06e2429..0000000000000000000000000000000000000000
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.testcors.server.src.dvp/WebContent/index.html
+++ /dev/null
@@ -1,56 +0,0 @@
-<html>
-	<head>
-		<title>CORS Test</title>
-		
-		<script type="text/javascript">
-		function test1() {
-			//var URL = "http://85.91.40.245:8087/acsmiservices/api/services";
-			var URL = "http://localhost:12080/acsmiservices/api/services";
-			
-			var xhttp = new XMLHttpRequest();
-		    xhttp.open("GET", URL, true);
-		    xhttp.setRequestHeader("Content-type", "application/json");
-		    xhttp.send();
-		    alert(xhttp.responseText);
-		}
-		function test2() {
-			var URL = "http://85.91.40.245:8087/acsmiservices/api/services";
-			//var URL = "http://localhost:12080/acsmiservices/api/services";
-			
-			var xhttp = new XMLHttpRequest();
-		    xhttp.open("GET", URL, true);
-		    xhttp.setRequestHeader("Content-type", "application/json");
-		    xhttp.send();
-		    alert(xhttp.responseText);
-		}
-		function test3() {
-			//var URL = "http://85.91.40.245:8087/acsmiservices/api/services";
-			var URL = "http://experis.decideh2020.org:12080/acsmiservices/api/services";
-			
-			var xhttp = new XMLHttpRequest();
-		    xhttp.open("GET", URL, true);
-		    xhttp.setRequestHeader("Content-type", "application/json");
-		    xhttp.send();
-		    alert(xhttp.responseText);
-		}
-		function test4() {
-			//var URL = "http://85.91.40.245:8087/acsmiservices/api/services";
-			var URL = "http://192.168.56.1:12080/acsmiservices/api/services";
-			
-			var xhttp = new XMLHttpRequest();
-		    xhttp.open("GET", URL, true);
-		    xhttp.setRequestHeader("Content-type", "application/json");
-		    xhttp.send();
-		    alert(xhttp.responseText);
-		}
-		</script>
-	</head>
-	
-	<body>
-		<br /><br />
-		<input type="button" value="CORS from 192.168.56.1/experis.decideh2020.org Test to localhost:12080" onclick="test1()" />
-		<input type="button" value="CORS from 192.168.56.1/experis.decideh2020.org Test to 85.91.40.245:8087" onclick="test2()" />
-		<input type="button" value="CORS from 192.168.56.1/experis.decideh2020.org Test to experis.decideh2020.org:12080" onclick="test3()" />
-		<input type="button" value="CORS from 192.168.56.1/experis.decideh2020.org Test to 192.168.56.1:12080" onclick="test4()" />
-	</body>
-</html>
\ No newline at end of file
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/mvnw b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/mvnw
deleted file mode 100644
index a1ba1bf554bb63c401f90c6a472c21470ed4e164..0000000000000000000000000000000000000000
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/mvnw
+++ /dev/null
@@ -1,233 +0,0 @@
-#!/bin/sh
-# ----------------------------------------------------------------------------
-# 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.
-# ----------------------------------------------------------------------------
-
-# ----------------------------------------------------------------------------
-# Maven2 Start Up Batch script
-#
-# Required ENV vars:
-# ------------------
-#   JAVA_HOME - location of a JDK home dir
-#
-# Optional ENV vars
-# -----------------
-#   M2_HOME - location of maven2's installed home dir
-#   MAVEN_OPTS - parameters passed to the Java VM when running Maven
-#     e.g. to debug Maven itself, use
-#       set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
-#   MAVEN_SKIP_RC - flag to disable loading of mavenrc files
-# ----------------------------------------------------------------------------
-
-if [ -z "$MAVEN_SKIP_RC" ] ; then
-
-  if [ -f /etc/mavenrc ] ; then
-    . /etc/mavenrc
-  fi
-
-  if [ -f "$HOME/.mavenrc" ] ; then
-    . "$HOME/.mavenrc"
-  fi
-
-fi
-
-# OS specific support.  $var _must_ be set to either true or false.
-cygwin=false;
-darwin=false;
-mingw=false
-case "`uname`" in
-  CYGWIN*) cygwin=true ;;
-  MINGW*) mingw=true;;
-  Darwin*) darwin=true
-           #
-           # Look for the Apple JDKs first to preserve the existing behaviour, and then look
-           # for the new JDKs provided by Oracle.
-           #
-           if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK ] ; then
-             #
-             # Apple JDKs
-             #
-             export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home
-           fi
-
-           if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Java/JavaVirtualMachines/CurrentJDK ] ; then
-             #
-             # Apple JDKs
-             #
-             export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home
-           fi
-
-           if [ -z "$JAVA_HOME" ] && [ -L "/Library/Java/JavaVirtualMachines/CurrentJDK" ] ; then
-             #
-             # Oracle JDKs
-             #
-             export JAVA_HOME=/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home
-           fi
-
-           if [ -z "$JAVA_HOME" ] && [ -x "/usr/libexec/java_home" ]; then
-             #
-             # Apple JDKs
-             #
-             export JAVA_HOME=`/usr/libexec/java_home`
-           fi
-           ;;
-esac
-
-if [ -z "$JAVA_HOME" ] ; then
-  if [ -r /etc/gentoo-release ] ; then
-    JAVA_HOME=`java-config --jre-home`
-  fi
-fi
-
-if [ -z "$M2_HOME" ] ; then
-  ## resolve links - $0 may be a link to maven's home
-  PRG="$0"
-
-  # need this for relative symlinks
-  while [ -h "$PRG" ] ; do
-    ls=`ls -ld "$PRG"`
-    link=`expr "$ls" : '.*-> \(.*\)$'`
-    if expr "$link" : '/.*' > /dev/null; then
-      PRG="$link"
-    else
-      PRG="`dirname "$PRG"`/$link"
-    fi
-  done
-
-  saveddir=`pwd`
-
-  M2_HOME=`dirname "$PRG"`/..
-
-  # make it fully qualified
-  M2_HOME=`cd "$M2_HOME" && pwd`
-
-  cd "$saveddir"
-  # echo Using m2 at $M2_HOME
-fi
-
-# For Cygwin, ensure paths are in UNIX format before anything is touched
-if $cygwin ; then
-  [ -n "$M2_HOME" ] &&
-    M2_HOME=`cygpath --unix "$M2_HOME"`
-  [ -n "$JAVA_HOME" ] &&
-    JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
-  [ -n "$CLASSPATH" ] &&
-    CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
-fi
-
-# For Migwn, ensure paths are in UNIX format before anything is touched
-if $mingw ; then
-  [ -n "$M2_HOME" ] &&
-    M2_HOME="`(cd "$M2_HOME"; pwd)`"
-  [ -n "$JAVA_HOME" ] &&
-    JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
-  # TODO classpath?
-fi
-
-if [ -z "$JAVA_HOME" ]; then
-  javaExecutable="`which javac`"
-  if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
-    # readlink(1) is not available as standard on Solaris 10.
-    readLink=`which readlink`
-    if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
-      if $darwin ; then
-        javaHome="`dirname \"$javaExecutable\"`"
-        javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
-      else
-        javaExecutable="`readlink -f \"$javaExecutable\"`"
-      fi
-      javaHome="`dirname \"$javaExecutable\"`"
-      javaHome=`expr "$javaHome" : '\(.*\)/bin'`
-      JAVA_HOME="$javaHome"
-      export JAVA_HOME
-    fi
-  fi
-fi
-
-if [ -z "$JAVACMD" ] ; then
-  if [ -n "$JAVA_HOME"  ] ; then
-    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
-      # IBM's JDK on AIX uses strange locations for the executables
-      JAVACMD="$JAVA_HOME/jre/sh/java"
-    else
-      JAVACMD="$JAVA_HOME/bin/java"
-    fi
-  else
-    JAVACMD="`which java`"
-  fi
-fi
-
-if [ ! -x "$JAVACMD" ] ; then
-  echo "Error: JAVA_HOME is not defined correctly." >&2
-  echo "  We cannot execute $JAVACMD" >&2
-  exit 1
-fi
-
-if [ -z "$JAVA_HOME" ] ; then
-  echo "Warning: JAVA_HOME environment variable is not set."
-fi
-
-CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
-
-# For Cygwin, switch paths to Windows format before running java
-if $cygwin; then
-  [ -n "$M2_HOME" ] &&
-    M2_HOME=`cygpath --path --windows "$M2_HOME"`
-  [ -n "$JAVA_HOME" ] &&
-    JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
-  [ -n "$CLASSPATH" ] &&
-    CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
-fi
-
-# traverses directory structure from process work directory to filesystem root
-# first directory with .mvn subdirectory is considered project base directory
-find_maven_basedir() {
-  local basedir=$(pwd)
-  local wdir=$(pwd)
-  while [ "$wdir" != '/' ] ; do
-    if [ -d "$wdir"/.mvn ] ; then
-      basedir=$wdir
-      break
-    fi
-    wdir=$(cd "$wdir/.."; pwd)
-  done
-  echo "${basedir}"
-}
-
-# concatenates all lines of a file
-concat_lines() {
-  if [ -f "$1" ]; then
-    echo "$(tr -s '\n' ' ' < "$1")"
-  fi
-}
-
-export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-$(find_maven_basedir)}
-MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
-
-# Provide a "standardized" way to retrieve the CLI args that will
-# work with both Windows and non-Windows executions.
-MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
-export MAVEN_CMD_LINE_ARGS
-
-WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
-
-exec "$JAVACMD" \
-  $MAVEN_OPTS \
-  -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
-  "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
-  ${WRAPPER_LAUNCHER} "$@"
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/mvnw.cmd b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/mvnw.cmd
deleted file mode 100644
index 2b934e89dd1d9872b747047fa696477264a86ad8..0000000000000000000000000000000000000000
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/mvnw.cmd
+++ /dev/null
@@ -1,145 +0,0 @@
-@REM ----------------------------------------------------------------------------
-@REM Licensed to the Apache Software Foundation (ASF) under one
-@REM or more contributor license agreements.  See the NOTICE file
-@REM distributed with this work for additional information
-@REM regarding copyright ownership.  The ASF licenses this file
-@REM to you under the Apache License, Version 2.0 (the
-@REM "License"); you may not use this file except in compliance
-@REM with the License.  You may obtain a copy of the License at
-@REM
-@REM    http://www.apache.org/licenses/LICENSE-2.0
-@REM
-@REM Unless required by applicable law or agreed to in writing,
-@REM software distributed under the License is distributed on an
-@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-@REM KIND, either express or implied.  See the License for the
-@REM specific language governing permissions and limitations
-@REM under the License.
-@REM ----------------------------------------------------------------------------
-
-@REM ----------------------------------------------------------------------------
-@REM Maven2 Start Up Batch script
-@REM
-@REM Required ENV vars:
-@REM JAVA_HOME - location of a JDK home dir
-@REM
-@REM Optional ENV vars
-@REM M2_HOME - location of maven2's installed home dir
-@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
-@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending
-@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
-@REM     e.g. to debug Maven itself, use
-@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
-@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
-@REM ----------------------------------------------------------------------------
-
-@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
-@echo off
-@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on'
-@if "%MAVEN_BATCH_ECHO%" == "on"  echo %MAVEN_BATCH_ECHO%
-
-@REM set %HOME% to equivalent of $HOME
-if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
-
-@REM Execute a user defined script before this one
-if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
-@REM check for pre script, once with legacy .bat ending and once with .cmd ending
-if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
-if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
-:skipRcPre
-
-@setlocal
-
-set ERROR_CODE=0
-
-@REM To isolate internal variables from possible post scripts, we use another setlocal
-@setlocal
-
-@REM ==== START VALIDATION ====
-if not "%JAVA_HOME%" == "" goto OkJHome
-
-echo.
-echo Error: JAVA_HOME not found in your environment. >&2
-echo Please set the JAVA_HOME variable in your environment to match the >&2
-echo location of your Java installation. >&2
-echo.
-goto error
-
-:OkJHome
-if exist "%JAVA_HOME%\bin\java.exe" goto init
-
-echo.
-echo Error: JAVA_HOME is set to an invalid directory. >&2
-echo JAVA_HOME = "%JAVA_HOME%" >&2
-echo Please set the JAVA_HOME variable in your environment to match the >&2
-echo location of your Java installation. >&2
-echo.
-goto error
-
-@REM ==== END VALIDATION ====
-
-:init
-
-set MAVEN_CMD_LINE_ARGS=%*
-
-@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
-@REM Fallback to current working directory if not found.
-
-set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
-IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
-
-set EXEC_DIR=%CD%
-set WDIR=%EXEC_DIR%
-:findBaseDir
-IF EXIST "%WDIR%"\.mvn goto baseDirFound
-cd ..
-IF "%WDIR%"=="%CD%" goto baseDirNotFound
-set WDIR=%CD%
-goto findBaseDir
-
-:baseDirFound
-set MAVEN_PROJECTBASEDIR=%WDIR%
-cd "%EXEC_DIR%"
-goto endDetectBaseDir
-
-:baseDirNotFound
-set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
-cd "%EXEC_DIR%"
-
-:endDetectBaseDir
-
-IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
-
-@setlocal EnableExtensions EnableDelayedExpansion
-for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
-@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
-
-:endReadAdditionalConfig
-
-SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
-
-set WRAPPER_JAR="".\.mvn\wrapper\maven-wrapper.jar""
-set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
-
-%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CMD_LINE_ARGS%
-if ERRORLEVEL 1 goto error
-goto end
-
-:error
-set ERROR_CODE=1
-
-:end
-@endlocal & set ERROR_CODE=%ERROR_CODE%
-
-if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
-@REM check for post script, once with legacy .bat ending and once with .cmd ending
-if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
-if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
-:skipRcPost
-
-@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
-if "%MAVEN_BATCH_PAUSE%" == "on" pause
-
-if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
-
-exit /B %ERROR_CODE%
\ No newline at end of file
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/AcsmiApp.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/AcsmiApp.java
index 4fe2ebb70313ad19afe3f73fefe5103df320d2be..5d88c7b5286f6297856bf095907509dc54ff95cd 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/AcsmiApp.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/AcsmiApp.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/ApplicationWebXml.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/ApplicationWebXml.java
index 2589bc406f181c2ff2b71aac254ff41e725f8305..d5df86e0cbe519b985f114b1410c4798f6e71000 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/ApplicationWebXml.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/ApplicationWebXml.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/aop/logging/LoggingAspect.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/aop/logging/LoggingAspect.java
index dc71e9a839c66e5fc16f8569bab4442314ffc5e2..0abff0b18406aa5ba104cbda6b1933d510b39156 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/aop/logging/LoggingAspect.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/aop/logging/LoggingAspect.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/ApplicationProperties.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/ApplicationProperties.java
index be567d6ea561f01b798ccf1a86e8bb07f7f3b353..acf149eeb0cca5cdc0fdfd8c8d589b411c23eebf 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/ApplicationProperties.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/ApplicationProperties.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/AsyncConfiguration.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/AsyncConfiguration.java
index f16d402d1370444171c8c54f62d347fef9375b5e..62d77f89a9866977245a9081ba62d6f8416dd7b1 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/AsyncConfiguration.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/AsyncConfiguration.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/CacheConfiguration.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/CacheConfiguration.java
index 2096a3a2cb3b37f68767274a1e73e4580a9a531a..09bb62e681feeba475f680a6d9214f33678350c9 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/CacheConfiguration.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/CacheConfiguration.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/CloudDatabaseConfiguration.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/CloudDatabaseConfiguration.java
index 0087cf33bffce6e5576ee8c24c9059e3ac7e2513..25f1ce28e53c6d9d896cb2428beced7de9a48a1f 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/CloudDatabaseConfiguration.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/CloudDatabaseConfiguration.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/Constants.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/Constants.java
index 6565539fe9dbe5624e84e4a21307f222f3ee1e54..9a958c6b23863f39493f2047b14f113eb53bcae5 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/Constants.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/Constants.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/DatabaseConfiguration.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/DatabaseConfiguration.java
index 263ca57ca3d8fd466c95a8649b7feb840eff867b..e6e959092002d88104ace02f868e5d1a0fa2fdc4 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/DatabaseConfiguration.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/DatabaseConfiguration.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/DateTimeFormatConfiguration.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/DateTimeFormatConfiguration.java
index 03306976d986b2e4323e54afc3a7ba040535999b..548593285444bf6d12db88793e2e6a1b093c26be 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/DateTimeFormatConfiguration.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/DateTimeFormatConfiguration.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/DefaultProfileUtil.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/DefaultProfileUtil.java
index 73bb78539e6ffc278a0fbc3027bc9fb16825f2fa..5f1914c049b47f295b0ea81a2ce176d1530cd09f 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/DefaultProfileUtil.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/DefaultProfileUtil.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/GatewayConfiguration.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/GatewayConfiguration.java
index 9e4fe6a09e9e9ee77bb9e6782ea98add4f63807c..63bdbb6c930d8112b999dabbf206feb7b89666a1 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/GatewayConfiguration.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/GatewayConfiguration.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/LocaleConfiguration.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/LocaleConfiguration.java
index c907e461f7f49d83a1af7096899ce8373535ab23..4e0b4d53a7cd277cdf4da904d2cc71999e6bd12a 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/LocaleConfiguration.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/LocaleConfiguration.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/LoggingAspectConfiguration.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/LoggingAspectConfiguration.java
index d02f7360afc7b9fc3424a276c69772b0ab8c2ece..93f4bdd55b3c5518fad63552a300f97d21452827 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/LoggingAspectConfiguration.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/LoggingAspectConfiguration.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/LoggingConfiguration.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/LoggingConfiguration.java
index 381d9daf2e5ed12ef8777cfbfe6051edeb51ebcd..444eddf79c3e49e5c29aef33e6ad1589a692955b 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/LoggingConfiguration.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/LoggingConfiguration.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/MetricsConfiguration.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/MetricsConfiguration.java
index 995a9e42ecda2525e43f8ee3498618392bbf4308..10610ba244d2e451b114ac6023910e2c0fdbd2cc 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/MetricsConfiguration.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/MetricsConfiguration.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/SecurityConfiguration.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/SecurityConfiguration.java
index 7c507b492deac056cfe33fb8a9bf1d43968655e6..610afdba38be48b36fb14cec674a0af192fc2eda 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/SecurityConfiguration.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/SecurityConfiguration.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
@@ -129,6 +130,7 @@ public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
             .authorizeRequests()
             .antMatchers("/api/register").permitAll()
             .antMatchers("/api/activate").permitAll()
+            .antMatchers("/api/users/**").permitAll()
             .antMatchers("/api/authenticate").permitAll()
             .antMatchers("/api/account/reset_password/init").permitAll()
             .antMatchers("/api/account/reset_password/finish").permitAll()
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/ThymeleafConfiguration.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/ThymeleafConfiguration.java
index 255bc1b7a99c3f43c9db15daadf0f4dfe273c127..7e9d2d3d972facd90e552ca66ab26bdf360b5e8f 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/ThymeleafConfiguration.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/ThymeleafConfiguration.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/WebConfigurer.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/WebConfigurer.java
index b1cfc17a7d001ba45ae68c23e4308ba76d6e4b20..9d39252b1e52df708465f640d2776fb087749d98 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/WebConfigurer.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/WebConfigurer.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/WebsocketConfiguration.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/WebsocketConfiguration.java
index df783921db1fcc2910e82c31ff6f87764593d2cb..f109a01bcd6cdd24b7320172297b6922fa801042 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/WebsocketConfiguration.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/WebsocketConfiguration.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/WebsocketSecurityConfiguration.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/WebsocketSecurityConfiguration.java
index 49816b9d1fedd1fa54d8b82959fce08f9e19969b..dda2ab9d090880b458feaf3ef70d00c35c26093e 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/WebsocketSecurityConfiguration.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/WebsocketSecurityConfiguration.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/apidoc/GatewaySwaggerResourcesProvider.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/apidoc/GatewaySwaggerResourcesProvider.java
index 8c4f1c4ddceec6d54018d4eac0acde5e8f101c6c..c7f572426261de5188ac6a184738ac74ff875344 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/apidoc/GatewaySwaggerResourcesProvider.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/apidoc/GatewaySwaggerResourcesProvider.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/audit/AuditEventConverter.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/audit/AuditEventConverter.java
index e189429cd0be14c2f3230e7a7da9d7fda9fd3a54..d3da44caf475067b994fc90a50f9412406ea07c1 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/audit/AuditEventConverter.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/audit/AuditEventConverter.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/audit/package-info.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/audit/package-info.java
index 749efec81b2bf750a663c1e34a12f18daca06aea..3a22bd05de6e69ed1869b6ab7c895735126742ab 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/audit/package-info.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/audit/package-info.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/package-info.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/package-info.java
index 251b9dc2803e387605b486fd984a8dfab090c6eb..1a0e8d6ab0a496ec2932970c1b2443badb5e370e 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/package-info.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/config/package-info.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/domain/AbstractAuditingEntity.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/domain/AbstractAuditingEntity.java
index f5b6d4347ddbb4063609d53963c465b231c26aec..8f080b7b3fc187565d1dbf95214c464765f2597e 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/domain/AbstractAuditingEntity.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/domain/AbstractAuditingEntity.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/domain/Authority.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/domain/Authority.java
index 52c6546d4ea6ba6331b5e25845c45da19993e884..8d4b9d8b9a39c6bd82dcf5bba55613c12f0b541f 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/domain/Authority.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/domain/Authority.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/domain/PersistentAuditEvent.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/domain/PersistentAuditEvent.java
index 394205ff0f6a9f75ea35122e37f1afb5adb03bc0..d50660bf9961d63bcab7b8f73eee8c7341960c1d 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/domain/PersistentAuditEvent.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/domain/PersistentAuditEvent.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/domain/User.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/domain/User.java
index 673c3dccc0df94ab11c9a10cdecba2b7729e8e04..09e0852b12e3a68fae099fb684871d247ebebd7e 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/domain/User.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/domain/User.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/domain/package-info.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/domain/package-info.java
index 4ac2f2d9cf8d4dfc6e7f42721187c8d79e2c070f..a61c99023761907ecdd6dfcca8ef6aa0c2fc0647 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/domain/package-info.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/domain/package-info.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/gateway/TokenRelayFilter.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/gateway/TokenRelayFilter.java
index e402d80d480f55f6410bb648fa51e76d0e1f4632..aac71afe9739942cc9cfb56cbb7fcf91ea1b7691 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/gateway/TokenRelayFilter.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/gateway/TokenRelayFilter.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/gateway/accesscontrol/AccessControlFilter.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/gateway/accesscontrol/AccessControlFilter.java
index a6912dfab7baf1f7fd835d330274d508e033f6da..bde1d7c1a494c161d973e328a53f47cdcdafed3d 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/gateway/accesscontrol/AccessControlFilter.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/gateway/accesscontrol/AccessControlFilter.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/gateway/ratelimiting/RateLimitingFilter.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/gateway/ratelimiting/RateLimitingFilter.java
index 9fa087c80fec4b512f94adda3f3403a243a82082..6da570f7ca7e1aaea855a653acfd6ca0047a86c0 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/gateway/ratelimiting/RateLimitingFilter.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/gateway/ratelimiting/RateLimitingFilter.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/gateway/responserewriting/SwaggerBasePathRewritingFilter.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/gateway/responserewriting/SwaggerBasePathRewritingFilter.java
index 5314e5ad6e11f78f65327bc421a14b2a370a1ded..faadd2c366ca49117a4ca1041e19356940dffedf 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/gateway/responserewriting/SwaggerBasePathRewritingFilter.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/gateway/responserewriting/SwaggerBasePathRewritingFilter.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/repository/AuthorityRepository.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/repository/AuthorityRepository.java
index 05c99d2aa23672242c585582e602a328ea16b7a2..3059816cbb06a270cd468fb07b51bb1e8f3c5f96 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/repository/AuthorityRepository.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/repository/AuthorityRepository.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/repository/CustomAuditEventRepository.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/repository/CustomAuditEventRepository.java
index eaba1d39ce2656ad837ffb0308e7f9458ab0e5ca..ad3e7b2ee2d8e41f16d06ff8781383c771b4acda 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/repository/CustomAuditEventRepository.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/repository/CustomAuditEventRepository.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/repository/PersistenceAuditEventRepository.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/repository/PersistenceAuditEventRepository.java
index 2176041e3fd84780d1fa2d68082de914c2dcd795..48646d7ecf7765e3d191e6b04d2a75d872a1ca71 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/repository/PersistenceAuditEventRepository.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/repository/PersistenceAuditEventRepository.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/repository/UserRepository.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/repository/UserRepository.java
index 52a3963f63b7ffb3f31ef6ee85d0fa57504e54a8..fa5b384515ea8365fd243abf2c4c7164373607ce 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/repository/UserRepository.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/repository/UserRepository.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/repository/package-info.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/repository/package-info.java
index 68c48042318068c49e20155b2db443f7bfd85b72..8222f6fb8381d89ae88abfcac8870b7d84349798 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/repository/package-info.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/repository/package-info.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/security/AuthoritiesConstants.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/security/AuthoritiesConstants.java
index 10121101026e63739fa01126ee9d2d3c23094a07..55c647dffa7b82742e289e54ee8521fba6d7544b 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/security/AuthoritiesConstants.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/security/AuthoritiesConstants.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/security/DomainUserDetailsService.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/security/DomainUserDetailsService.java
index 610bd9b444a3cf6fa552e91bf0c9377a6ea554bb..ce050df56c238bcb227e2c8c27a91ae3ac9555dd 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/security/DomainUserDetailsService.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/security/DomainUserDetailsService.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/security/SecurityUtils.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/security/SecurityUtils.java
index b1cf464abe2220bbc60202cbe7b90e98f0466342..684b527c3da75cf610102896f528c044fee954c0 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/security/SecurityUtils.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/security/SecurityUtils.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/security/SpringSecurityAuditorAware.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/security/SpringSecurityAuditorAware.java
index 45f6e901f2a6eed1945829fca2197cd34842eddb..1d560a16999ecb117615bb3adf761f0296c2a4c8 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/security/SpringSecurityAuditorAware.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/security/SpringSecurityAuditorAware.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/security/UserNotActivatedException.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/security/UserNotActivatedException.java
index 7750edff5e60981a9d0e0470ffd3292e58284bbe..d3e4931822d3a0cd6c5a62422799c2b06af66088 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/security/UserNotActivatedException.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/security/UserNotActivatedException.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/security/jwt/JWTConfigurer.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/security/jwt/JWTConfigurer.java
index c7d5c223863fb16beb7a636ca20c006e9979b0cf..23086be227e40bbe0f0016925955aacbfe8813a5 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/security/jwt/JWTConfigurer.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/security/jwt/JWTConfigurer.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/security/jwt/JWTFilter.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/security/jwt/JWTFilter.java
index ae0f9d5ce76f70b3b8e15f78ea2a4f4b71f746ab..e65a835a3b236ba518c24279902da1683ccdf343 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/security/jwt/JWTFilter.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/security/jwt/JWTFilter.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/security/jwt/TokenProvider.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/security/jwt/TokenProvider.java
index f4226fc12b3978bb3908ecc8cfa50238e9f12041..49e33d86cf44e1c4dcbdee486f476ebe097eadcd 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/security/jwt/TokenProvider.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/security/jwt/TokenProvider.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/security/package-info.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/security/package-info.java
index 96e8f42cfd01d96bbb8746364354c1bf0d3703bc..801cfeeee927ffe2324a9bfae0ad978e0d2025de 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/security/package-info.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/security/package-info.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/service/AuditEventService.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/service/AuditEventService.java
index 8d82f9b0baf3b1a03d0f744ee5520c9b5cf0671e..3ad556fb8606fd511caf8691c5b77a10120546cf 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/service/AuditEventService.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/service/AuditEventService.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/service/MailService.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/service/MailService.java
index 811151d577d4d14d20913e4e8530180e6fc9c091..d98845a42d6754aef9c21131f6f4e350742cfb17 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/service/MailService.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/service/MailService.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/service/UserService.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/service/UserService.java
index 972d8c8e3037261aa01db30ddd522ff49262e544..100e350cf6bcea21ad02fe3f1812dcbc98fdcbd8 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/service/UserService.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/service/UserService.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/service/dto/UserDTO.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/service/dto/UserDTO.java
index d06f9f5c22131d343e8eb80ba2f0693556b52388..09b5926957641007fdef775afd391cb0b67176dd 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/service/dto/UserDTO.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/service/dto/UserDTO.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/service/dto/package-info.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/service/dto/package-info.java
index 19766f003497140509abdd9ee56829599166d10e..69511581992745b2336c25658445b74e800a96b2 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/service/dto/package-info.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/service/dto/package-info.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/service/mapper/UserMapper.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/service/mapper/UserMapper.java
index e2a59af139d4bf7cdef2424484809799f58fd402..affa5266b1d28de6745066e28f5e8905e09dfe30 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/service/mapper/UserMapper.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/service/mapper/UserMapper.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/service/mapper/package-info.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/service/mapper/package-info.java
index a2c4a779596ac8028fb26a845f604ed4b6e4a6bf..e47083baf14cecbe369715350a5f7a9d20f39b8a 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/service/mapper/package-info.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/service/mapper/package-info.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/service/package-info.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/service/package-info.java
index 46cc3905fdeb7f4d5acbc1a3f26f380f42a2b54c..ce3b834856a691f008216c962a8375aaf058c21d 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/service/package-info.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/service/package-info.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/service/util/RandomUtil.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/service/util/RandomUtil.java
index df202e323c0987fabbf1743ff22277c11a303306..3ef647e3021d8ec7bc76d70e841d7fc4af4a647d 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/service/util/RandomUtil.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/service/util/RandomUtil.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/AccountResource.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/AccountResource.java
index 9e47147c66fbb4509460f6e44e9a5c2577eb1072..e544581f658ad306bbd1ade8cf3309613f8c6121 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/AccountResource.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/AccountResource.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/AuditResource.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/AuditResource.java
index 7ca91033b4ef362bb8ee5222372e9229f0d0982d..828a5174fef3429f27d1657a22060384e2b5979e 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/AuditResource.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/AuditResource.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/GatewayResource.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/GatewayResource.java
index 75b1c1bdb0fa152f07bbedf5a379262dffae245a..252d1fa4583bbc8b5edb11b1c89e67ab4cc13590 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/GatewayResource.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/GatewayResource.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/LogsResource.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/LogsResource.java
index a1673385398d1fe8623bf2e29acb282b2ab7a66b..10da34391a0b6263fde73f9bcf51476ee5e60213 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/LogsResource.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/LogsResource.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/ProfileInfoResource.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/ProfileInfoResource.java
index 6a104b570098272fa372d3a4675e2f71cf8fd7c5..2c7e69c6ac7b09763935c6253922aa4ddc8e4398 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/ProfileInfoResource.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/ProfileInfoResource.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/UserJWTController.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/UserJWTController.java
index 48387c5d23765d5133ec29a9360b6b8940b02ecb..b4bc12b35b02cd59428aa0239de637735b0c2928 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/UserJWTController.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/UserJWTController.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/UserResource.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/UserResource.java
index 036423a63d937e7200f7fad863b7cca986dd8798..ed8c7f8d11b7f4b444e01cd7a6526d5c3378d8fc 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/UserResource.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/UserResource.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/errors/CustomParameterizedException.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/errors/CustomParameterizedException.java
index 5080f11929a049643a182c63166ebb890fbaac92..b6556e314fe11039e36d3fc95559e4a24fb40a5e 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/errors/CustomParameterizedException.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/errors/CustomParameterizedException.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/errors/ErrorConstants.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/errors/ErrorConstants.java
index 0da09b48a1a97a045261bfde47b02d99ad85cc1e..ba22b57810a916bf7dc7435caf15bf3b9ab0b179 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/errors/ErrorConstants.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/errors/ErrorConstants.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/errors/ErrorVM.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/errors/ErrorVM.java
index 88bf1a33c5dda597ab768621a938f45839ff4a08..8de21f4af504728a04f69e690e7a3ba3569913bb 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/errors/ErrorVM.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/errors/ErrorVM.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/errors/ExceptionTranslator.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/errors/ExceptionTranslator.java
index 3a4e7623b8a4531fbb67ed918aabfa894af75e4f..9121f5a8454f5009583e0c759d1aa13ee089149e 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/errors/ExceptionTranslator.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/errors/ExceptionTranslator.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/errors/FieldErrorVM.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/errors/FieldErrorVM.java
index d0b8fd8d0c090e6a5a842144e07bd4ff9bfeca61..eb560cdcfeec67895e982c009c7b39664b0bdd7e 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/errors/FieldErrorVM.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/errors/FieldErrorVM.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/errors/ParameterizedErrorVM.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/errors/ParameterizedErrorVM.java
index c6cb0f4925f28fa200f689999958bc8f9b24a7da..b513e680a474278df625550cc32c1699b39a3577 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/errors/ParameterizedErrorVM.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/errors/ParameterizedErrorVM.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/package-info.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/package-info.java
index 69807f12f870e4b100333e643398bf68327ced39..c993d72e8393fcd0ab6fbdf2bb47dd48b870c32d 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/package-info.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/package-info.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/util/HeaderUtil.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/util/HeaderUtil.java
index f8f717a17ef1be3208a0c6403ece24824b43210b..2058a6dbcc9efc887efb323a71986913434cc943 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/util/HeaderUtil.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/util/HeaderUtil.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/util/PaginationUtil.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/util/PaginationUtil.java
index 8e7ee3728a46012f948793d28be302a3c073c2b2..ef02cf74957dfc8debb18d5a11a17eba13cc172b 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/util/PaginationUtil.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/util/PaginationUtil.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/vm/KeyAndPasswordVM.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/vm/KeyAndPasswordVM.java
index bfc8fc398b003208fe96ed2ca1182ddc20353d3b..ae4714558665c10629747bba004979503cf6b00a 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/vm/KeyAndPasswordVM.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/vm/KeyAndPasswordVM.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/vm/LoggerVM.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/vm/LoggerVM.java
index 461c21a28c9fe81aefc81907093b7cb9a5da0035..089879520c1be4b70d7fcfd164b917e9571377a8 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/vm/LoggerVM.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/vm/LoggerVM.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/vm/LoginVM.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/vm/LoginVM.java
index 533784a2412a22467ad8dd04e7711465e008c73d..422d46282d04de85ae89ffeefc781817ba7306e0 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/vm/LoginVM.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/vm/LoginVM.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/vm/ManagedUserVM.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/vm/ManagedUserVM.java
index 51c2d98bf2cf38fa205354912b5eb537d9e3e050..043bde16dae35178cd6782d33a7d5c32dcc1f4f5 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/vm/ManagedUserVM.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/vm/ManagedUserVM.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/vm/RouteVM.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/vm/RouteVM.java
index 03aa147e5946e7f2cef205f81870bb556b877e23..9a5968bc9fbf2a76d58165b11725ebd1121819bb 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/vm/RouteVM.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/vm/RouteVM.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/vm/package-info.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/vm/package-info.java
index 4ca2b41057f463c50fb11c7d1831a88da91b7a79..5586897018a6b9958707075a8e902284b82f3406 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/vm/package-info.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/rest/vm/package-info.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/websocket/ActivityService.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/websocket/ActivityService.java
index 56798c5c265ae660fd053f1f2c8a957a746a860c..46d67f4b157054a40913bb54f99e80eb7080dc47 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/websocket/ActivityService.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/websocket/ActivityService.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/websocket/dto/ActivityDTO.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/websocket/dto/ActivityDTO.java
index 6d57b938ac1b9e3310e0f5d37b039ce34209723e..b5bfcda897bfaa6458f942d2d67ca61cb82942d2 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/websocket/dto/ActivityDTO.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/websocket/dto/ActivityDTO.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/websocket/dto/package-info.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/websocket/dto/package-info.java
index 5f48418a7cdc0d556db73bdf0d2651b51a13b6ad..c30f00e118155452c93986bdf7430476602113ea 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/websocket/dto/package-info.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/websocket/dto/package-info.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/websocket/package-info.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/websocket/package-info.java
index 5804eaf22a56cb13dd44b024e7fdf79106138949..6703b297b4ac0fa8a0fde8d853bffecf9e27574b 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/websocket/package-info.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/java/eu/decideh2020/acsmi/frontend/server/web/websocket/package-info.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/resources/config/application-prod.yml b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/resources/config/application-prod.yml
index bb392d70b7f543a0afa629b71ff0fdb579114295..c5685d8fe5713bfaf979932fc7e3a887cc0fad92 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/resources/config/application-prod.yml
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/resources/config/application-prod.yml
@@ -18,7 +18,7 @@ eureka:
         prefer-ip-address: true
     client:
         service-url:
-            defaultZone: http://admin:${jhipster.registry.password}@registry.integration.acsmi.lan.esilab.org:8100/eureka/
+            defaultZone: http://admin:${jhipster.registry.password}@localhost:8761/eureka/
 
 spring:
     devtools:
@@ -28,7 +28,7 @@ spring:
             enabled: false
     datasource:
         type: com.zaxxer.hikari.HikariDataSource
-        url: jdbc:mysql://mysql.integration.acsmi.lan.esilab.org:3306/acsmi_frontend_server?useUnicode=true&characterEncoding=utf8&useSSL=false
+        url: jdbc:mysql://localhost:3306/acsmi_frontend_server?useUnicode=true&characterEncoding=utf8&useSSL=false
         username: root
         password:
         hikari:
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/resources/config/liquibase/users.csv b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/resources/config/liquibase/users.csv
index ec81998a02a31b279edb8b63178deac18183d88e..0a7fd19e246718ea2aed86bde43aa3d2ea7ebd0c 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/resources/config/liquibase/users.csv
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/resources/config/liquibase/users.csv
@@ -4,5 +4,4 @@ id;login;password_hash;first_name;last_name;email;company;users_group;user_type;
 3;user;$2a$10$wM3509oZfk4N.YuRqhgrleVAghzhIiijeFYK6TBampV3mbvhguXrq;User;User;user@localhost;ACSmI;usergroup;dev;null;null;null;A12345678;null;true;en;system;system
 4;csp;$2a$10$wM3509oZfk4N.YuRqhgrleVAghzhIiijeFYK6TBampV3mbvhguXrq;CSP;csp;csp@localhost;Arsys;cspgroup;csp;null;null;null;A12345678;null;true;en;system;system
 5;legal;$2a$10$wM3509oZfk4N.YuRqhgrleVAghzhIiijeFYK6TBampV3mbvhguXrq;Legal;legal;legal@localhost;ACSmI;legalgroup;lgl;null;null;null;A12345678;null;true;en;system;system
-6;ARSYSCSP;$2a$04$AV6qKdCwlrvY6ejogFtDG.EN4B3SJ/Z5vfq.aiezkrWQwI447c1.W;Arsys;CSP;arsyscsp@localhost;Arsys;cspgroup;csp;null;null;null;A12345678;null;true;en;system;system
-7;ARSYSUSER;$2a$04$a4C6NBfXHkAFzaYERic6del.C//Fxpll5vNaPymBuR7YLALyusFRm;Arsys;User;arsysuser@localhost;Arsys;usergroup;dev;null;null;null;A12345678;null;true;en;system;system
+6;decideapiuser;$2a$10$LSuVJ4RYZ4/XsTlr1h0rl.velvX7ETU4pVXpuVurQZAr68tWYvKmC;Administrator;Administrator;decideapiuser@localhost;ACSmI;admingroup;adm;null;null;null;A12345678;null;true;en;system;system
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/resources/config/liquibase/users_authorities.csv b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/resources/config/liquibase/users_authorities.csv
index cf6e8dbd319bd74baccefaadce7fd000f7dba317..d920d245d40f6634304cbd0c7cf787f15f98dd47 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/resources/config/liquibase/users_authorities.csv
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/resources/config/liquibase/users_authorities.csv
@@ -10,5 +10,4 @@ user_id;authority_name
 3;ROLE_USER
 4;ROLE_CSP
 5;ROLE_LEGAL_EXPERT
-6;ROLE_CSP
-7;ROLE_USER
+6;ROLE_ADMIN
\ No newline at end of file
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/account.state.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/account.state.js
index 84c1ec1003935a6bcc5457e297958a8b66f10396..d3e1f81ca86304154a85721cbcc1510fbeb4c37a 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/account.state.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/account.state.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/activate/activate.controller.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/activate/activate.controller.js
index 1790d5bdbbcc3296842ca3ab210bc8eb5e772d9a..aa5dd3fd2f5d50c38cecaddc136c63f2dfc12d5b 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/activate/activate.controller.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/activate/activate.controller.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/activate/activate.state.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/activate/activate.state.js
index 458227399ebeef8c496dda42460723962336f036..12e28e4c33d5db4c1ed995f577a2f95c5dec52ac 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/activate/activate.state.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/activate/activate.state.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/password/password-strength-bar.directive.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/password/password-strength-bar.directive.js
index 89f8c2ea8b43348683ad35d901b13c7d22e39687..983fa9b0e28eef98cf7cf86cdd4a8942f239f935 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/password/password-strength-bar.directive.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/password/password-strength-bar.directive.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/password/password.controller.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/password/password.controller.js
index 30ed325a97f0e98e87c0814b3027efc773aa24bd..6b7d8fa1be6818022e49681c0cb2793389ffdd9e 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/password/password.controller.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/password/password.controller.js
@@ -19,6 +19,7 @@
  * Contributors (in alphabetical order):
  * 
  * Alberto Molinuevo					Tecnalia
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/password/password.state.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/password/password.state.js
index c4b2cf31946a1a85162e0cc6eb9531e2ade96cbf..d5674e8910e0270e31ff1bdd065d2673aaf5145f 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/password/password.state.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/password/password.state.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/register/register.controller.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/register/register.controller.js
index ca8e9187226abbf1c6dfb71d69a61050e4506601..375574b7276738a561514cc717c6a265ce3b2378 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/register/register.controller.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/register/register.controller.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
@@ -50,6 +51,8 @@
         vm.definitions = null;
         vm.success = null;
         
+        vm.accept = false;
+        
         loadCSPs();
         
         // Load CSPs
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/register/register.html b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/register/register.html
index dd90c299d8547d8f4ccec45c0a3abee67cd068ef..07339aa17c61eade361e671dea3b44ae0f32cf64 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/register/register.html
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/register/register.html
@@ -181,99 +181,20 @@
 					</select>
                 </div>
                 
-                
-                <!-- Credit card / Contract reference 
-                <label data-translate="global.form.creditorcontract" ng-if="vm.settingsAccount.userType == 'pa'">Credit Card / Contract Reference</label>
-                <div class="form-group" ng-if="vm.settingsAccount.userType == 'pa'">
-                  <div class="radio">
-                      <label>
-                          <input type="radio" name="creditOrContract" value="creditcard" ng-model="vm.settingsAccount.creditOrContract" ng-required="true">
-                          Credit Card
-                      </label>
-                  </div>
-                  <div class="radio">
-                      <label>
-                          <input type="radio" name="creditOrContract" value="contractreference" ng-model="vm.settingsAccount.creditOrContract" ng-required="true">
-                          Contract Reference
-                      </label>
-                  </div>
-                </div>
-                <div class="form-group" ng-if="vm.settingsAccount.userType == 'pa' && vm.settingsAccount.creditOrContract == 'creditcard'">
-                    <label class="control-label" for="creditCardType" data-translate="global.form.creditcardtype">Credit card type</label>
-                    <select id="creditCardType" name="creditCardType" class="form-control"
-                            ng-model="vm.settingsAccount.creditCardType" ng-controller="CreditCardController as creditcardVm"
-                            ng-options="code as (code | findCreditCardFromKey) for code in creditcardVm.cards" required>
-                    </select>
-                </div>
-                <div class="form-group" ng-if="vm.settingsAccount.userType == 'pa' && vm.settingsAccount.creditOrContract == 'creditcard'">
-                  <label class="control-label" for="creditCard" data-translate="global.form.creditcard">Credit card</label>
-                  <input type="text" class="form-control" id="creditCard" name="creditCard" placeholder="{{'global.form.creditcard.placeholder' | translate}}"
-                         ng-model="vm.settingsAccount.creditCard" ng-minlength=13 ng-maxlength=16 ng-pattern="/^[0-9]{13,16}$/" required>
-                  <div ng-show="form.creditCard.$dirty && form.creditCard.$invalid">
-                      <p class="help-block"
-                             ng-show="form.creditCard.$error.required" data-translate="global.messages.validate.creditcard.required">
-                          Your credit card number is required.
-                      </p>
-                      <p class="help-block"
-                             ng-show="form.creditCard.$error.creditcard" data-translate="global.messages.validate.creditcard.invalid">
-                          Your credit card number is invalid.
-                      </p>
-                      <p class="help-block"
-                             ng-show="form.creditCard.$error.minlength" data-translate="global.messages.validate.creditcard.minlength">
-                          Your credit card number must be at least 13 characters.
-                      </p>
-                      <p class="help-block"
-                             ng-show="form.creditCard.$error.maxlength" data-translate="global.messages.validate.creditcard.maxlength">
-                          Your credit card number cannot be longer than 16 characters.
-                      </p>
-                  </div>
+                <div class="form-group register-legal-conditions-label" ng-show="vm.settingsAccount.userType != null">
+                	<label class="control-label" data-translate="register.form.legalConditionsLabel">Legal conditions:</label>
                 </div>
-                <div class="form-group" ng-if="vm.settingsAccount.userType == 'pa' && vm.settingsAccount.creditOrContract == 'contractreference'">
-                  <label class="control-label" for="contractReference" data-translate="global.form.contractreference">Contract reference</label>
-                  <input type="text" class="form-control" id="contractReference" name="contractReference" placeholder="{{'global.form.contractreference.placeholder' | translate}}"
-                         ng-model="vm.settingsAccount.contractReference" ng-minlength=13 ng-maxlength=16 ng-pattern="/^[a-zA-Z0-9]{13,16}$/" required>
-                  <div ng-show="form.contractReference.$dirty && form.contractReference.$invalid">
-                      <p class="help-block"
-                             ng-show="form.contractReference.$error.required" data-translate="global.messages.validate.contractreference.required">
-                          Your contract reference number is required.
-                      </p>
-                      <p class="help-block"
-                             ng-show="form.contractReference.$error.contractreference" data-translate="global.messages.validate.contractreference.invalid">
-                          Your contract reference number is invalid.
-                      </p>
-                      <p class="help-block"
-                             ng-show="form.contractReference.$error.minlength" data-translate="global.messages.validate.contractreference.minlength">
-                          Your contract reference number must be at least 13 characters.
-                      </p>
-                      <p class="help-block"
-                             ng-show="form.contractReference.$error.maxlength" data-translate="global.messages.validate.contractreference.maxlength">
-                          Your contract reference number cannot be longer than 16 characters.
-                      </p>
-                  </div>
+                <div class="form-group register-legal-conditions" ng-show="vm.settingsAccount.userType != null">
+                	<span data-translate="register.form.cspLegalConditions" ng-show="vm.settingsAccount.userType == 'csp'">&nbsp;</span>
+                	<span data-translate="register.form.developerLegalConditions" ng-show="vm.settingsAccount.userType == 'dev'">&nbsp;</span>
+                	<span data-translate="register.form.legalExpertLegalConditions" ng-show="vm.settingsAccount.userType == 'lgl'">&nbsp;</span>
                 </div>
-                -->
-                
-                <!-- CIF / VAT
-                <div class="form-group">
-                  <label class="control-label" for="cifOrVat" data-translate="global.form.ciforvat">CIF / VAT</label>
-                  <input type="text" class="form-control" id="cifOrVat" name="cifOrVat" placeholder="{{'global.form.ciforvat.placeholder' | translate}}"
-                         ng-model="vm.settingsAccount.cifOrVat" ng-minlength=8 ng-maxlength=12 required>
-                  <div ng-show="form.cifOrVat.$dirty && form.cifOrVat.$invalid">
-                      <p class="help-block"
-                             ng-show="form.cifOrVat.$error.required" data-translate="global.messages.validate.ciforvat.required">
-                          Your number is required.
-                      </p>
-                      <p class="help-block"
-                             ng-show="form.cifOrVat.$error.minlength" data-translate="global.messages.validate.ciforvat.minlength">
-                          Your number is required to be at least 8 characters.
-                      </p>
-                      <p class="help-block"
-                             ng-show="form.cifOrVat.$error.maxlength" data-translate="global.messages.validate.ciforvat.maxlength">
-                          Your number cannot be longer than 12 characters.
-                      </p>
-                  </div>
+                <div class="form-group register-accept" ng-show="vm.settingsAccount.userType != null">
+                	<input type="checkbox" id="acceptLegalConditions" name="acceptLegalConditions" ng-model="vm.accept" required />
+                	&nbsp;
+                	&nbsp;
+		            <span data-translate="register.form.acceptLegalConditions">I have read and accept the conditions</span>
                 </div>
-                -->
 
                 <button type="submit" ng-disabled="form.$invalid" class="btn btn-primary" data-translate="register.form.button">Register</button>
             </form>
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/register/register.state.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/register/register.state.js
index 48c362a96fc4d288d8a0276a456a98065b419ee8..ed3113300eab1e12fcebc3f5ce2ddb173cfc18a5 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/register/register.state.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/register/register.state.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/reset/finish/reset.finish.controller.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/reset/finish/reset.finish.controller.js
index 4d31e6cb20e12c2fbcec76ba0e7d12e5827b509e..0a03ca47ce838bdaccff7440abae5a2388434f46 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/reset/finish/reset.finish.controller.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/reset/finish/reset.finish.controller.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/reset/finish/reset.finish.state.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/reset/finish/reset.finish.state.js
index 45bd3c8f9ace2d67e9249d8065a545176a1e6544..47b33e1979f588952b2527043636bb15737e1325 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/reset/finish/reset.finish.state.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/reset/finish/reset.finish.state.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/reset/request/reset.request.controller.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/reset/request/reset.request.controller.js
index c0ec5e487213f0bb969ad5349be858d0506fc0c9..9e2ac5c27059ba64d57e6e1da9d2379420aa0ecd 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/reset/request/reset.request.controller.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/reset/request/reset.request.controller.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/reset/request/reset.request.state.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/reset/request/reset.request.state.js
index bbec60c936955e682dafbde8dace7fd7c25a17a8..16c127d78d45ce8b33d3da3122e01acba824ca47 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/reset/request/reset.request.state.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/reset/request/reset.request.state.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/settings/settings.controller.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/settings/settings.controller.js
index ca4ff61784c5c0c24e8ade696d2e2f7ca8f86a13..5f1b4487f4bb77c7dfd7ab8617408478cda7eb80 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/settings/settings.controller.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/settings/settings.controller.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/settings/settings.state.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/settings/settings.state.js
index 66e289716f93c105e2fc756bc4e9b3356b3fea71..a352595cff042b68a0c98b237e02abdab12bf18b 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/settings/settings.state.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/account/settings/settings.state.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/admin.state.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/admin.state.js
index 66e372e1cdf07e24c2af24948b5bcf2a3002b32b..b2d8c9554c45fed608a2cf1087898a7ea3000b12 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/admin.state.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/admin.state.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/audits/audits.controller.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/audits/audits.controller.js
index 4c20c4106b03bb9425e8a9b6fd0699bf268c1e6d..b7f1445af76dd50c90032b80c00137baa754223b 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/audits/audits.controller.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/audits/audits.controller.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/audits/audits.service.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/audits/audits.service.js
index 6259fb5229ac245e520891468c388cc5bf628083..e7d17db9dda2aa838a1812035c9d7dd777442e2c 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/audits/audits.service.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/audits/audits.service.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/audits/audits.state.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/audits/audits.state.js
index da86ceb6ff14894196e70b6248f9b1c7b014d784..426591d4b08708764b6715a4380b2f2bfc868263 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/audits/audits.state.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/audits/audits.state.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/configuration/configuration.controller.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/configuration/configuration.controller.js
index 9e1a1d130b9284508ff2bbd5a136849c02e91786..6779968ffcd542b4b79f1b79e7560eae0f9a547d 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/configuration/configuration.controller.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/configuration/configuration.controller.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/configuration/configuration.service.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/configuration/configuration.service.js
index 208b195733e8c0c3a58cef446e789eaae033c33c..0609fbced5a5a590b62e64f706a517e8506c3237 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/configuration/configuration.service.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/configuration/configuration.service.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/configuration/configuration.state.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/configuration/configuration.state.js
index 449de46cf9157a9f9a3c2bd5bc0801208bacff10..29db031c4a0746c22f3838a04fc16ccc5d203892 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/configuration/configuration.state.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/configuration/configuration.state.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/docs/docs.state.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/docs/docs.state.js
index b36391aa3d3985d010b88894c8e222cd9af4d31c..330dc33ccb9f0342b4afcdbf09812bb715c98133 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/docs/docs.state.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/docs/docs.state.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/gateway/gateway-routes.service.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/gateway/gateway-routes.service.js
index 05d02d00f7004d2cdbd16b1223f88c5c960af65a..868188b87920c52d753e26bcf928d88846da4fc4 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/gateway/gateway-routes.service.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/gateway/gateway-routes.service.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/gateway/gateway.controller.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/gateway/gateway.controller.js
index 15136fed3a36d8a3887fe7632044c85310c51ed0..0b4dce957cda6b67921864b0ca12de3d7b75a4ba 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/gateway/gateway.controller.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/gateway/gateway.controller.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/gateway/gateway.state.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/gateway/gateway.state.js
index f4036535382ff8a40f7340642c6123e655f8508b..3a05a3baa8316fb620e8199e308f30ceca047c8e 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/gateway/gateway.state.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/gateway/gateway.state.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/health/health.controller.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/health/health.controller.js
index 9ae196aa282a2b978a92a9a3e33450ae0b5196f6..ef52799c97b141042a07255637f014843c9ce20b 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/health/health.controller.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/health/health.controller.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/health/health.modal.controller.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/health/health.modal.controller.js
index 40d1c3ab0e080b3350bc527ba88b9563152d0149..63ace8710dac85d80d62c968d990a3100f028738 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/health/health.modal.controller.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/health/health.modal.controller.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/health/health.service.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/health/health.service.js
index 4fbfe623a6acd90d83efeb7079efe6f86c19a12a..57e4b55dba8853847310bb57e7fe3f8520421dbf 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/health/health.service.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/health/health.service.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/health/health.state.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/health/health.state.js
index 82d4f701b57a26cfb90f8780c24f06a11ba7c0c1..bf1121c02984847e02ba24bba4d3e88cf8fb3670 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/health/health.state.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/health/health.state.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/logs/logs.controller.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/logs/logs.controller.js
index 9d43a065db960311e7f4451a4a3d969332592f1a..fffc1e10e4830d34b7a643925219dfa7147ec5c0 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/logs/logs.controller.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/logs/logs.controller.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/logs/logs.service.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/logs/logs.service.js
index 4ce488b241aa15139aaeec06b384b7524949391e..7d1794f7f2e1b31db852760a9cb83b3d37dd5dd1 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/logs/logs.service.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/logs/logs.service.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/logs/logs.state.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/logs/logs.state.js
index 0e4bce12ffabe6ef35ef2b36745998dcc0240905..d8bb541fd3976c5f5d062b253a1a610c811d4ab1 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/logs/logs.state.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/logs/logs.state.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/metrics/metrics.controller.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/metrics/metrics.controller.js
index dddf529ff77be29fac3a7c6f1b658109fe15fdc5..110c1e7879e82e35d8f96cc9b0e8504e29408a47 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/metrics/metrics.controller.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/metrics/metrics.controller.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/metrics/metrics.modal.controller.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/metrics/metrics.modal.controller.js
index 0befc1b44cd012ab355c6ba00f622e4b93038a6d..c1beddbf6f9fb687911a909a4af54e9ada0830c0 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/metrics/metrics.modal.controller.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/metrics/metrics.modal.controller.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/metrics/metrics.service.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/metrics/metrics.service.js
index 0b5e7fdb3d1f3fafc26b3dc0d90e6abd4d62d68b..996c5a4956b593f19a54eaf2a8f8b029d69cda84 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/metrics/metrics.service.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/metrics/metrics.service.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/metrics/metrics.state.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/metrics/metrics.state.js
index dcfdb7ca99a95a025a1c4ef385ae63c453259c82..213220707cb4f283c39361ec34911dac56c241c3 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/metrics/metrics.state.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/metrics/metrics.state.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/tracker/tracker.controller.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/tracker/tracker.controller.js
index 7f61351dd83470202c231efa0577a1611c209493..cab061040acc3ef0a5e279607ccea8db7e82ab58 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/tracker/tracker.controller.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/tracker/tracker.controller.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/tracker/tracker.service.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/tracker/tracker.service.js
index c1df5d4f45eafae375e224f686374707977574ea..59f85198e1954ca6da99eb2be0a0ad9d61ab2ef1 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/tracker/tracker.service.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/tracker/tracker.service.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/tracker/tracker.state.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/tracker/tracker.state.js
index ff28d55bf8bfdbb29a40ba28771a7a4182ccd101..a173037e8d05540a85b64f5b0d1f982ac4dc62cb 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/tracker/tracker.state.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/tracker/tracker.state.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/user-management/user-management-delete-dialog.controller.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/user-management/user-management-delete-dialog.controller.js
index e43749a0d0849a5687152d0396ba02182a6733d5..f4fc4f29e01fbc5134cdc832cfb78e44ce61cad5 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/user-management/user-management-delete-dialog.controller.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/user-management/user-management-delete-dialog.controller.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/user-management/user-management-detail.controller.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/user-management/user-management-detail.controller.js
index e390af7ac9664cd47fab76fce4b3538edf4507c3..714fa8ab2c6be64c56cdf8fa73e90d86baa148e9 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/user-management/user-management-detail.controller.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/user-management/user-management-detail.controller.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/user-management/user-management-detail.html b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/user-management/user-management-detail.html
index 4622cb78b67ea86822952fa27b7ad83e3c2b753f..6758aac24136e938ad92cb7ee921b75e852e6145 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/user-management/user-management-detail.html
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/user-management/user-management-detail.html
@@ -30,7 +30,12 @@
 	        <dd>{{vm.user.usersGroup}}</dd>
 	        -->
 	        <dt><span data-translate="userManagement.usertype">User type</span></dt>
-	        <dd>{{vm.user.userType}}</dd>
+	        <dd>
+	        	<span ng-show="vm.user.userType == 'csp'" data-translate="userManagement.csp">Cloud Service Provider</span>
+	        	<span ng-show="vm.user.userType == 'dev'" data-translate="userManagement.dev">Developer / User</span>
+	        	<span ng-show="vm.user.userType == 'lgl'" data-translate="userManagement.lgl">Legal expert</span>
+	        	<span ng-show="vm.user.userType == 'adm'" data-translate="userManagement.adm">Administrator</span>
+	        </dd>
 	        <!--
 	        <dt><span data-translate="userManagement.creditcardtype">Credit card type</span></dt>
 	        <dd>{{vm.user.creditCardType}}</dd>
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/user-management/user-management-dialog.controller.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/user-management/user-management-dialog.controller.js
index 5752130b18be4e1d37ab8d5de288e3bbd1665fc9..d984726da203f5a1ced0bdaa6bd27426e2b172a3 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/user-management/user-management-dialog.controller.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/user-management/user-management-dialog.controller.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/user-management/user-management-dialog.html b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/user-management/user-management-dialog.html
index 99cd83b401db29bd47acb74a3fd93dbb3ae071f5..bd53684793afb77b612c79415cfc17b3c0f47c2e 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/user-management/user-management-dialog.html
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/user-management/user-management-dialog.html
@@ -123,19 +123,19 @@
 		          <div class="radio">
 		              <label>
 		                  <input type="radio" name="userType" value="csp" ng-model="vm.user.userType" ng-required="true" ng-click="changeUserType()">
-                          Cloud Service Provider
+                          <span data-translate="userManagement.csp">Cloud Service Provider</span>
 		              </label>
 		          </div>
 		          <div class="radio">
 		              <label>
 		                  <input type="radio" name="userType" value="dev" ng-model="vm.user.userType" ng-required="true" ng-click="changeUserType()">
-		                  Developer / User
+		                  <span data-translate="userManagement.dev">Developer / User</span>
 		              </label>
 		          </div>
 		          <div class="radio">
 		              <label>
 		                  <input type="radio" name="userType" value="lgl" ng-model="vm.user.userType" ng-required="true" ng-click="changeUserType()">
-		                  Legal expert
+		                  <span data-translate="userManagement.lgl">Legal expert</span>
 		              </label>
 		          </div>
 		        </div>
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/user-management/user-management.controller.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/user-management/user-management.controller.js
index 67f4a3f2d45821ed24e9c5518c2355391a8f9874..32fd3b3839ff51bf9b6f93c730091f49f7a44fb6 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/user-management/user-management.controller.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/user-management/user-management.controller.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/user-management/user-management.html b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/user-management/user-management.html
index 43ed6b5182cac34028b25a330b1d29259d4820ba..67f791e4a97d3e551ee89822515d7d08c2ffc8eb 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/user-management/user-management.html
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/user-management/user-management.html
@@ -57,13 +57,14 @@
 	                        </button>
 	                        <button type="submit"
 	                                ui-sref="user-management.edit({login:user.login})"
-	                                class="btn btn-primary btn-sm">
+	                                class="btn btn-primary btn-sm"
+	                                ng-show="user.userType != 'adm' || vm.currentAccount.login == user.login">
 	                            <span class="glyphicon glyphicon-pencil"></span>
 	                            <span class="hidden-xs hidden-sm" data-translate="entity.action.edit"></span>
 	                        </button>
 	                        <button type="submit"
 	                                ui-sref="user-management.delete({login:user.login})"
-	                                class="btn btn-danger btn-sm" ng-disabled="vm.currentAccount.login==user.login">
+	                                class="btn btn-danger btn-sm" ng-show="user.userType != 'adm'">
 	                            <span class="glyphicon glyphicon-remove-circle"></span>
 	                            <span class="hidden-xs hidden-sm" data-translate="entity.action.delete"></span>
 	                        </button>
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/user-management/user-management.state.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/user-management/user-management.state.js
index ed8c2e2deeded9003185910637da089976af843d..cf777e99af6828f06b4c7260df3ac684fde7cf33 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/user-management/user-management.state.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/admin/user-management/user-management.state.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/app.module.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/app.module.js
index bf3b1381ffb464b7eea38768ca94e8034471ee2e..ddf3631967e9fdcff69696606e9885532da6ec7f 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/app.module.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/app.module.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/app.state.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/app.state.js
index ceea7ef372699cf0e851b118e1ec85b9d6137da0..654f6de3d5b21df778fba9723e4f2585b66caf6d 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/app.state.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/app.state.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/config/alert.config.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/config/alert.config.js
index 709668baa9329f6df8be6b0187f09281a00a308c..7f01f7ff0c146272f8bb1cff28d423ae774757fc 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/config/alert.config.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/config/alert.config.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/config/compile.config.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/config/compile.config.js
index b53291eb4500d5e5d46abecce2bd2de17117a0dd..da2da9a4ddef87fbdf4abd19e1c095637b429339 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/config/compile.config.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/config/compile.config.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/config/http.config.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/config/http.config.js
index 78ffec619e9b08b2b3ada078ca6bb642a4ba60fd..4d0cd3ff8fa063d5d4926d384d443695b1e81603 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/config/http.config.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/config/http.config.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/config/localstorage.config.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/config/localstorage.config.js
index cd3716b5097e214c6f35198b4ad7baf27e2c0a4d..c43a0c4080185f4374b0fb0220291b36a72781b7 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/config/localstorage.config.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/config/localstorage.config.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/config/translation-storage.provider.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/config/translation-storage.provider.js
index dc61552dc3886d4db2766478448ff6d22251d8e3..768a4598932732b5224ff160af338166f17cf7d4 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/config/translation-storage.provider.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/config/translation-storage.provider.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/config/translation.config.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/config/translation.config.js
index a1f0103ab7053c95418cd0073fa0aaf9cc73d321..77c3945ae1c1ad74189f0bac8f8f799d9a721b11 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/config/translation.config.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/config/translation.config.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/config/uib-pager.config.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/config/uib-pager.config.js
index c1a7406c3ad64e5a1b1dbc275a518a5c113f666b..a54deaa325ab55c8ca9a93ce8e3c5b8b981ba551 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/config/uib-pager.config.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/config/uib-pager.config.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/config/uib-pagination.config.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/config/uib-pagination.config.js
index 4dfb9cd29c2351ef04e16e6a5296e14c0dc405d8..4e98283aabf2b510c2cdae639f6d6d588dc14762 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/config/uib-pagination.config.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/config/uib-pagination.config.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/handlers/state.handler.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/handlers/state.handler.js
index db2a6feb405b92bd738c4b59bb8cff80dfcb06f4..023c2dc4c0bf83f4cd3796ee4b42b746ccedd3f5 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/handlers/state.handler.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/handlers/state.handler.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/handlers/translation.handler.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/handlers/translation.handler.js
index 9c529f202638dbffbcbcadba73631b9e53535d5f..6febcea51c358ea0d2cd3ad22bf81387824f4aec 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/handlers/translation.handler.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/handlers/translation.handler.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/interceptor/auth-expired.interceptor.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/interceptor/auth-expired.interceptor.js
index 7272e27935db4fee2f592188cac000daaf29af1d..708f132f5fa377f1a9a11a057ee321e12f3c43d4 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/interceptor/auth-expired.interceptor.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/interceptor/auth-expired.interceptor.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/interceptor/auth.interceptor.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/interceptor/auth.interceptor.js
index c8a6803b45f2b64458421edf31f6510b228d05a6..a185774d14338400fcac34e1c365cb2bc0e0e20f 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/interceptor/auth.interceptor.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/interceptor/auth.interceptor.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/interceptor/errorhandler.interceptor.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/interceptor/errorhandler.interceptor.js
index d9a89f040778843daef80d7271ddbfc6c36b6815..fefad00dbfffcf1920a5f6a8807dcd957cdf41f5 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/interceptor/errorhandler.interceptor.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/interceptor/errorhandler.interceptor.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/interceptor/notification.interceptor.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/interceptor/notification.interceptor.js
index 2eb062dfb6b653b19aae6ca574a0046d28422850..ed336810f10efcf6c838735cc8b8887a1b8139ba 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/interceptor/notification.interceptor.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/blocks/interceptor/notification.interceptor.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/alert/alert-error.directive.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/alert/alert-error.directive.js
index 600d894dde443e0c12e67fb35a4a3578c48ae373..7a586bfd516bc669df5048b8997b37f1dfc9ccd1 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/alert/alert-error.directive.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/alert/alert-error.directive.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/alert/alert.directive.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/alert/alert.directive.js
index c9268f940fa60044877096a6d9c754fcb3d06e60..206950fb6657d6fd3b781eaf7ee733a3cc0d4cfc 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/alert/alert.directive.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/alert/alert.directive.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/alert/alert.service.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/alert/alert.service.js
index e6c22d46b011e37f43756b547e37614660e9d14c..5ee1f74bda7b2ad11e6df83e14e258fed03e7bd6 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/alert/alert.service.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/alert/alert.service.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/form/maxbytes.directive.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/form/maxbytes.directive.js
index f54df790dbe67abcec244cb04d5b1fa8779f3606..265d6666040b8626fb363239c01cee0ba86b06af 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/form/maxbytes.directive.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/form/maxbytes.directive.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/form/minbytes.directive.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/form/minbytes.directive.js
index 47c7eb1dd1afb0bf77921dac4e7a18d9b2120221..5c279a261757c727091ebe23a3f76e778508b4fd 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/form/minbytes.directive.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/form/minbytes.directive.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/form/pagination.constants.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/form/pagination.constants.js
index 943617dfc04e73e48e44398de6f18df363080a7f..5d0451b536d3bde0e8cb9b05e6b3ecd2e9b59511 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/form/pagination.constants.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/form/pagination.constants.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/form/show-validation.directive.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/form/show-validation.directive.js
index a14cd138e14c738b83ab3aa99519928ab4fbd6bc..81056a56a20559911e1041a63707b8dbcea49ffe 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/form/show-validation.directive.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/form/show-validation.directive.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/language/language.constants.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/language/language.constants.js
index c23ec0bbe648a88f1c0bd91a5466e59500abed8d..9a6be7a3768234c5d4985abba0cb7753d515b42a 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/language/language.constants.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/language/language.constants.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/language/language.controller.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/language/language.controller.js
index fc600e9bf2fbe1e43feec5d745f517d9531207d3..dc1bed75878a3ee41b166e639e81774b8df7ce65 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/language/language.controller.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/language/language.controller.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/language/language.filter.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/language/language.filter.js
index 39b265306094249ed01418e702a7db600e993244..db81cf9fbe962ba449d750fe7e62a29c17c3ac2c 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/language/language.filter.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/language/language.filter.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/language/language.service.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/language/language.service.js
index b3a7f5b86df2b11b8aa9864d6099b10518916858..47f3277e40384db536ac4e0aae2ebeb9b558a4cb 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/language/language.service.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/language/language.service.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/login/login.controller.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/login/login.controller.js
index 1259caa7a19d6ff9120187cd4fbca7d9a1394501..d4399716027102a96a812a4d9ed6ee23d5a0f972 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/login/login.controller.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/login/login.controller.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/login/login.service.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/login/login.service.js
index 15a9addd5931f26d3022a65d2888a004696dc994..4604b19ce4f55eaf122431bf48d56a1f42a45fd7 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/login/login.service.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/login/login.service.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/register/register-creditcard.constants.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/register/register-creditcard.constants.js
index d5e9b125190592689f7dcc69ad2da6d7f4435dca..da38dd6aa609e62aa08626e28f34d17fb58442cd 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/register/register-creditcard.constants.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/register/register-creditcard.constants.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/register/register-creditcard.controller.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/register/register-creditcard.controller.js
index 97d29a0453227e377cb5b80d2ca0570396e32e6d..60bb305e6c58534db5dd901fc72a27442cf7bee0 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/register/register-creditcard.controller.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/register/register-creditcard.controller.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/register/register-creditcard.filter.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/register/register-creditcard.filter.js
index f7293962eb0be3c2ce4534adf899084125e2eb51..8be86d29a82c38902b0dd689debb68a379bd44b0 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/register/register-creditcard.filter.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/register/register-creditcard.filter.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/register/register-creditcard.service.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/register/register-creditcard.service.js
index 3e241e3eba9a9f3dace04ba1c471fa205c035fe5..ab678b5c56cd71ec331bc7356acfa9c0c9c3bff6 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/register/register-creditcard.service.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/register/register-creditcard.service.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/util/base64.service.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/util/base64.service.js
index d83d59e1fc2885e2cae2e0e89ff281620d566377..0dfe6eb1ff846005fb132985d4ac5a8358fec1c3 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/util/base64.service.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/util/base64.service.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/util/capitalize.filter.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/util/capitalize.filter.js
index efe9402b010689dbad5809a46ac414c7ad4c0e46..35d318edbab2942734ccdd0d379c33e1f1457e32 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/util/capitalize.filter.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/util/capitalize.filter.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/util/data-util.service.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/util/data-util.service.js
index 7366cca411c53980c4600a3f484feb4bf9334a40..77ec466aeca710ab6395cd56bba2250b2ca268f0 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/util/data-util.service.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/util/data-util.service.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/util/date-util.service.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/util/date-util.service.js
index 49f8475140866e520eccd030e83bc81c30db31be..bdd8b8829d8941fc5bd16b02192611c7b092bd70 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/util/date-util.service.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/util/date-util.service.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/util/jhi-item-count.directive.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/util/jhi-item-count.directive.js
index ae98dc774368e332e4dd4fcfa856957ab52800b8..a3fee6ea58273cb4545f16f1c1417b091c6d02d0 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/util/jhi-item-count.directive.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/util/jhi-item-count.directive.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/util/pagination-util.service.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/util/pagination-util.service.js
index a59c37ef0f8327956bd91d1858df9bf843b1a14b..196f1c3ff2c0fc37bce1ee2a53bef55e81e53df2 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/util/pagination-util.service.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/util/pagination-util.service.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/util/parse-links.service.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/util/parse-links.service.js
index 774255441588cc8459877d71fe3ed16be483d567..d292fc27dc772423b1edca0f459c9bb22628c4c9 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/util/parse-links.service.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/util/parse-links.service.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/util/sort-by.directive.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/util/sort-by.directive.js
index 17e042c9f88dca0f47811df89e38b6e570f190d1..082ffd6eee578ae6917bd4de63f2cff0b2761c81 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/util/sort-by.directive.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/util/sort-by.directive.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/util/sort.directive.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/util/sort.directive.js
index 0585c84cf860daa0902e204547f3a697225cce48..249d25406ec0695fff35e3aced0d54b18bfd095f 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/util/sort.directive.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/util/sort.directive.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/util/truncate-characters.filter.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/util/truncate-characters.filter.js
index a0d5c8530a081615c3e748ccebe34ec8bf4bce98..8ad2076e662c1a1e8fae29744c354f1945656250 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/util/truncate-characters.filter.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/util/truncate-characters.filter.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/util/truncate-words.filter.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/util/truncate-words.filter.js
index 49ff9bb633d0b272dd0409eb6634379c0df093eb..b16cc29506d1179ebad9f9dfe0579b7e818078ec 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/util/truncate-words.filter.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/components/util/truncate-words.filter.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/definition/definition.service.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/definition/definition.service.js
index 57a5f8f4f35d03944bf9e057c38b626b4cecc7e2..5d4fa7498b82a1fbd8c6fd6e8ac7cf0b41a2f3fe 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/definition/definition.service.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/definition/definition.service.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/entity.state.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/entity.state.js
index 29420dc0c3f1659444afb2839eabf488bc13937e..e867e54e316553cca835ccd97f8c92bf879d0ec8 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/entity.state.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/entity.state.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service-class/service-class.controller.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service-class/service-class.controller.js
index b49e505c9f396da06ae2884ff034a3824f046837..e29bbb080586e68d0b601c170173ed2827e2b572 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service-class/service-class.controller.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service-class/service-class.controller.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service-class/service-class.service.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service-class/service-class.service.js
index c022c55b14f37d777c92e52450efaec1df6c2fcb..03ac99c07b818e86cbbd934c316a604cc3cf6ed5 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service-class/service-class.service.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service-class/service-class.service.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service-class/service-class.state.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service-class/service-class.state.js
index e3bbece71cfb253d55e388b938e74fc13849b0f8..2329d98cbab539e5c9c7f9f32b963b08f6d0c5c4 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service-class/service-class.state.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service-class/service-class.state.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service-delete-dialog.controller.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service-delete-dialog.controller.js
index 911123aa14cd689e7f44e52193a71ad6bb0503a7..8387bc14ccbb59641145575653a0575b1a493d46 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service-delete-dialog.controller.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service-delete-dialog.controller.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service-detail-popup.controller.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service-detail-popup.controller.js
new file mode 100644
index 0000000000000000000000000000000000000000..bff7723428fca566f9e98cd6ad70c9e032eaf117
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service-detail-popup.controller.js
@@ -0,0 +1,293 @@
+/*******************************************************************************
+ * Copyright (c) 2017 Tecnalia.
+ * 
+ * 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.
+ * 
+ * The code has been contributed over a stub generated with the JHipster
+ * Application generator http://www.jhipster.tech/.
+ * 
+ * Contributors (in alphabetical order):
+ * 
+ * Alberto Molinuevo					Tecnalia
+ * Gorka Benguria                       Tecnalia
+ * Iñaki Etxaniz                        Tecnalia
+ * Juncal Alonso                        Tecnalia
+ * Leire Orue-Echevarria                Tecnalia
+ * Maria Jose Lopez                     Tecnalia
+ * Marisa Escalante                     Tecnalia
+ * Alberto Molinuevo					Tecnalia
+ * 
+ * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+ ******************************************************************************/
+(function() {
+    'use strict';
+
+    angular
+        .module('acsmiApp')
+        .controller('ServiceDetailPopupController', ServiceDetailPopupController);
+
+    ServiceDetailPopupController.$inject = ['$timeout', '$scope', '$uibModalInstance', '$rootScope', '$state', '$stateParams', 'entity', 'Definition', 'Service', 'Legal'];
+
+    function ServiceDetailPopupController($timeout, $scope, $uibModalInstance, $rootScope, $state, $stateParams, entity, Definition, Service, Legal) {
+        var vm = this;
+        
+        vm.clear = clear;
+        
+        loadData();
+        
+        
+        // Carga servicio y definiciones
+        function loadData() {
+        	Service.get({id: entity},
+        		function success(result) {
+        			vm.service = result
+        			Definition.query({},
+        	        	function success(result) {
+        					vm.definitions = result;
+        					loadChecklists();
+        					loadServiceLegalAssessment();
+        				},
+        				function error(error) {}
+        	        );
+				},
+				function error(error) {}
+        		);
+        }
+        
+        
+        // Cargar las checklists
+        function loadChecklists() {
+        	vm.checklists = new Array();
+        	for (var i = 0;i < vm.service.attributes.length;i++) {
+        		if (vm.service.attributes[i].ischecklist && vm.service.attributes[i].checklistvalue != null) {
+        			var arrayValues = vm.service.attributes[i].checklistvalue.split(",");
+        			if (arrayValues != null && arrayValues.length > 0) {
+        				vm.checklists[vm.service.attributes[i].typeid] = new Array();
+        				for (var j = 0;j < arrayValues.length;j++) {
+        					for (var k = 0;k < vm.definitions.length;k++) {
+        						if (arrayValues[j] == vm.definitions[k].code) {
+        							vm.checklists[vm.service.attributes[i].typeid].push(vm.definitions[k].value);
+            						break;
+        						}
+        					}
+            			}
+        			}
+        		}
+        	}
+        }
+        
+        
+        // Carga la información legal
+        function loadServiceLegalAssessment() {
+        	Legal.serviceAssessments({serviceid: entity}, function(result) {
+    			if (result != null) {
+    				vm.assessment = result;
+    			}
+    		});
+        }
+        
+        
+        // Decodifica el fichero PDF de base de datos
+        $scope.decode = function(data) {
+        	var base64str = data;
+			var binary = atob(base64str.replace(/\s/g, ''));
+			var len = binary.length;
+			var buffer = new ArrayBuffer(len);
+			var view = new Uint8Array(buffer);
+			for (var i = 0;i < len;i++) {
+			    view[i] = binary.charCodeAt(i);
+			}
+			return view;
+        }
+        
+        
+        // Descarga de documentos
+        $scope.download = function(index) {
+        	var urlCreator = window.URL || window.webkitURL || window.mozURL || window.msURL;
+    		if (urlCreator) {
+    			var hiddenElement = document.createElement("a");
+    			var blob = null;
+    			if (index == 0) {
+    				blob = new Blob( [$scope.decode(vm.service.firstcontract)], { type: "application/pdf" });
+    	        	hiddenElement.download = vm.service.servicename + "_Overarching_services_contract.pdf";
+            	} else if (index == 1) {
+            		blob = new Blob( [$scope.decode(vm.service.secondcontract)], { type: "application/pdf" });
+            		hiddenElement.download = vm.service.servicename + "_SLA_contract.pdf";
+            	} else if (index == 2) {
+            		blob = new Blob( [$scope.decode(vm.service.thirdcontract)], { type: "application/pdf" });
+            		hiddenElement.download = vm.service.servicename + "_Data_processing_contract.pdf";
+            	}
+    			var url = urlCreator.createObjectURL(blob);
+    			hiddenElement.href = url;
+    			hiddenElement.target = "_blank";
+    	        hiddenElement.style = "display: none";
+    	        document.body.appendChild(hiddenElement);
+    	        hiddenElement.click();
+    	        
+    	        setTimeout(function() {window.URL.revokeObjectURL(url), 100});
+    		}
+        }
+        
+        
+        // Exportar a PDF
+        $scope.exportPDF = function() {
+        	Service.pdf({serviceid: vm.service.id},
+    	        	function success(result) {
+    		        	var urlCreator = window.URL || window.webkitURL || window.mozURL || window.msURL;
+    		        	if (urlCreator) {
+    		        		var hiddenElement = document.createElement("a");
+    		        		var blob = new Blob([$scope.decode(result.data)], { type: "application/pdf" });
+    		        		var url = urlCreator.createObjectURL(blob);
+    		        		hiddenElement.href = url;
+    		        		hiddenElement.download = vm.service.servicename + ".pdf";
+    		        		hiddenElement.target = "_blank";
+    		                hiddenElement.style = "display: none";
+    		                document.body.appendChild(hiddenElement);
+    		                hiddenElement.click();
+    		        	        
+    		                setTimeout(function() {window.URL.revokeObjectURL(url), 100});
+    		        	}
+    		        },
+    	        	function error(error) {}
+    	        );
+        }
+        
+        
+        // Exportar a CSV
+        $scope.exportCSV = function() {
+        	var universalBOM = "\uFEFF";
+        	var csv = vm.service.servicename + "  (" + vm.service.serviceclassname + ")\n\n";
+        	
+        	csv += "Common attributes:\n";
+        	for (var i = 0;i < vm.service.attributes.length;i++) {
+        		if (vm.service.attributes[i].iscommon && vm.service.attributes[i].human != null) {
+        			csv += "," + vm.service.attributes[i].name + "," + vm.service.attributes[i].human;
+        			csv += "\n";
+        		}
+        	}
+        	
+        	csv += "\nFR (Functional Requirements) attributes:\n";
+        	for (var i = 0;i < vm.service.attributes.length;i++) {
+        		if (vm.service.attributes[i].isfunctionalrequirement && vm.service.attributes[i].value != null) {
+        			csv += "," + vm.service.attributes[i].name + "," +vm.service.attributes[i].value;
+        			if (vm.service.attributes[i].unitvalue != null) {
+        				csv += " (" + vm.service.attributes[i].unitvalue + ")";
+        			} else if (vm.service.attributes[i].units != null) {
+        				csv += " (" + vm.service.attributes[i].units + ")";
+        			}
+        			csv += "\n";
+        		}
+        	}
+        	
+        	csv += "\nNFR (Non Functional Requirements) attributes:\n";
+        	for (var i = 0;i < vm.service.attributes.length;i++) {
+        		if (!vm.service.attributes[i].iscommon && !vm.service.attributes[i].isfunctionalrequirement && vm.service.attributes[i].value != null) {
+        			csv += "," + vm.service.attributes[i].name + "," + (vm.service.attributes[i].human != null ? vm.service.attributes[i].human : vm.service.attributes[i].value);
+        			if (vm.service.attributes[i].unitvalue != null) {
+        				csv += " (" + vm.service.attributes[i].unitvalue + ")";
+        			} else if (vm.service.attributes[i].units != null) {
+        				csv += " (" + vm.service.attributes[i].units + ")";
+        			}
+        			csv += "\n";
+        		}
+        	}
+        	
+        	if (vm.service.incidences != null && vm.service.incidences.length > 0) {
+        		csv += "\nIncidences in the last 30 days:\n";
+        		for (var i = 0;i < vm.service.incidences.length;i++) {
+        			var now = new Date();
+        			var date = new Date(vm.service.incidences[i].timestamp);
+        			var diff = Math.abs(now.getTime() - date.getTime());
+        			diff = diff / (1000 * 60 * 60 * 24);
+        			if (diff <= 30) {
+        				csv += ",[ " + formatTimestampToDate(date) + " ]," + vm.service.incidences[i].detail + "\n";
+        			}
+        		}
+        	}
+        	
+        	if (vm.assessment != null && vm.assessment.controls != null) {
+	        	csv += "\nLegal information provided by the CSP:\n";
+        		for (var i = 0;i < vm.assessment.controls.length;i++) {
+        			if (vm.assessment.controls[i].issimplecontrol) {
+        				csv += ",\"" + vm.assessment.controls[i].question + "\"";
+        				if (vm.assessment.controls[i].answers != null) {
+        					for (var j = 0;j < vm.assessment.controls[i].answers.length;j++) {
+        						if (vm.assessment.controls[i].score == vm.assessment.controls[i].answers[j].score) {
+        							csv += "," + vm.assessment.controls[i].answers[j].answer + "\n";
+        							break;
+        						}
+        					}
+        				}
+        			}
+        		}
+        		
+        		csv += "\nLegal information provided by the Legal Expert:\n";
+        		for (var i = 0;i < vm.assessment.controls.length;i++) {
+        			if (!vm.assessment.controls[i].issimplecontrol) {
+        				csv += ",\"" + vm.assessment.controls[i].question + "\"";
+        				if (vm.assessment.controls[i].answers != null) {
+        					for (var j = 0;j < vm.assessment.controls[i].answers.length;j++) {
+        						if (vm.assessment.controls[i].score == vm.assessment.controls[i].answers[j].score) {
+        							csv += ",\"" + vm.assessment.controls[i].answers[j].answer + "\"\n";
+        							csv += ",,Justification: ";
+        							if (vm.assessment.controls[i].justification != null) {
+        								csv += "\"" + vm.assessment.controls[i].justification + "\"";
+        							}
+        							csv += "\n";
+        							break;
+        						}
+        					}
+        				}
+        			}
+        		}
+        	}
+        	
+            var hiddenElement = document.createElement("a");
+            document.body.appendChild(hiddenElement);
+            hiddenElement.href = "data:text/csv;charset=utf-8," + encodeURIComponent(universalBOM + csv);
+            hiddenElement.target = "_blank";
+            hiddenElement.download = vm.service.servicename + ".csv";
+            hiddenElement.style = "display: none";
+            hiddenElement.click();
+        }
+        
+        
+        // Format a timestamp to a date
+        function formatTimestampToDate(timestamp) {
+            var year = timestamp.getFullYear();
+            var month = (timestamp.getMonth() + 1) < 10 ? "0" + (timestamp.getMonth()) : (timestamp.getMonth() + 1);
+            var day = timestamp.getDate() < 10 ? "0" + timestamp.getDate() : timestamp.getDate();
+            var hours = timestamp.getHours() < 10 ? "0" + timestamp.getHours() : timestamp.getHours();
+            var minutes = timestamp.getMinutes() < 10 ? "0" + timestamp.getMinutes() : timestamp.getMinutes();
+            var seconds = timestamp.getSeconds() < 10 ? "0" + timestamp.getSeconds() : timestamp.getSeconds();
+            return (year + "-" + month + "-" + day + "  " + hours + ":" + minutes + ":" + seconds);
+        }
+        
+        
+        var unsubscribe = $rootScope.$on('acsmiApp:serviceUpdate', function(event, result) {
+            vm.service = result;
+        });
+        $scope.$on('$destroy', unsubscribe);
+        
+        
+        
+        $timeout(function() {
+            angular.element('.form-group:eq(1)>input').focus();
+        });
+
+        
+        function clear() {
+            $uibModalInstance.dismiss('cancel');
+        }
+    }
+})();
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service-detail-popup.html b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service-detail-popup.html
new file mode 100644
index 0000000000000000000000000000000000000000..915b75efc82bf0e52b7bb63760df45006bde767d
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service-detail-popup.html
@@ -0,0 +1,162 @@
+<div class="card-popup">
+	<div class="card">
+		<div class="card-header" data-background-color="primary">
+			<button type="button" class="close" data-dismiss="modal" aria-hidden="true" ng-click="vm.clear()">&times;</button>
+       		<h4 class="title">{{vm.service.servicename}}</h4>
+		</div>
+		<div class="card-content">
+	        <jhi-alert-error></jhi-alert-error>
+	        
+	        <table style="width: 100%;">
+				<tr style="line-height: 28px;">
+	    			<td style="width: 5%;">&nbsp;</td>
+	    			<td style="width: 17%;">
+	    				<strong><span data-translate="acsmiApp.service.serviceClass">Service Class</span></strong>
+	    			</td>
+	    			<td style="width: 1%;">&nbsp;</td>
+	    			<td style="width: 21%;">
+	    				<span ng-show="vm.service.deleteddate == null">{{vm.service.serviceclassname}}</span>
+	    				<span ng-show="vm.service.deleteddate != null" class="registry-deleted">{{vm.service.serviceclassname}}</span>
+		    		</td>
+		    		<td style="width: 15%;">&nbsp;</td>
+		    		<td style="width: 17%; text-align: right;">
+		    			<strong><span data-translate="acsmiApp.service.status">Status</span></strong>
+		    		</td>
+		    		<td style="width: 5%;">&nbsp;</td>
+		    		<td style="width: 21%;">
+		    			<span class="status-active" data-translate="acsmiApp.service.active" ng-show="vm.service.deleteddate == null">Active</span>
+		    			<span class="status-inactive" data-translate="acsmiApp.service.inactive" ng-show="vm.service.deleteddate != null">Inactive</span>
+		    		</td>
+		    	</tr>
+		    </table>
+		    
+		    <table style="width: 100%; margin: 12px 0 12px 0;">
+				<tr style="line-height: 28px;">
+	    			<td style="width: 5%;">&nbsp;</td>
+	    			<td style="width: 5%;">
+	    				<img class="pdf-upload-image" src="/content/images/pdf_small.png" ng-show="vm.service.firstcontract != null" ng-click="download(0)">
+	    				<img src="/content/images/pdf_small_disabled.png" ng-show="vm.service.firstcontract == null">
+	    			</td>
+	    			<td style="width: 1%;">&nbsp;</td>
+	    			<td style="width: 89%;">
+	    				<span data-translate="acsmiApp.service.servicesContract">The overarching services contract (+ volume order)</span>
+	    			</td>
+	    		</tr>
+	    		<tr style="line-height: 28px;">
+	    			<td style="width: 5%;">&nbsp;</td>
+	    			<td style="width: 5%;">
+	    				<img class="pdf-upload-image" src="/content/images/pdf_small.png" ng-show="vm.service.secondcontract != null" ng-click="download(1)">
+	    				<img src="/content/images/pdf_small_disabled.png" ng-show="vm.service.secondcontract == null">
+	    			</td>
+	    			<td style="width: 1%;">&nbsp;</td>
+	    			<td style="width: 89%;">
+	    				<span data-translate="acsmiApp.service.sla">The SLA for the specific service</span>
+	    			</td>
+	    		</tr>
+	    		<tr style="line-height: 28px;">
+	    			<td style="width: 5%;">&nbsp;</td>
+	    			<td style="width: 5%;">
+	    				<img class="pdf-upload-image" src="/content/images/pdf_small.png" ng-show="vm.service.thirdcontract != null" ng-click="download(2)">
+	    				<img src="/content/images/pdf_small_disabled.png" ng-show="vm.service.thirdcontract == null">
+	    			</td>
+	    			<td style="width: 1%;">&nbsp;</td>
+	    			<td style="width: 89%;">
+	    				<span data-translate="acsmiApp.service.dataProcessing">The data processing agreement (which might be integrated in other contract)</span>
+	    			</td>
+	    		</tr>
+	    	</table>
+	    	
+	    	<br />
+		    
+		    <table style="width: 100%;">
+		    	<tr>
+		    		<td style="width: 2%;">&nbsp;</td>
+		    		<td class="info-table-header-small" style="width: 21%;">
+		    			<span data-translate="acsmiApp.service.commonAttributes">Common attributes</span>
+		    		</td>
+		    		<td style="width: 2%;">&nbsp;</td>
+		    		<td class="info-table-header-small" style="width: 37%;">
+		    			<span data-translate="acsmiApp.service.frAttributes">FR (Functional Requirements) Attributes</span>
+		    		</td>
+		    		<td style="width: 2%;">&nbsp;</td>
+		    		<td class="info-table-header-small" style="width: 36%;">
+		    			<span data-translate="acsmiApp.service.nfrAttributes">NFR (Non Functional Requirements) Attributes</span>
+		    		</td>
+		    		<td style="width: 2%;">&nbsp;</td>
+		    	</tr>
+		    	<tr style="line-height: 28px;">
+		    		<td style="width: 2%;">&nbsp;</td>
+		    		<td class="info-table-content" style="width: 21%;">
+		    			<div ng-repeat="attr in vm.service.attributes" ng-show="attr.iscommon && attr.value != null && attr.value.length > 0">
+		    				<span class="info-table-content-title">{{attr.name}}:</span>
+		    				<span ng-show="{{attr.human == null}}">{{attr.value}}</span>
+		        			<span ng-show="{{attr.human != null}}">{{attr.human}}</span>
+		    			</div>
+		    		</td>
+		    		<td style="width: 2%;">&nbsp;</td>
+		    		<td class="info-table-content" style="width: 37%;">
+		    			<div ng-repeat="attr in vm.service.attributes" ng-show="attr.isfunctionalrequirement && attr.value != null && attr.value.length > 0">
+		    				<span class="info-table-content-title">{{attr.name}}:</span>
+		    				<span ng-show="{{attr.human == null}}">{{attr.value}}</span>
+		        			<span ng-show="{{attr.human != null}}">{{attr.human}}</span>
+		        			<span class="unit" ng-show="{{attr.unitvalue != null}}">({{attr.unitvalue}})</span>
+		    			</div>
+		    		</td>
+		    		<td style="width: 2%;">&nbsp;</td>
+		    		<td class="info-table-content" style="width: 36%;">
+		    			<div ng-repeat="attr in vm.service.attributes" ng-show="!attr.iscommon && !attr.isfunctionalrequirement && attr.value != null && attr.value.length > 0">
+		    				<span class="info-table-content-title">{{attr.name}}:</span>
+		    				<span ng-show="{{attr.human == null}}">{{attr.value}}</span>
+		        			<span ng-show="{{attr.human != null}}">{{attr.human}}</span>
+		        			<span class="unit" ng-show="{{attr.unitvalue != null}}">({{attr.unitvalue}})</span>
+		        			<div class="checklist" ng-show="{{attr.ischecklist}}">
+		        				<div ng-repeat="enum in vm.checklists[attr.typeid] track by $index">
+		        					<span class="glyphicon glyphicon-tag"></span>&nbsp;{{enum}}
+		        				</div>
+		        			</div>
+		    			</div>
+		    		</td>
+		    		<td style="width: 2%;">&nbsp;</td>
+		    	</tr>
+	    	</table>
+	    	
+	    	<br />
+    	
+	    	<table style="width: 100%;" ng-show="vm.service.incidences.length > 0">
+		    	<tr>
+		    		<td style="width: 2%;">&nbsp;</td>
+		    		<td class="info-table-header-small" style="width: 96%;">
+		    			<span data-translate="acsmiApp.service.incidences">Incidences</span>
+		    		</td>
+		    		<td style="width: 2%;">&nbsp;</td>
+		    	</tr>
+		    	<tr style="line-height: 28px;">
+		    		<td style="width: 2%;">&nbsp;</td>
+		    		<td class="info-table-content" style="width: 98%;">
+		    			<div style="max-height: 112px!important; overflow-y: auto;">
+			    			<div ng-repeat="incidence in vm.service.incidences">
+			    				<span class="info-alert-timestamp">[ {{incidence.timestamp | date:'yyyy-MM-dd HH:mm:ss'}} ]</span>
+			    				&nbsp;&nbsp;&nbsp;&nbsp;
+			    				<span>{{incidence.detail}}</span>
+			    			</div>
+		    			</div>
+		    		</td>
+		    	</tr>
+		    </table>
+		    
+		    <div class="export-div" has-any-authority="ROLE_ADMIN, ROLE_CSP">
+				<span data-translate="acsmiApp.service.export">Export to: </span>
+				<img src="content/images/pdf16x16.png" class="export-image" ng-click="exportPDF()" />
+				<img src="content/images/csv16x16.png" class="export-image" ng-click="exportCSV()" />
+			</div>
+			
+			<br /><br has-any-authority="ROLE_ADMIN, ROLE_CSP" />
+
+	    </div>
+	</div>
+	<div class="modal-footer">
+        <button type="button" class="btn btn-default" data-dismiss="modal" ng-click="vm.clear()">
+            <span class="glyphicon glyphicon-ban-circle"></span>&nbsp;<span data-translate="entity.action.close">Close</span>
+        </button>
+    </div>
+</div>
\ No newline at end of file
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service-detail.controller.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service-detail.controller.js
index 63ab123efcda47fbcd9670fa6bd1a651a085f0f2..23315a045960fd0289ad3401aa909cf65cd170cf 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service-detail.controller.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service-detail.controller.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
@@ -35,9 +36,9 @@
         .module('acsmiApp')
         .controller('ServiceDetailController', ServiceDetailController);
 
-    ServiceDetailController.$inject = ['$scope', '$rootScope', '$state', '$stateParams', 'previousState', 'entity', 'Definition'];
+    ServiceDetailController.$inject = ['$scope', '$rootScope', '$state', '$stateParams', 'previousState', 'entity', 'Definition', 'Legal', 'Service'];
 
-    function ServiceDetailController($scope, $rootScope, $state, $stateParams, previousState, entity, Definition) {
+    function ServiceDetailController($scope, $rootScope, $state, $stateParams, previousState, entity, Definition, Legal, Service) {
         var vm = this;
 
         vm.service = entity;
@@ -53,6 +54,7 @@
 	        		function success(result) {
 						vm.definitions = result;
 						loadChecklists();
+						loadServiceLegalAssessment();
 					},
 					function error(error) {}
 	        );
@@ -81,6 +83,16 @@
         }
         
         
+        // Carga la información legal
+        function loadServiceLegalAssessment() {
+        	Legal.serviceAssessments({serviceid: entity.id}, function(result) {
+    			if (result != null) {
+    				vm.assessment = result;
+    			}
+    		});
+        }
+        
+        
         // Decodifica el fichero PDF de base de datos
         $scope.decode = function(data) {
         	var base64str = data;
@@ -123,6 +135,141 @@
         }
         
         
+        // Exportar a PDF
+        $scope.exportPDF = function() {
+        	Service.pdf({serviceid: vm.service.id},
+    	        	function success(result) {
+    		        	var urlCreator = window.URL || window.webkitURL || window.mozURL || window.msURL;
+    		        	if (urlCreator) {
+    		        		var hiddenElement = document.createElement("a");
+    		        		var blob = new Blob([$scope.decode(result.data)], { type: "application/pdf" });
+    		        		var url = urlCreator.createObjectURL(blob);
+    		        		hiddenElement.href = url;
+    		        		hiddenElement.download = vm.service.servicename + ".pdf";
+    		        		hiddenElement.target = "_blank";
+    		                hiddenElement.style = "display: none";
+    		                document.body.appendChild(hiddenElement);
+    		                hiddenElement.click();
+    		        	        
+    		                setTimeout(function() {window.URL.revokeObjectURL(url), 100});
+    		        	}
+    		        },
+    	        	function error(error) {}
+    	        );
+        }
+        
+        
+        // Exportar a CSV
+        $scope.exportCSV = function() {
+        	var universalBOM = "\uFEFF";
+        	var csv = vm.service.servicename + "  (" + vm.service.serviceclassname + ")\n\n";
+        	
+        	csv += "Common attributes:\n";
+        	for (var i = 0;i < vm.service.attributes.length;i++) {
+        		if (vm.service.attributes[i].iscommon && vm.service.attributes[i].human != null) {
+        			csv += "," + vm.service.attributes[i].name + "," + vm.service.attributes[i].human;
+        			csv += "\n";
+        		}
+        	}
+        	
+        	csv += "\nFR (Functional Requirements) attributes:\n";
+        	for (var i = 0;i < vm.service.attributes.length;i++) {
+        		if (vm.service.attributes[i].isfunctionalrequirement && vm.service.attributes[i].value != null) {
+        			csv += "," + vm.service.attributes[i].name + "," +vm.service.attributes[i].value;
+        			if (vm.service.attributes[i].unitvalue != null) {
+        				csv += " (" + vm.service.attributes[i].unitvalue + ")";
+        			} else if (vm.service.attributes[i].units != null) {
+        				csv += " (" + vm.service.attributes[i].units + ")";
+        			}
+        			csv += "\n";
+        		}
+        	}
+        	
+        	csv += "\nNFR (Non Functional Requirements) attributes:\n";
+        	for (var i = 0;i < vm.service.attributes.length;i++) {
+        		if (!vm.service.attributes[i].iscommon && !vm.service.attributes[i].isfunctionalrequirement && vm.service.attributes[i].value != null) {
+        			csv += "," + vm.service.attributes[i].name + "," + (vm.service.attributes[i].human != null ? vm.service.attributes[i].human : vm.service.attributes[i].value);
+        			if (vm.service.attributes[i].unitvalue != null) {
+        				csv += " (" + vm.service.attributes[i].unitvalue + ")";
+        			} else if (vm.service.attributes[i].units != null) {
+        				csv += " (" + vm.service.attributes[i].units + ")";
+        			}
+        			csv += "\n";
+        		}
+        	}
+        	
+        	if (vm.service.incidences != null && vm.service.incidences.length > 0) {
+        		csv += "\nIncidences in the last 30 days:\n";
+        		for (var i = 0;i < vm.service.incidences.length;i++) {
+        			var now = new Date();
+        			var date = new Date(vm.service.incidences[i].timestamp);
+        			var diff = Math.abs(now.getTime() - date.getTime());
+        			diff = diff / (1000 * 60 * 60 * 24);
+        			if (diff <= 30) {
+        				csv += ",[ " + formatTimestampToDate(date) + " ]," + vm.service.incidences[i].detail + "\n";
+        			}
+        		}
+        	}
+        	
+        	if (vm.assessment != null && vm.assessment.controls != null) {
+	        	csv += "\nLegal information provided by the CSP:\n";
+        		for (var i = 0;i < vm.assessment.controls.length;i++) {
+        			if (vm.assessment.controls[i].issimplecontrol) {
+        				csv += ",\"" + vm.assessment.controls[i].question + "\"";
+        				if (vm.assessment.controls[i].answers != null) {
+        					for (var j = 0;j < vm.assessment.controls[i].answers.length;j++) {
+        						if (vm.assessment.controls[i].score == vm.assessment.controls[i].answers[j].score) {
+        							csv += "," + vm.assessment.controls[i].answers[j].answer + "\n";
+        							break;
+        						}
+        					}
+        				}
+        			}
+        		}
+        		
+        		csv += "\nLegal information provided by the Legal Expert:\n";
+        		for (var i = 0;i < vm.assessment.controls.length;i++) {
+        			if (!vm.assessment.controls[i].issimplecontrol) {
+        				csv += ",\"" + vm.assessment.controls[i].question + "\"";
+        				if (vm.assessment.controls[i].answers != null) {
+        					for (var j = 0;j < vm.assessment.controls[i].answers.length;j++) {
+        						if (vm.assessment.controls[i].score == vm.assessment.controls[i].answers[j].score) {
+        							csv += ",\"" + vm.assessment.controls[i].answers[j].answer + "\"\n";
+        							csv += ",,Justification: ";
+        							if (vm.assessment.controls[i].justification != null) {
+        								csv += "\"" + vm.assessment.controls[i].justification + "\"";
+        							}
+        							csv += "\n";
+        							break;
+        						}
+        					}
+        				}
+        			}
+        		}
+        	}
+        	
+            var hiddenElement = document.createElement("a");
+            document.body.appendChild(hiddenElement);
+            hiddenElement.href = "data:text/csv;charset=utf-8," + encodeURIComponent(universalBOM + csv);
+            hiddenElement.target = "_blank";
+            hiddenElement.download = vm.service.servicename + ".csv";
+            hiddenElement.style = "display: none";
+            hiddenElement.click();
+        }
+        
+        
+        // Format a timestamp to a date
+        function formatTimestampToDate(timestamp) {
+            var year = timestamp.getFullYear();
+            var month = (timestamp.getMonth() + 1) < 10 ? "0" + (timestamp.getMonth()) : (timestamp.getMonth() + 1);
+            var day = timestamp.getDate() < 10 ? "0" + timestamp.getDate() : timestamp.getDate();
+            var hours = timestamp.getHours() < 10 ? "0" + timestamp.getHours() : timestamp.getHours();
+            var minutes = timestamp.getMinutes() < 10 ? "0" + timestamp.getMinutes() : timestamp.getMinutes();
+            var seconds = timestamp.getSeconds() < 10 ? "0" + timestamp.getSeconds() : timestamp.getSeconds();
+            return (year + "-" + month + "-" + day + "  " + hours + ":" + minutes + ":" + seconds);
+        }
+        
+        
         var unsubscribe = $rootScope.$on('acsmiApp:serviceUpdate', function(event, result) {
             vm.service = result;
         });
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service-detail.html b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service-detail.html
index 207e5175db55f4701f1b42a11283c7af52e4254a..e22bdd9310ebceed3aaacbebef93955eb98684f3 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service-detail.html
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service-detail.html
@@ -132,10 +132,12 @@
 	    	<tr style="line-height: 28px;">
 	    		<td style="width: 2%;">&nbsp;</td>
 	    		<td class="info-table-content" style="width: 98%;">
-	    			<div ng-repeat="incidence in vm.service.incidences">
-	    				<span class="info-alert-timestamp">[ {{incidence.timestamp | date:'yyyy-MM-dd HH:mm:ss'}} ]</span>
-	    				&nbsp;&nbsp;&nbsp;&nbsp;
-	    				<span>{{incidence.detail}}</span>
+	    			<div style="max-height: 112px!important; overflow-y: auto;">
+		    			<div ng-repeat="incidence in vm.service.incidences">
+		    				<span class="info-alert-timestamp">[ {{incidence.timestamp | date:'yyyy-MM-dd HH:mm:ss'}} ]</span>
+		    				&nbsp;&nbsp;&nbsp;&nbsp;
+		    				<span>{{incidence.detail}}</span>
+		    			</div>
 	    			</div>
 	    		</td>
 	    	</tr>
@@ -152,5 +154,10 @@
 	        <span class="glyphicon glyphicon-pencil"></span>
 	        <span class="hidden-sm-down" data-translate="entity.action.edit"> Edit</span>
 	    </button>
+	    <div class="export-div" has-any-authority="ROLE_ADMIN, ROLE_CSP">
+			<span data-translate="acsmiApp.service.export">Export to: </span>
+			<img src="content/images/pdf16x16.png" class="export-image" ng-click="exportPDF()" />
+			<img src="content/images/csv16x16.png" class="export-image" ng-click="exportCSV()" />
+		</div>
 	</div>
 </div>
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service-dialog.controller.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service-dialog.controller.js
index a6584988b83e1649d8f18e6988b2a7a51dc2c1fb..6aa390b39c50e0c2bc440628a0f3ce7443e306a2 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service-dialog.controller.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service-dialog.controller.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
@@ -35,9 +36,9 @@
         .module('acsmiApp')
         .controller('ServiceDialogController', ServiceDialogController);
 
-    ServiceDialogController.$inject = ['$timeout', '$scope', '$uibModalInstance', 'entity', 'Service', 'ServiceClass', 'Definition', 'Principal'];
+    ServiceDialogController.$inject = ['$timeout', '$scope', '$uibModalInstance', 'entity', 'Service', 'ServiceClass', 'Definition', 'Principal', 'Legal'];
 
-    function ServiceDialogController($timeout, $scope, $uibModalInstance, entity, Service, ServiceClass, Definition, Principal) {
+    function ServiceDialogController($timeout, $scope, $uibModalInstance, entity, Service, ServiceClass, Definition, Principal, Legal) {
     	
     	var vm = this;
 
@@ -92,10 +93,32 @@
 	        				$scope.loadAttributes();
 	        				$scope.loadChildren(null, true, true, true);
 	        			}
+						loadLegalAssessment();
 					},
 					function error(error) {}
 	        );
-        }        
+        }
+        
+        
+        // Carga el formulario legal
+        function loadLegalAssessment() {
+        	if (vm.service.id != null && vm.service.id != 0) {
+        		Legal.serviceAssessments({serviceid: vm.service.id},
+        				function success(result) {
+        					vm.form = result;
+        				},
+        				function error(error) {}
+        		);
+        	} else {
+        		Legal.assessments(
+    	        		function success(result) {
+    						vm.form = result;
+    					},
+    					function error(error) {}
+    	        );
+        	}
+        }
+        
         
         // Reindexa los atributos de un servicio
         $scope.reindexAttributes = function() {
@@ -139,34 +162,6 @@
 				}
         	}
         }
-        
-        
-        // Carga el array de atributos checklist
-        $scope.loadChecklistArray = function() {
-        	for (var i = 0;i < vm.definitions.length;i++) {
-        		if (vm.definitions[i].ischeckoption) {
-        			// Inicializar array de checklists
-        			if (vm.checklists[vm.definitions[i].typeid] == null) {
-        				vm.checklists[vm.definitions[i].typeid] = new Array();
-					}
-        			
-        			// Insertar valores en el array general
-        			vm.checklists[vm.definitions[i].typeid].push({code: vm.definitions[i].code,
-        				value: vm.definitions[i].value, typeid: vm.definitions[i].typeid });
-        			
-        			// Asignar valores del atributo
-        			if (vm.service.attributes[vm.definitions[i].typeid] != null) {
-        				if (vm.service.attributes[vm.definitions[i].typeid].arraychecklist == null) {
-        					vm.service.attributes[vm.definitions[i].typeid].arraychecklist = new Array();
-        				}
-            			if (vm.service.id != null && vm.service.attributes[vm.definitions[i].typeid].checklistvalue != null) {
-            				vm.service.attributes[vm.definitions[i].typeid].arraychecklist =
-            					convertStringToArray(vm.service.attributes[vm.definitions[i].typeid].checklistvalue, ",");
-               			}
-        			}
-        		}
-        	}
-        }
        	
         
        	// Prepara la carga de la lista de atributos hijos y checklists
@@ -220,6 +215,11 @@
         
         // Carga la lista de atributos
         $scope.loadAttributes = function() {
+        	vm.endorseFRInvalidValue = null;
+			vm.endorseFRInvalidValueField = null;
+			vm.endorseNFRInvalidValue = null;
+			vm.endorseNFRInvalidValueField = null;
+			
         	for (var i = 0;i < vm.serviceClasses.length;i++) {
         		if (vm.serviceClasses[i].id == vm.selectedclassid) {
         			vm.selectedclass = vm.serviceClasses[i];
@@ -229,7 +229,6 @@
         	
         	// Inicializar arrays
         	vm.children = new Array(new Array());
-        	vm.checklists = new Array(new Array());
         	
         	// Cargar variables
         	if (vm.service.id == null) {
@@ -238,9 +237,6 @@
         		
             	vm.service.attributes = new Array();
         	}
-        	
-        	// Cargar array de checklists
-        	$scope.loadChecklistArray();
 
         	// Cargar arrays de atributos
         	$scope.loadAttributesArray(vm.selectedclass.commonattributes);
@@ -259,48 +255,40 @@
         }
         
         
-        // Realiza el tratamiento de chequeado de una opción en una checklist
-        $scope.checkOption = function(typeid, value) {
-        	if (vm.service.attributes[typeid].arraychecklist == null) {
-        		vm.service.attributes[typeid].arraychecklist = new Array();
-        		vm.service.attributes[typeid].arraychecklist.push(value);
-        	} else {
-        		var index = vm.service.attributes[typeid].arraychecklist.indexOf(value);
-        		if (index == -1) {
-                	vm.service.attributes[typeid].arraychecklist.push(value);
-                } else {
-                	vm.service.attributes[typeid].arraychecklist.splice(index, 1);
-                }
-        	}
-        	
-        	// En el alta, es necesario asignar un valor a la propiedad "value" para validar el formulario
-        	if (vm.service.id == null) {
-        		vm.service.attributes[typeid].value = value;
-        	}
-        }
-        
-        
         // Valida el formato de un valor de un campo
         $scope.validateEndorseInput = function(units, typeid, isFR) {
-        	if (units != null && units.length > 0 && vm.service.attributes[typeid].value != null && vm.service.attributes[typeid].value.length > 0) {
+        	var isnanrule = true;
+        	var evalrule = true;
+        	if (vm.service.attributes[typeid].value != null && vm.service.attributes[typeid].value.length > 0) {
+        		// Ajustar valor del atributo
         		vm.service.attributes[typeid].value = vm.service.attributes[typeid].value.replace(",", ".");
-        		if (isFR) {
-        			vm.endorseFRInvalidValue = null;
-        			vm.endorseFRInvalidValueField = null;
-            		if (isNaN(vm.service.attributes[typeid].value)) {
+        		
+        		// Evaluar regla numérica
+        		if (units != null && units.length > 0 && isNaN(vm.service.attributes[typeid].value)) {
+        			isnanrule = false;
+        		}
+        		
+        		// Evaluar regla de validación
+            	if (vm.service.attributes[typeid].evalrule != null && vm.service.attributes[typeid].evalrule.length > 0) {
+            		var variable = vm.service.attributes[typeid].value;
+            		evalrule = eval(vm.service.attributes[typeid].evalrule);
+            	}
+            	
+            	if (!isnanrule || !evalrule) {
+            		if (isFR) {
             			vm.endorseFRInvalidValueField = vm.service.attributes[typeid].name;
             			vm.endorseFRInvalidValue = vm.service.attributes[typeid].value;
-            			vm.service.attributes[typeid].value = null;
-            		}
-        		} else {
-        			vm.endorseNFRInvalidValue = null;
-        			vm.endorseNFRInvalidValueField = null;
-            		if (isNaN(vm.service.attributes[typeid].value)) {
+            		} else {
             			vm.endorseNFRInvalidValueField = vm.service.attributes[typeid].name;
             			vm.endorseNFRInvalidValue = vm.service.attributes[typeid].value;
-            			vm.service.attributes[typeid].value = null;
             		}
-        		}
+            		vm.service.attributes[typeid].value = null;
+            	} else {
+            		vm.endorseFRInvalidValue = null;
+        			vm.endorseFRInvalidValueField = null;
+        			vm.endorseNFRInvalidValue = null;
+        			vm.endorseNFRInvalidValueField = null;
+            	}
         	} else {
         		vm.endorseFRInvalidValue = null;
     			vm.endorseFRInvalidValueField = null;
@@ -350,7 +338,6 @@
             			} else if (index == 2) {
             				vm.service.thirdcontract = btoa(e.target.result.toString());
             			}
-            			//$scope.$apply();
             			$scope.$digest();
             		};
             		reader.readAsBinaryString(elem.files[0]);
@@ -371,7 +358,7 @@
         	} else if (index == 2) {
         		vm.service.thirdcontract = null;
         	}
-        	$scope.$apply();
+        	//$scope.$apply();
         }
         
         
@@ -451,17 +438,6 @@
         			if (vm.service.id == null) {
         				delete vm.service.attributes[i].arrayunits;
         			}
-        			
-        			// Evaluar array auxiliar de checklists
-        			if (vm.service.attributes[i].ischecklist) {
-        				vm.service.attributes[i].checklistvalue =
-        					convertArrayToString(vm.service.attributes[i].arraychecklist, ",");
-            			
-            			// Aplicar regla
-            			var variable = vm.service.attributes[i].arraychecklist.length;
-            			vm.service.attributes[i].value = eval(vm.service.attributes[i].checklistevalrule);
-            			delete vm.service.attributes[i].arraychecklist;
-            		}
         		}
         	}
         	
@@ -470,11 +446,23 @@
         		vm.service.attributes[2].value = null;
         	}
         	
+        	// Transformar "legal assessment"
+        	for (var i = 0;i < vm.form.controls.length;i++) {
+        		vm.form.controls[i].createdDate = null;
+        		vm.form.controls[i].lastModifiedDate = null;
+        		vm.form.controls[i].deletedDate = null;
+        		for (var j = 0;j < vm.form.controls[i].answers.length;j++) {
+        			vm.form.controls[i].answers[j].createdDate = null;
+            		vm.form.controls[i].answers[j].lastModifiedDate = null;
+            		vm.form.controls[i].answers[j].deletedDate = null;
+        		}
+        	}
+        	
         	// Guardar
             if (vm.service.id != null) {
-            	Service.update({attributes: vm.service.attributes}, vm.service, onSaveServiceSuccess, onSaveServiceError);
+            	Service.update({attributes: vm.service.attributes, controls: vm.form.controls}, vm.service, onSaveServiceSuccess, onSaveServiceError);
             } else {
-            	Service.save({attributes: vm.service.attributes}, vm.service, onSaveServiceSuccess, onSaveServiceError);
+            	Service.save({attributes: vm.service.attributes, controls: vm.form.controls}, vm.service, onSaveServiceSuccess, onSaveServiceError);
             }
         }
 
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service-dialog.html b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service-dialog.html
index 7a892397eb8b03e3360b56143ae03fc657d62d30..7dac278a1961515e900435d842247b8695c79938 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service-dialog.html
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service-dialog.html
@@ -109,6 +109,9 @@
 		        				<td style="width: 100%;" colspan="4">&nbsp;</td>
 		        			</tr>
 		        		</table>
+		        		<div class="legal-tooltip" ng-show="vm.service.id != null">
+		        			<span data-translate="acsmiApp.service.legalNote">Adding, deleting or modifying a contract implies a new revision of the legal level.</span>
+		        		</div>
 		        	</div>
 		        </div>
 		        
@@ -134,6 +137,7 @@
 			        			<td style="width: 32%;">
 			        				<label class="control-label" for="fieldZone">{{ vm.selectedclass.commonattributes[1].name }}</label>
 							        <select class="form-control" id="fieldZone" name="fieldZone" ng-model="vm.service.attributes[vm.selectedclass.commonattributes[1].typeid].value" ng-show="vm.selectedclass.commonattributes[1].isenumeration" ng-disabled="vm.service.attributes[vm.selectedclass.commonattributes[0].typeid].value == null">
+										<option value=""></option>
 										<option ng-repeat="enum in vm.children[vm.selectedclass.commonattributes[0].childid] track by $index" value="{{ enum.code }}">
 											{{ enum.value }}
 										</option>
@@ -167,10 +171,11 @@
 				</div>
 		        <div ng-show="((vm.service.id == null || vm.service.id == 0) && vm.selectedclass.functionalattributes != null && vm.selectedclass.functionalattributes.length > 0) || (vm.service.id != null && vm.service.id != 0 && vm.selectedclass.functionalattributes != null && vm.selectedclass.functionalattributes.length > 0)" ng-repeat="srv in vm.selectedclass.functionalattributes | orderBy: 'weight'">
 		        	<div class="form-group">
-       					<label class="control-label" for="fieldTyp_{{ srv.id }}">{{ srv.name }} <span ng-show="srv.arrayunits.length == 1">({{ srv.arrayunits[0] }})</span> <span ng-show="{{ srv.ismandatory }}">*</span></label>
+       					<label class="control-label" for="fieldTyp_{{ srv.typeid }}">{{ srv.name }} <span ng-show="srv.arrayunits.length == 1">({{ srv.arrayunits[0] }})</span> <span ng-show="{{ srv.ismandatory || srv.isform }}">*</span></label>
        					<div ng-if="srv.arrayunits.length <= 1">
-       						<input type="text" class="form-control" name="{{ 'fieldTyp_' + srv.id }}" id="{{ 'fieldTyp_' + srv.id }}" ng-model="vm.service.attributes[srv.typeid].value" ng-required="{{ srv.ismandatory }}" ng-show="!srv.isenumeration" ng-blur="validateEndorseInput(srv.units, srv.typeid, true)" />
-			       			<select class="form-control" id="{{ 'fieldTyp_' + srv.id }}" name="{{ 'fieldTyp_' + srv.id }}" ng-model="vm.service.attributes[srv.typeid].value" ng-required="{{ srv.ismandatory }}" ng-show="srv.isenumeration && !srv.ischecklist" ng-change="loadChildren(srv.typeid, false, true, false)">
+       						<input type="text" class="form-control" name="{{ 'fieldTyp_' + srv.typeid }}" id="{{ 'fieldTyp_' + srv.typeid }}" ng-model="vm.service.attributes[srv.typeid].value" ng-required="{{ srv.ismandatory }}" ng-show="!srv.isenumeration" ng-blur="validateEndorseInput(srv.units, srv.typeid, true)" />
+			       			<select class="form-control" id="{{ 'fieldTyp_' + srv.typeid }}" name="{{ 'fieldTyp_' + srv.typeid }}" ng-model="vm.service.attributes[srv.typeid].value" ng-required="{{ srv.ismandatory }}" ng-show="srv.isenumeration && !srv.isform" ng-change="loadChildren(srv.typeid, false, true, false)">
+								<option ng-show="{{ !srv.ismandatory }}" value=""></option>
 								<option ng-repeat="enum in vm.definitions" ng-show="enum.typeid == srv.typeid && srv.parentid == null" value="{{ enum.code }}">
 									{{ enum.value }}
 								</option>
@@ -178,29 +183,38 @@
 									{{ enum.value }}
 								</option>
 							</select>
-							<div class="checklist" ng-show="srv.ischecklist">
-								<div ng-repeat="enum in vm.checklists[srv.typeid] track by $index">
-  									<input type="checkbox" id="{{ 'fieldCheck_' + srv.id }}" name="{{ 'fieldCheck_' + srv.id }}"
-  										ng-model="null_model"
-  										ng-click="checkOption(srv.typeid, enum.code)"
-  										ng-checked="vm.service.attributes[srv.typeid].arraychecklist.indexOf(enum.code) > -1"
-  										ng-required="srv.ismandatory && vm.service.attributes[srv.typeid].arraychecklist.length == 0"
-  										value="{{ enum.code }}">&nbsp;&nbsp;&nbsp;{{ enum.value }}
-  								</div>
-  							</div>
+							<div class="checklist" ng-if="srv.isform">
+								<div ng-repeat="control in vm.form.controls track by $index" ng-init="controlIndex = $index">
+									<div ng-if="control.issimplecontrol">
+										<div class="legal-form-control">{{control.question}}</div>
+										<div ng-repeat="answer in control.answers track by $index" ng-init="answerIndex = $index">
+											<table class="legal-answer">
+												<tr>
+													<td style="width: 3%; text-align: center;">
+														<input name="rad_{{control.id}}" type="radio" ng-model="control.score" ng-value="{{answerIndex}}" ng-checked="answerIndex == control.score" />
+													</td>
+													<td style="width: 96%;">{{answer.answer}}</td>
+													<td style="width: 1%;">&nbsp;</td>
+												</tr>
+											</table>
+		  								</div>
+		  							</div>
+	  							</div>
+	  						</div>
        					</div>
        					<div ng-if="srv.arrayunits.length > 1" style="width: 100%;">
-       						<div style="width: 10%; float: right;">
-       							<select class="form-control" id="{{ 'fieldUnit_' + srv.id }}" name="{{ 'fieldUnit_' + srv.id }}" ng-model="vm.service.attributes[srv.typeid].unitvalue" ng-required="{{ srv.ismandatory }}">
+       						<div style="width: 17%; float: right;">
+       							<select class="form-control" id="{{ 'fieldUnit_' + srv.typeid }}" name="{{ 'fieldUnit_' + srv.typeid }}" ng-model="vm.service.attributes[srv.typeid].unitvalue" ng-required="{{ srv.ismandatory }}">
        								<option ng-repeat="enum in srv.arrayunits" value="{{ enum }}">
 										{{ enum }}
 									</option>
        							</select>
        						</div>
        						<div style="width: 1%; float: right;">&nbsp;</div>
-       						<div style="width: 89%;">
-       							<input type="text" class="form-control" name="{{ 'fieldTyp_' + srv.id }}" id="{{ 'fieldTyp_' + srv.id }}" ng-model="vm.service.attributes[srv.typeid].value" ng-required="{{ srv.ismandatory }}" ng-show="!srv.isenumeration" ng-change="vm.service.attributes[srv.typeid].value == null ? vm.service.attributes[srv.typeid].unitvalue = null : vm.service.attributes[srv.typeid].unitvalue" ng-blur="validateEndorseInput(srv.units, srv.typeid, true)" />
-       							<select class="form-control" id="{{ 'fieldTyp_' + srv.id }}" name="{{ 'fieldTyp_' + srv.id }}" ng-model="vm.service.attributes[srv.typeid].value" ng-required="{{ srv.ismandatory }}" ng-show="srv.isenumeration && !srv.ischecklist" ng-change="loadChildren(srv.typeid, false, true, false)">
+       						<div style="width: 82%;">
+       							<input type="text" class="form-control" name="{{ 'fieldTyp_' + srv.typeid }}" id="{{ 'fieldTyp_' + srv.typeid }}" ng-model="vm.service.attributes[srv.typeid].value" ng-required="{{ srv.ismandatory }}" ng-show="!srv.isenumeration && !srv.isform" ng-change="vm.service.attributes[srv.typeid].value == null ? vm.service.attributes[srv.typeid].unitvalue = null : vm.service.attributes[srv.typeid].unitvalue" ng-blur="validateEndorseInput(srv.units, srv.typeid, true)" />
+       							<select class="form-control" id="{{ 'fieldTyp_' + srv.typeid }}" name="{{ 'fieldTyp_' + srv.typeid }}" ng-model="vm.service.attributes[srv.typeid].value" ng-required="{{ srv.ismandatory }}" ng-show="srv.isenumeration && !srv.isform" ng-change="loadChildren(srv.typeid, false, true, false)">
+									<option ng-show="{{ !srv.ismandatory }}" value=""></option>
 									<option ng-repeat="enum in vm.definitions" ng-show="enum.typeid == srv.typeid && srv.parentid == null" value="{{ enum.code }}">
 										{{ enum.value }}
 									</option>
@@ -208,14 +222,22 @@
 										{{ enum.value }}
 									</option>
 								</select>
-								<div class="checklist" ng-show="srv.ischecklist">
-									<div ng-repeat="enum in vm.checklists[srv.typeid] track by $index">
-	  									<input type="checkbox" id="{{ 'fieldCheck_' + srv.id }}" name="{{ 'fieldCheck_' + srv.id }}"
-	  										ng-model="null_model"
-	  										ng-click="checkOption(srv.typeid, enum.code)"
-	  										ng-checked="vm.service.attributes[srv.typeid].arraychecklist.indexOf(enum.code) > -1"
-	  										ng-required="srv.ismandatory && vm.service.attributes[srv.typeid].arraychecklist.length == 0"
-	  										value="{{ enum.code }}">&nbsp;&nbsp;&nbsp;{{ enum.value }}
+								<div class="checklist" ng-if="srv.isform">
+									<div ng-repeat="control in vm.form.controls track by $index" ng-init="controlIndex = $index">
+										<div ng-if="control.issimplecontrol">
+		  									<div class="legal-form-control">{{control.question}}</div>
+		  									<div ng-repeat="answer in control.answers track by $index" ng-init="answerIndex = $index">
+		  										<table class="legal-answer">
+													<tr>
+														<td style="width: 3%; text-align: center;">
+															<input name="rad_{{control.id}}" type="radio" ng-model="control.score" ng-value="answer.score" />
+														</td>
+														<td style="width: 96%;">{{answer.answer}}</td>
+														<td style="width: 1%;">&nbsp;</td>
+													</tr>
+												</table>
+		  									</div>
+		  								</div>
 	  								</div>
 	  							</div>
        						</div>
@@ -237,10 +259,11 @@
 				</div>
 		        <div ng-show="((vm.service.id == null || vm.service.id == 0) && vm.selectedclass.nonfunctionalattributes != null && vm.selectedclass.nonfunctionalattributes.length > 0) || (vm.service.id != null && vm.service.id != 0 && vm.selectedclass.nonfunctionalattributes != null && vm.selectedclass.nonfunctionalattributes.length > 0)" ng-repeat="srv in vm.selectedclass.nonfunctionalattributes | orderBy: 'weight'">
 		        	<div class="form-group">
-       					<label class="control-label" for="fieldTyp_{{ srv.id }}">{{ srv.name }} <span ng-show="srv.arrayunits.length == 1">({{ srv.arrayunits[0] }})</span> <span ng-show="{{ srv.ismandatory }}">*</span></label>
+       					<label class="control-label" for="fieldTyp_{{ srv.typeid }}">{{ srv.name }} <span ng-show="srv.arrayunits.length == 1">({{ srv.arrayunits[0] }})</span> <span ng-show="{{ srv.ismandatory || srv.isform }}">*</span></label>
        					<div ng-if="srv.arrayunits.length <= 1">
-       						<input type="text" class="form-control" name="{{ 'fieldTyp_' + srv.id }}" id="{{ 'fieldTyp_' + srv.id }}" ng-model="vm.service.attributes[srv.typeid].value" ng-required="{{ srv.ismandatory }}" ng-show="!srv.isenumeration" ng-blur="validateEndorseInput(srv.units, srv.typeid, false)" />
-			       			<select class="form-control" id="{{ 'fieldTyp_' + srv.id }}" name="{{ 'fieldTyp_' + srv.id }}" ng-model="vm.service.attributes[srv.typeid].value" ng-required="{{ srv.ismandatory }}" ng-show="srv.isenumeration && !srv.ischecklist" ng-change="loadChildren(srv.typeid, false, true, false)">
+       						<input type="text" class="form-control" name="{{ 'fieldTyp_' + srv.typeid }}" id="{{ 'fieldTyp_' + srv.typeid }}" ng-model="vm.service.attributes[srv.typeid].value" ng-required="{{ srv.ismandatory }}" ng-show="!srv.isenumeration && !srv.isform" ng-blur="validateEndorseInput(srv.units, srv.typeid, false)" />
+			       			<select class="form-control" id="{{ 'fieldTyp_' + srv.typeid }}" name="{{ 'fieldTyp_' + srv.typeid }}" ng-model="vm.service.attributes[srv.typeid].value" ng-required="{{ srv.ismandatory }}" ng-show="srv.isenumeration && !srv.isform" ng-change="loadChildren(srv.typeid, false, true, false)">
+								<option ng-show="{{ !srv.ismandatory }}" value=""></option>
 								<option ng-repeat="enum in vm.definitions" ng-show="enum.typeid == srv.typeid && srv.parentid == null" value="{{ enum.code }}">
 									{{ enum.value }}
 								</option>
@@ -248,29 +271,38 @@
 									{{ enum.value }}
 								</option>
 							</select>
-  							<div class="checklist" ng-show="srv.ischecklist">
-								<div ng-repeat="enum in vm.checklists[srv.typeid] track by $index">
-  									<input type="checkbox" id="{{ 'fieldCheck_' + srv.id }}" name="{{ 'fieldCheck_' + srv.id }}"
-  										ng-model="null_model"
-  										ng-click="checkOption(srv.typeid, enum.code)"
-  										ng-checked="vm.service.attributes[srv.typeid].arraychecklist.indexOf(enum.code) > -1"
-  										ng-required="srv.ismandatory && vm.service.attributes[srv.typeid].arraychecklist.length == 0"
-  										value="{{ enum.code }}">&nbsp;&nbsp;&nbsp;{{ enum.value }}
+  							<div class="checklist" ng-if="srv.isform">
+								<div ng-repeat="control in vm.form.controls track by $index" ng-init="controlIndex = $index">
+									<div ng-if="control.issimplecontrol">
+	  									<div class="legal-form-control">{{control.question}}</div>
+	  									<div ng-repeat="answer in control.answers track by $index" ng-init="answerIndex = $index">
+	  										<table class="legal-answer">
+												<tr>
+													<td style="width: 3%; text-align: center;">
+														<input name="rad_{{control.id}}" type="radio" ng-model="control.score" ng-value="answer.score" />
+													</td>
+													<td style="width: 96%;">{{answer.answer}}</td>
+													<td style="width: 1%;">&nbsp;</td>
+												</tr>
+											</table>
+	  									</div>
+	  								</div>
   								</div>
   							</div>
        					</div>
        					<div ng-if="srv.arrayunits.length > 1" style="width: 100%;">
-       						<div style="width: 10%; float: right;">
-       							<select class="form-control" id="{{ 'fieldUnit_' + srv.id }}" name="{{ 'fieldUnit_' + srv.id }}" ng-model="vm.service.attributes[srv.typeid].unitvalue" ng-required="{{ srv.ismandatory }}">
+       						<div style="width: 17%; float: right;">
+       							<select class="form-control" id="{{ 'fieldUnit_' + srv.typeid }}" name="{{ 'fieldUnit_' + srv.typeid }}" ng-model="vm.service.attributes[srv.typeid].unitvalue" ng-required="{{ srv.ismandatory }}">
        								<option ng-repeat="enum in srv.arrayunits" value="{{ enum }}">
 										{{ enum }}
 									</option>
        							</select>
        						</div>
        						<div style="width: 1%; float: right;">&nbsp;</div>
-       						<div style="width: 89%;">
-       							<input type="text" class="form-control" name="{{ 'fieldTyp_' + srv.id }}" id="{{ 'fieldTyp_' + srv.id }}" ng-model="vm.service.attributes[srv.typeid].value" ng-required="{{ srv.ismandatory }}" ng-show="!srv.isenumeration" ng-change="vm.service.attributes[srv.typeid].value == null ? vm.service.attributes[srv.typeid].unitvalue = null : vm.service.attributes[srv.typeid].unitvalue" ng-blur="validateEndorseInput(srv.units, srv.typeid, false)" />
-       							<select class="form-control" id="{{ 'fieldTyp_' + srv.id }}" name="{{ 'fieldTyp_' + srv.id }}" ng-model="vm.service.attributes[srv.typeid].value" ng-required="{{ srv.ismandatory }}" ng-show="srv.isenumeration && !srv.ischecklist" ng-change="loadChildren(srv.typeid, false, true, false)">
+       						<div style="width: 82%;">
+       							<input type="text" class="form-control" name="{{ 'fieldTyp_' + srv.typeid }}" id="{{ 'fieldTyp_' + srv.typeid }}" ng-model="vm.service.attributes[srv.typeid].value" ng-required="{{ srv.ismandatory }}" ng-show="!srv.isenumeration && !srv.isform" ng-change="vm.service.attributes[srv.typeid].value == null ? vm.service.attributes[srv.typeid].unitvalue = null : vm.service.attributes[srv.typeid].unitvalue" ng-blur="validateEndorseInput(srv.units, srv.typeid, false)" />
+       							<select class="form-control" id="{{ 'fieldTyp_' + srv.typeid }}" name="{{ 'fieldTyp_' + srv.typeid }}" ng-model="vm.service.attributes[srv.typeid].value" ng-required="{{ srv.ismandatory }}" ng-show="srv.isenumeration && !srv.isform" ng-change="loadChildren(srv.typeid, false, true, false)">
+									<option ng-show="{{ !srv.ismandatory }}" value=""></option>
 									<option ng-repeat="enum in vm.definitions" ng-show="enum.typeid == srv.typeid && srv.parentid == null" value="{{ enum.code }}">
 										{{ enum.value }}
 									</option>
@@ -278,14 +310,22 @@
 										{{ enum.value }}
 									</option>
 								</select>
-								<div class="checklist" ng-show="srv.ischecklist">
-									<div ng-repeat="enum in vm.checklists[srv.typeid] track by $index">
-	  									<input type="checkbox" id="{{ 'fieldCheck_' + srv.id }}" name="{{ 'fieldCheck_' + srv.id }}"
-	  										ng-model="null_model"
-	  										ng-click="checkOption(srv.typeid, enum.code)"
-	  										ng-checked="vm.service.attributes[srv.typeid].arraychecklist.indexOf(enum.code) > -1"
-	  										ng-required="srv.ismandatory && vm.service.attributes[srv.typeid].arraychecklist.length == 0"
-	  										value="{{ enum.code }}">&nbsp;&nbsp;&nbsp;{{ enum.value }}
+								<div class="checklist" ng-if="srv.isform">
+									<div ng-repeat="control in vm.form.controls track by $index" ng-init="controlIndex = $index">
+										<div ng-if="control.issimplecontrol">
+		  									<div class="legal-form-control">{{control.question}}</div>
+		  									<div ng-repeat="answer in control.answers track by $index" ng-init="answerIndex = $index">
+		  										<table class="legal-answer">
+													<tr>
+														<td style="width: 3%; text-align: center;">
+															<input name="rad_{{control.id}}" type="radio" ng-model="control.totalscore" ng-value="{{answerIndex}}" ng-checked="answerIndex == control.totalscore" />
+														</td>
+														<td style="width: 96%;">{{answer.answer}}</td>
+														<td style="width: 1%;">&nbsp;</td>
+													</tr>
+												</table>
+		  									</div>
+	  									</div>
 	  								</div>
 	  							</div>
        						</div>
@@ -302,6 +342,15 @@
 	            <span class="glyphicon glyphicon-save"></span>&nbsp;<span data-translate="entity.action.save">Save</span>
 	        </button>
 	    </div>
+	    
+	    
+	    
+	    <div style="margin: 8px 0 12px 0; padding: 12px; background: #ccffd1; box-shadow: 0 4px 4px 0 rgba(0,0,0,0.14); font-size: 11px;">
+	        Form:&nbsp;&nbsp;&nbsp;&nbsp;{{editForm.$valid}}
+	    </div>
+	    
+	    
+	    
 	</div>    
     
 </form>
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service-legal-popup.controller.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service-legal-popup.controller.js
new file mode 100644
index 0000000000000000000000000000000000000000..6a750538e8cd07cfbeee5f440354fcfb587b5967
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service-legal-popup.controller.js
@@ -0,0 +1,85 @@
+/*******************************************************************************
+ * Copyright (c) 2017 Tecnalia.
+ * 
+ * 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.
+ * 
+ * The code has been contributed over a stub generated with the JHipster
+ * Application generator http://www.jhipster.tech/.
+ * 
+ * Contributors (in alphabetical order):
+ * 
+ * Alberto Molinuevo					Tecnalia
+ * Gorka Benguria                       Tecnalia
+ * Iñaki Etxaniz                        Tecnalia
+ * Juncal Alonso                        Tecnalia
+ * Leire Orue-Echevarria                Tecnalia
+ * Maria Jose Lopez                     Tecnalia
+ * Marisa Escalante                     Tecnalia
+ * Alberto Molinuevo					Tecnalia
+ * 
+ * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+ ******************************************************************************/
+(function() {
+    'use strict';
+
+    angular
+        .module('acsmiApp')
+        .controller('ServiceLegalPopupController', ServiceLegalPopupController);
+
+    ServiceLegalPopupController.$inject = ['$timeout', '$scope', '$uibModalInstance', '$rootScope', '$state', '$stateParams', 'entity', 'Service', 'Legal'];
+
+    function ServiceLegalPopupController($timeout, $scope, $uibModalInstance, $rootScope, $state, $stateParams, entity, Service, Legal) {
+        var vm = this;
+        
+        vm.clear = clear;
+        vm.servicename = entity.name;
+        
+        loadLegalAssessment();
+        
+        
+        // Carga el formulario legal
+        function loadLegalAssessment() {
+       		Legal.serviceAssessments({serviceid: entity.id},
+       				function success(result) {
+       					vm.form = result;
+       					if (result.controls == null || result.controls.length == 0) {
+       						Legal.assessments(
+       		    	        		function success(resultAux) {
+       		    						vm.form = resultAux;
+       		    					},
+       		    					function error(errorAux) {}
+       		    	        );
+       					}
+       				},
+       				function error(error) {}
+       		);
+        }
+        
+        
+        var unsubscribe = $rootScope.$on('acsmiApp:serviceUpdate', function(event, result) {
+            vm.service = result;
+        });
+        $scope.$on('$destroy', unsubscribe);
+        
+        
+        
+        $timeout(function() {
+            angular.element('.form-group:eq(1)>input').focus();
+        });
+
+        
+        function clear() {
+            $uibModalInstance.dismiss('cancel');
+        }
+    }
+})();
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service-legal-popup.html b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service-legal-popup.html
new file mode 100644
index 0000000000000000000000000000000000000000..d61c61138344e7d6035c8d293b640cac1e2ff008
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service-legal-popup.html
@@ -0,0 +1,33 @@
+<div class="card-popup">
+	<div class="card">
+		<div class="card-header" data-background-color="primary">
+			<button type="button" class="close" data-dismiss="modal" aria-hidden="true" ng-click="vm.clear()">&times;</button>
+       		<h4 class="title">{{vm.servicename}}</h4>
+		</div>
+		<div class="card-content">
+	        <jhi-alert-error></jhi-alert-error>
+
+			<div ng-repeat="control in vm.form.controls track by $index" ng-init="controlIndex = $index">
+				<div ng-if="control.issimplecontrol">
+					<div class="legal-form-control">{{control.question}}</div>
+					<div ng-repeat="answer in control.answers track by $index" ng-init="answerIndex = $index">
+						<table class="legal-answer">
+							<tr>
+								<td style="width: 3%; text-align: center;">
+									<input name="rad_{{control.id}}" type="radio" ng-model="control.score" ng-value="answer.score" disabled="disabled" />
+								</td>
+								<td style="width: 96%;">{{answer.answer}}</td>
+								<td style="width: 1%;">&nbsp;</td>
+							</tr>
+						</table>
+					</div>
+				</div>
+			</div>			
+	    </div>
+	</div>
+	<div class="modal-footer">
+        <button type="button" class="btn btn-default" data-dismiss="modal" ng-click="vm.clear()">
+            <span class="glyphicon glyphicon-ban-circle"></span>&nbsp;<span data-translate="entity.action.close">Close</span>
+        </button>
+    </div>
+</div>
\ No newline at end of file
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service-reactivate-dialog.controller.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service-reactivate-dialog.controller.js
index 2ca6ef7c65147597aa4ded8e4754ce438a69f2e2..96bf3e96cdf4fde418a91e77a69a08a09fa25ffd 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service-reactivate-dialog.controller.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service-reactivate-dialog.controller.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service-softdelete-dialog.controller.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service-softdelete-dialog.controller.js
index 8661e079798b6a3c3a980816a3ce4875b846b062..51e198956b16370fed40174a76628251c2d5d8f8 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service-softdelete-dialog.controller.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service-softdelete-dialog.controller.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service.controller.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service.controller.js
index bf71dc7384eeb31d5e841344bc0f57e1ef559826..cdf20e72a4dd3c767dca611a09ba2578f208c50c 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service.controller.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service.controller.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
@@ -41,6 +42,7 @@
     	var vm = this;        
         vm.services = [];
         vm.user = null;
+        vm.iscsp = false;
         
         loadServices();
         
@@ -49,6 +51,7 @@
         	Principal.identity().then(function(account) {
         		vm.user = account;
         		if (vm.user.authorities.length == 1) {
+        			vm.iscsp = true;
             		Service.cspservices({cspname: vm.user.company}, function(result) {
                     	vm.services = result;
                     	allowDelete();
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service.service.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service.service.js
index f0dd3ec2924f5b34d685e30d13efde28d0803ca7..73205c744502a391c60f380a038f2f26f1dfae66 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service.service.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service.service.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
@@ -45,6 +46,8 @@
         	'find': { method: 'GET', isArray: true, url: 'acsmiservices/api/services/find'},
         	'devops': { method: 'GET', isArray: true, url: 'acsmiservices/api/services/devops' },
         	'optimus': { method: 'GET', isArray: true, url: 'acsmiservices/api/services/optimus' },
+        	'shortInfo': { method: 'GET', isArray: true, url: 'acsmiservices/api/services/short-info' },
+        	'pdf': { method: 'GET', isArray: false, url: 'acsmiservices/api/services/pdf' },
             'get': {
                 method: 'GET',
                 transformResponse: function (data) {
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service.state.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service.state.js
index 1204a1659d29c561af496eb22ab45bac18aa2a29..ba78b17b89dd0a0b93530fe462bb42c7263c68de 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service.state.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/service.state.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/services.html b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/services.html
index fed4e0e5e0bdcbaf9fed0c3309297e5dbc3c53ef..cae1b1243e603aac95d6647bc963a9d6a07bf60d 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/services.html
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/entities/service/services.html
@@ -23,13 +23,14 @@
 	                <tr>
 	                    <th><span data-translate="acsmiApp.service.serviceName">Service Name</span></th>
 	                    <th><span data-translate="acsmiApp.service.serviceClass">Service Class</span></th>
+	                    <th><span data-translate="acsmiApp.service.provider" ng-show="!vm.iscsp">Provider</span></th>
 	                    <th><span data-translate="acsmiApp.service.status">Status</span></th>
 	                    <th><span data-translate="acsmiApp.service.alerts">Alerts</span></th>
 	                    <th></th>
 	                </tr>
 	            </thead>
 	            <tbody>
-	                <tr ng-repeat="service in vm.services track by service.id">
+	                <tr ng-repeat="service in vm.services | orderBy: 'servicename' track by service.id">
 	                	<td ng-show="service.deleteddate == null">
 	                		<a ui-sref="service-detail({id:service.id})">{{service.servicename}}</a>
 	                	</td>
@@ -38,6 +39,9 @@
 	                    <td ng-show="service.deleteddate == null">{{service.serviceclassname}}</td>
 	                    <td ng-show="service.deleteddate != null" class="registry-deleted">{{service.serviceclassname}}</td>
 	                    
+	                    <td ng-show="service.deleteddate == null" ng-show="!vm.iscsp">{{service.provider}}</td>
+	                    <td ng-show="service.deleteddate != null" class="registry-deleted" ng-show="!vm.iscsp">{{service.provider}}</td>
+	                    
 	                    <td>
 	                    	<span class="status-active-light" data-translate="acsmiApp.service.active" ng-show="service.deleteddate == null">Active</span>
 	    					<span class="status-inactive-light" data-translate="acsmiApp.service.inactive" ng-show="service.deleteddate != null">Inactive</span>
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/home/home.html b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/home/home.html
index 8cdb60114b88febcef907a302a691607294c0cb0..208dc2a29503629a2729129e69f2a6072f607586 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/home/home.html
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/home/home.html
@@ -12,6 +12,10 @@
 		                    You are logged in as user "{{vm.account.login}}".
 		                </div>
 		
+		                <div class="alert alert-warning" ng-switch-when="false" data-translate="global.messages.info.welcome" translate-compile>
+							If you have an account, please <a class="alert-link" href="\" ng-click="vm.login()">sign in</a>.
+               			</div>
+               
 		                <div class="alert alert-warning" ng-switch-when="false" data-translate="global.messages.info.register" translate-compile>
 		                    You don't have an account yet? <a class="alert-link" ui-sref="register">Register a new account</a>
 		                </div>
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/home/home.state.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/home/home.state.js
index d50a071ad0698aa45699abd962b4d7d08940f5b5..5b0c75f983f4f849fbb7a9dd7b402fc3eeb617ae 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/home/home.state.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/home/home.state.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/layouts/error/error.state.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/layouts/error/error.state.js
index ed8dedd6a470cb698d005e89f26c3f4088624e65..5ba2736c4f863d77d975b70d7511751e63858576 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/layouts/error/error.state.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/layouts/error/error.state.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/layouts/navbar/active-menu.directive.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/layouts/navbar/active-menu.directive.js
index 30122b18a88f0df91ad1f946b71751b4d003cbae..3ddc4d6ccf6b845294a7c8a9a7b935e3674fa8ba 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/layouts/navbar/active-menu.directive.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/layouts/navbar/active-menu.directive.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/layouts/navbar/navbar.controller.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/layouts/navbar/navbar.controller.js
index ba70687561b13062924e4f1c1ab0cab870dc55d8..fc1f102908ae80d7679e063adb4e27a6f1378da1 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/layouts/navbar/navbar.controller.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/layouts/navbar/navbar.controller.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/legal/legal-questionnaire.controller.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/legal/legal-questionnaire.controller.js
new file mode 100644
index 0000000000000000000000000000000000000000..ff3f54d55c8b6ff40383148744f322481f893e93
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/legal/legal-questionnaire.controller.js
@@ -0,0 +1,82 @@
+/*******************************************************************************
+ * Copyright (c) 2017 Tecnalia.
+ * 
+ * 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.
+ * 
+ * The code has been contributed over a stub generated with the JHipster
+ * Application generator http://www.jhipster.tech/.
+ * 
+ * Contributors (in alphabetical order):
+ * 
+ * Alberto Molinuevo					Tecnalia
+ * Gorka Benguria                       Tecnalia
+ * Iñaki Etxaniz                        Tecnalia
+ * Juncal Alonso                        Tecnalia
+ * Leire Orue-Echevarria                Tecnalia
+ * Maria Jose Lopez                     Tecnalia
+ * Marisa Escalante                     Tecnalia
+ * Alberto Molinuevo					Tecnalia
+ * 
+ * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+ ******************************************************************************/
+(function() {
+    'use strict';
+
+    angular
+        .module('acsmiApp')
+        .controller('LegalQuestionnaireController', LegalQuestionnaireController);
+
+    LegalQuestionnaireController.$inject = ['$scope', '$translate', '$state', '$stateParams', 'previousState', 'entity', 'Legal'];
+
+    function LegalQuestionnaireController ($scope, $translate, $state, $stateParams, previousState, entity, Legal) {
+    	var vm = this;
+
+        vm.previousState = previousState.name;
+        vm.nextState = vm.previousState;
+    	
+    	loadData();
+    	
+    	
+    	// Load the data
+    	function loadData() {
+    		if (entity.name == null || entity.name == "") {
+    			$state.go("legal");
+    		}
+    		
+    		Legal.serviceAssessments({serviceid: entity.id}, function(result) {
+    			if (result != null) {
+    				vm.assessment = result;
+    				vm.service = {
+    			        id: entity.id,
+    			        name: entity.name
+    				};
+    			}
+    		});
+    	}
+    	
+    	
+    	// Save the legal assessment
+    	$scope.save = function() {
+    		Legal.saveAssessment(vm.assessment, onSaveSuccess, onSaveError);
+        }
+    	
+    	
+    	function onSaveSuccess(result) {
+    		$state.go("legal");
+    	}
+
+         
+    	function onSaveError() {}
+
+    }
+})();
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/legal/legal-questionnaire.html b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/legal/legal-questionnaire.html
new file mode 100644
index 0000000000000000000000000000000000000000..5e1c692c929ec28e6f333799b634eaf8eb6ee545
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/legal/legal-questionnaire.html
@@ -0,0 +1,48 @@
+<div class="card">
+	<div class="card-header" data-background-color="primary">
+		<h4 class="title" data-translate="legal.title">Legal assessment</h4>
+	</div>
+	<div class="card-content">
+		<form name="legalForm" role="form">
+			
+			<div class="legal-title">
+				{{vm.service.name}}
+			</div>
+			
+			<div ng-repeat="control in vm.assessment.controls track by $index" ng-init="controlIndex = $index">
+				<div ng-if="!control.issimplecontrol">
+					<div class="legal-control">{{control.question}}</div>
+					<div ng-repeat="answer in control.answers track by $index" ng-init="answerIndex = $index">
+						<table class="legal-answer">
+							<tr>
+								<td style="width: 3%; text-align: center;">
+									<input name="rad_{{control.id}}" type="radio" ng-model="control.score" ng-value="answer.score" />
+								</td>
+								<td style="width: 96%;">{{answer.answer}}</td>
+								<td style="width: 1%;">&nbsp;</td>
+							</tr>
+						</table>
+					</div>
+					<div class="form-group legal-justification">
+			            <label class="control-label" data-translate="legal.justifyYourAnswer" for="{{ 'justification_' + control.id }}">Justify your answer:</label>
+			            <input type="text" class="form-control" name="{{ 'justification_' + control.id }}" id="{{ 'justification_' + control.id }}" ng-model="control.justification" maxlength="150" style="font-size: 11px; background: #f4faff;" />
+			        </div>
+				</div>
+			</div>
+			
+			<hr />
+			
+			<div class="modal-footer">
+				<button type="submit" ui-sref="{{ vm.nextState }}" class="btn btn-info">
+	        		<span class="glyphicon glyphicon-arrow-left"></span>
+	        		&nbsp;<span data-translate="entity.action.back"> Back</span>
+	    		</button>
+	    
+				<button type="button" ng-click="save()" class="btn btn-primary">
+	        		<span class="glyphicon glyphicon-save"></span>
+	        		&nbsp;<span data-translate="entity.action.save"> Save</span>
+	    		</button>
+	    	</div>
+		</form>
+	</div>
+</div>
\ No newline at end of file
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/legal/legal.controller.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/legal/legal.controller.js
index 690c409eaca85893babf3ad3b248ebafa6d4b49d..6e1601ca6ab146d494e3a931c20fef1790f79302 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/legal/legal.controller.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/legal/legal.controller.js
@@ -36,10 +36,35 @@
         .module('acsmiApp')
         .controller('LegalController', LegalController);
 
-    LegalController.$inject = ['$scope', '$translate', '$state', '$stateParams'];
-
-    function LegalController ($scope, $translate, $state, $stateParams) {
-    	        var vm = this;
+    LegalController.$inject = ['$scope', '$uibModal', '$translate', '$state', '$stateParams', 'Service'];
 
+    function LegalController ($scope, $uibModal, $translate, $state, $stateParams, Service) {
+    	var vm = this;
+    	
+    	loadData();
+    	
+    	
+    	// Load the data
+    	function loadData() {
+    		Service.shortInfo(function(result) {
+    			if (result != null) {
+    				vm.services = result;
+    			}
+    		});
+    	}
+    	
+    	
+    	// Abre popup para el detalle del servicio
+        $scope.detailPopup = function(id, name) {
+        	$uibModal.open({
+        		templateUrl: 'app/entities/service/service-legal-popup.html',
+        		controller: 'ServiceLegalPopupController',
+        		controllerAs: 'vm',
+        		windowClass: 'detail-modal-window',
+        		resolve: {
+        			entity: function () { return {id: id, name: name}; }
+        		}
+        	});
+        }
     }
 })();
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/legal/legal.html b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/legal/legal.html
index 712ab90db4506aecd33a06d0921e89046e1f79e0..23f8490875baf50b12d997a6e0351787e6b4e90a 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/legal/legal.html
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/legal/legal.html
@@ -3,10 +3,63 @@
 		<h4 class="title" data-translate="legal.title">Legal assessment</h4>
 	</div>
 	<div class="card-content">
-		<form name="legalForm" role="form">
-			
-			<br /><div class="no-services-found">Page under construction...</div>
-			
-		</form>
+		<jhi-alert></jhi-alert>
+		
+		<div class="legal-title">
+			<span data-translate="legal.select">Select the questionnaire of a service:</span>
+		</div>
+		
+		
+		<div class="table-responsive" ng-if="vm.services != null && vm.services.length > 0">
+	        <table class="jh-table table table-striped">
+	        	<thead>
+	                <tr>
+	                    <th><span data-translate="legal.serviceName">Service Name</span></th>
+	                    <th><span data-translate="legal.provider">Provider</span></th>
+	                    <th><span data-translate="legal.serviceClass">Service Class</span></th>
+	                    <th><span data-translate="legal.alerts">Alerts</span></th>
+	                    <th></th>
+	                </tr>
+	            </thead>
+	        	<tbody>
+	        		<tr ng-repeat="service in vm.services | orderBy: 'servicename' track by service.id">
+						<td ng-show="service.deleteddate == null" class="list-description" style="width: 30%;">
+							<a ng-click="detailPopup(service.id, service.servicename)">
+           						<span class="glyphicon glyphicon-search" style="margin: 1px 6px 0 0;"></span>
+           						{{service.servicename}}
+           					</a>
+						</td>
+						<td ng-show="service.deleteddate != null" class="registry-deleted" style="width: 30%;">{{service.servicename}}</td>
+						
+						<td ng-show="service.deleteddate == null" class="list-description" style="width: 15%;">{{service.provider}}</td>
+						<td ng-show="service.deleteddate != null" class="registry-deleted" style="width: 15%;">{{service.provider}}</td>
+						
+						<td ng-show="service.deleteddate == null" class="list-description" style="width: 20%;">{{service.serviceclassname}}</td>
+						<td ng-show="service.deleteddate != null" class="registry-deleted" style="width: 20%;">{{service.serviceclassname}}</td>
+						
+						<td style="width: 15%;">
+							<div style="display: inline;">
+								<img src="content/images/decide_warning_alert.png" ng-show="service.nocontractalert" alt="{{'legal.noContractAlert' | translate}}" title="{{'legal.noContractAlert' | translate}}">
+								<img src="content/images/decide_warning_alert_dark.png" ng-show="service.modifiedcontractalert" alt="{{'legal.modifiedContractAlert' | translate}}" title="{{'legal.modifiedContractAlert' | translate}}">
+								<img src="content/images/decide_warning_alert_darker.png" ng-show="service.formalert" alt="{{'legal.formAlert' | translate}}" title="{{'legal.formAlert' | translate}}">
+							</div>
+						</td>
+	
+						<!-- Buttons -->
+						<td class="text-right"  style="width: 20%;">
+							<div class="btn-group flex-btn-group-container">
+								<button type="submit"
+									ui-sref="legal-questionnaire({id:service.id, name:service.servicename})"
+									ng-show="!service.nocontractalert"
+									class="btn btn-primary btn-sm">
+									<span class="glyphicon glyphicon-th-list"></span>
+									<span class="hidden-sm-down" data-translate="entity.action.questionnaire"></span>
+								</button>
+							</div>
+						</td>
+					</tr>
+	        	</tbody>
+	        </table>
+		</div>
 	</div>
 </div>
\ No newline at end of file
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/legal/legal.service.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/legal/legal.service.js
new file mode 100644
index 0000000000000000000000000000000000000000..c117e6f0e3a64d5d2b41ea1aef6736cd494a0985
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/legal/legal.service.js
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (c) 2017 Tecnalia.
+ * 
+ * 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.
+ * 
+ * The code has been contributed over a stub generated with the JHipster
+ * Application generator http://www.jhipster.tech/.
+ * 
+ * Contributors (in alphabetical order):
+ * 
+ * Alberto Molinuevo					Tecnalia
+ * Gorka Benguria                       Tecnalia
+ * Iñaki Etxaniz                        Tecnalia
+ * Juncal Alonso                        Tecnalia
+ * Leire Orue-Echevarria                Tecnalia
+ * Maria Jose lopez                     Tecnalia
+ * Marisa Escalante                     Tecnalia
+ * 
+ * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+ ******************************************************************************/
+(function() {
+    'use strict';
+    angular
+        .module('acsmiApp')
+        .factory('Legal', Legal);
+
+    Legal.$inject = ['$resource'];
+
+    function Legal($resource) {
+        var resourceUrl =  'acsmiservices/' + 'api/service-legal-assessments/:id';
+
+        return $resource(resourceUrl, {}, {
+        	'assessments': { method: 'GET', isArray: false, url: 'acsmiservices/api/legal-assessments'},
+        	'serviceAssessments': { method: 'GET', isArray: false, url: 'acsmiservices/api/service-legal-assessments'},
+        	'saveAssessment': { method: 'PUT', isArray: false, url: 'acsmiservices/api/service-legal-assessments'}
+        });
+    }
+})();
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/legal/legal.state.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/legal/legal.state.js
index 041fcdd5865f0f58dd1ee444fdab7cef73882115..cac8595b37816b32d5e05dae76d179ce6481e690 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/legal/legal.state.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/legal/legal.state.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
@@ -59,5 +60,41 @@
                 }]
             }
         })
+        .state('legal-questionnaire', {
+            parent: 'legal',
+            url: '/legal/{id}',
+            params: {
+            	id: null,
+            	name: null
+            },
+            data: {
+            	authorities: ['ROLE_ADMIN', 'ROLE_LEGAL_EXPERT'],
+                pageTitle: 'acsmiApp.service.detail.title'
+            },
+            views: {
+                'content@': {
+                    templateUrl: 'app/legal/legal-questionnaire.html',
+                    controller: 'LegalQuestionnaireController',
+                    controllerAs: 'vm'
+                }
+            },
+            resolve: {
+                translatePartialLoader: ['$translate', '$translatePartialLoader', function ($translate, $translatePartialLoader) {
+                    $translatePartialLoader.addPart('legal');
+                    return $translate.refresh();
+                }],
+                entity: ['$stateParams', function($stateParams) {
+                    return $stateParams;
+                }],
+                previousState: ["$state", function ($state) {
+                    var currentStateData = {
+                        name: $state.current.name || 'legal',
+                        params: $state.params,
+                        url: $state.href($state.current.name, $state.params)
+                    };
+                    return currentStateData;
+                }]
+            }
+        })
     }
 })();
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/provider/provider-members-delete-dialog.controller.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/provider/provider-members-delete-dialog.controller.js
index 0ec69e4dcc55ec595dc7f8e364c7c542e5880789..57987cd03d430d1dcc4a1952437ad981cb5acf27 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/provider/provider-members-delete-dialog.controller.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/provider/provider-members-delete-dialog.controller.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/provider/provider-members-dialog.controller.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/provider/provider-members-dialog.controller.js
index dc4d275314903543d6cebdd6f3a49d406cd946f1..d96ae9848533f3119be4909e73194818dea73133 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/provider/provider-members-dialog.controller.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/provider/provider-members-dialog.controller.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/provider/provider-members.controller.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/provider/provider-members.controller.js
index aa5138fb82f7e08f1df54f8498f2ce9e4423e31c..a6f0ae6e3d6428ebe7997c09a601614cf0e19f7e 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/provider/provider-members.controller.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/provider/provider-members.controller.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/provider/provider.state.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/provider/provider.state.js
index c8053ecfe81f7a638860c00ace5411cb1c7880d8..1c1749a4abf527f5a9767f94d0107406c7bd5624 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/provider/provider.state.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/provider/provider.state.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/search/search.controller.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/search/search.controller.js
index ee2fb7832ef0d35f6ac0ebfca8c8ba5613f09800..3a7d14d9f2307d70f99cc51a4e3cd19945213f99 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/search/search.controller.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/search/search.controller.js
@@ -36,9 +36,9 @@
         .module('acsmiApp')
         .controller('SearchController', SearchController);
 
-    SearchController.$inject = ['$scope', 'Principal', '$translate', '$state', '$stateParams', 'ServiceClass', 'Service', 'Definition'];
+    SearchController.$inject = ['$uibModal', '$scope', 'Principal', '$translate', '$state', '$stateParams', 'ServiceClass', 'Service', 'Definition', 'Legal'];
 
-    function SearchController ($scope, Principal, $translate, $state, $stateParams, ServiceClass, Service, Definition) {
+    function SearchController ($uibModal, $scope, Principal, $translate, $state, $stateParams, ServiceClass, Service, Definition, Legal) {
         var vm = this;
         
         vm.searchInvalidValue = null;
@@ -52,6 +52,7 @@
         vm.searchselectedclassid = null;
         vm.selectedclass = null;
         vm.searchselectedclass = null;
+        vm.selectedrule = null;
         
         vm.account = null;
         
@@ -98,18 +99,23 @@
 	   			childid: null,
 	   			name: null,
 	   			value: null,
-	   			unit: null
+	   			unit: null,
+	   			evalrule: null
 	   		};
         }
         
         
         // Envía el formulario de búsqueda
         $scope.submitSearch = function() {
+        	// Reiniciar regla seleccionada
+        	vm.selectedrule = null;
+        	
         	// Construir objeto JSON de filtro
-        	var filter = {classid: vm.searchselectedclassid, attributes: []};
+        	var filter = {classid: vm.searchselectedclassid, incidences: true, attributes: []};
         	if (vm.filter.length > 0) {
         		for (var i = 0;i < vm.filter.length;i++) {
         			delete vm.filter[i].arrayunits;
+        			delete vm.filter[i].evalrule;
         			filter.attributes.push(vm.filter[i]);
         		}
         	}
@@ -122,14 +128,9 @@
         				var matchingstring = "";
         				if (result[i].matchingattributelist != null && result[i].matchingattributelist.length > 0) {
         					for (var j = 0;j < result[i].matchingattributelist.length;j++) {
-        						if (j == 0) {
-        							matchingstring += "[ ";
-        						}
         						matchingstring += result[i].matchingattributelist[j];
         						if (j < result[i].matchingattributelist.length - 1) {
-        							matchingstring += ", ";
-        						} else {
-        							matchingstring += " ]";
+        							matchingstring += " / ";
         						}
         					}
         					result[i].matchingattributelist[0] = matchingstring;
@@ -196,6 +197,8 @@
         			if (vm.selectedattribute.arrayunits.length == 1) {
         				vm.selectedattribute.unit = vm.selectedattribute.arrayunits[0];
         			}
+        			vm.selectedattribute.evalrule = vm.attributes[i].evalrule;
+        			vm.selectedrule = vm.attributes[i].unitrule;
         			break;
         		}
         	}
@@ -218,9 +221,18 @@
         	vm.selectedattribute.childid = idName[1] == null || idName[1].length == 0 ? null : idName[1];
         	vm.selectedattribute.name = idName[2];
         	
-        	if (vm.selectedattribute.unit != null && vm.selectedattribute.unit.length > 0 && $scope.validate(vm.selectedattribute.value)) {
+        	if ((vm.selectedattribute.unit != null || (vm.selectedattribute.unit == null && vm.selectedattribute.evalrule != null))
+        			&& $scope.validate(vm.selectedattribute.value)) {
+        		vm.searchInvalidValue = vm.selectedattribute.value;
+        	}
+        	
+        	/*
+        	if (vm.selectedattribute.unit != null && $scope.validate(vm.selectedattribute.value)) {
+        		vm.searchInvalidValue = vm.selectedattribute.value;
+        	} else if (vm.selectedattribute.unit == null && vm.selectedattribute.evalrule != null && $scope.validate(vm.selectedattribute.value)) {
         		vm.searchInvalidValue = vm.selectedattribute.value;
         	}
+        	*/
         	
 			if (vm.searchInvalidValue == null) {
 				// Comprobar si el atributo existe en el filtro. En caso negativo, añadir
@@ -243,6 +255,7 @@
 			}
 
 			$scope.resetSelectedAttribute();
+			vm.selectedrule = null;
         }
         
         
@@ -255,6 +268,20 @@
         }
         
         
+        // Abre popup para el detalle del servicio
+        $scope.detailPopup = function(service) {
+        	$uibModal.open({
+        		templateUrl: 'app/entities/service/service-detail-popup.html',
+        		controller: 'ServiceDetailPopupController',
+        		controllerAs: 'vm',
+        		windowClass: 'detail-modal-window',
+        		resolve: {
+        			entity: function () { return service; }
+        		}
+        	});
+        }
+        
+        
 // **************************************** AREA DE ALTA DE SERVICIO **************************************** //
         
 
@@ -263,12 +290,24 @@
 	        Definition.query({},
 	        		function success(result) {
 						vm.definitions = result;
+						loadLegalAssessment();
 					},
 					function error(error) {}
 	        );
         }
         
         
+        // Carga el formulario legal
+        function loadLegalAssessment() {
+        	Legal.assessments(
+    	       		function success(result) {
+    					vm.form = result;
+    				},
+    				function error(error) {}
+        	);
+        }
+        
+        
         // Carga la lista de atributos hijos
         $scope.loadChildrenByType = function(definition, array, callingattrid) {
         	for (var j = 0;j < array.length;j++) {
@@ -302,34 +341,6 @@
 				}
         	}
         }
-        
-        
-        // Carga el array de atributos checklist
-        $scope.loadChecklistArray = function() {
-        	for (var i = 0;i < vm.definitions.length;i++) {
-        		if (vm.definitions[i].ischeckoption) {
-        			// Inicializar array de checklists
-        			if (vm.checklists[vm.definitions[i].typeid] == null) {
-        				vm.checklists[vm.definitions[i].typeid] = new Array();
-					}
-        			
-        			// Insertar valores en el array general
-        			vm.checklists[vm.definitions[i].typeid].push({code: vm.definitions[i].code,
-        				value: vm.definitions[i].value, typeid: vm.definitions[i].typeid });
-        			
-        			// Asignar valores del atributo
-        			if (vm.service.attributes[vm.definitions[i].typeid] != null) {
-        				if (vm.service.attributes[vm.definitions[i].typeid].arraychecklist == null) {
-        					vm.service.attributes[vm.definitions[i].typeid].arraychecklist = new Array();
-        				}
-            			if (vm.service.id != null && vm.service.attributes[vm.definitions[i].typeid].checklistvalue != null) {
-            				vm.service.attributes[vm.definitions[i].typeid].arraychecklist =
-            					convertStringToArray(vm.service.attributes[vm.definitions[i].typeid].checklistvalue, ",");
-               			}
-        			}
-        		}
-        	}
-        }
        	
         
         // Prepara la carga de la lista de atributos hijos y checklists
@@ -379,6 +390,11 @@
    		
    		// Carga la lista de atributos
         $scope.loadAttributes = function() {
+        	vm.endorseFRInvalidValue = null;
+			vm.endorseFRInvalidValueField = null;
+			vm.endorseNFRInvalidValue = null;
+			vm.endorseNFRInvalidValueField = null;
+			
         	for (var i = 0;i < vm.serviceClasses.length;i++) {
         		if (vm.serviceClasses[i].id == vm.selectedclassid) {
         			vm.selectedclass = vm.serviceClasses[i];
@@ -388,7 +404,6 @@
         	
         	// Inicializar arrays
         	vm.children = new Array(new Array());
-        	vm.checklists = new Array(new Array());
         	
         	// Cargar variables
         	vm.service.serviceclassid = vm.selectedclass.id;
@@ -396,9 +411,6 @@
             
         	vm.service.attributes = new Array();
         	
-        	// Cargar array de checklists
-        	$scope.loadChecklistArray();
-
         	// Cargar arrays de atributos
         	$scope.loadAttributesArray(vm.selectedclass.commonattributes);
         	$scope.loadAttributesArray(vm.selectedclass.functionalattributes);
@@ -416,46 +428,40 @@
         }
         
         
-        // Realiza el tratamiento de chequeado de una opción en una checklist
-        $scope.checkOption = function(typeid, value) {
-        	if (vm.service.attributes[typeid].arraychecklist == null) {
-        		vm.service.attributes[typeid].arraychecklist = new Array();
-        		vm.service.attributes[typeid].arraychecklist.push(value);
-        	} else {
-        		var index = vm.service.attributes[typeid].arraychecklist.indexOf(value);
-        		if (index == -1) {
-                	vm.service.attributes[typeid].arraychecklist.push(value);
-                } else {
-                	vm.service.attributes[typeid].arraychecklist.splice(index, 1);
-                }
-        	}
-        	
-        	// Asignar un valor a la propiedad "value" para validar el formulario
-       		vm.service.attributes[typeid].value = value;
-        }
-        
-        
         // Valida el formato de un valor de un campo
         $scope.validateEndorseInput = function(units, typeid, isFR) {
-        	if (units != null && units.length > 0 && vm.service.attributes[typeid].value != null && vm.service.attributes[typeid].value.length > 0) {
+        	var isnanrule = true;
+        	var evalrule = true;
+        	if (vm.service.attributes[typeid].value != null && vm.service.attributes[typeid].value.length > 0) {
+        		// Ajustar valor del atributo
         		vm.service.attributes[typeid].value = vm.service.attributes[typeid].value.replace(",", ".");
-        		if (isFR) {
-        			vm.endorseFRInvalidValue = null;
-        			vm.endorseFRInvalidValueField = null;
-            		if (isNaN(vm.service.attributes[typeid].value)) {
+        		
+        		// Evaluar regla numérica
+        		if (units != null && units.length > 0 && isNaN(vm.service.attributes[typeid].value)) {
+        			isnanrule = false;
+        		}
+        		
+        		// Evaluar regla de validación
+            	if (vm.service.attributes[typeid].evalrule != null && vm.service.attributes[typeid].evalrule.length > 0) {
+            		var variable = vm.service.attributes[typeid].value;
+            		evalrule = eval(vm.service.attributes[typeid].evalrule);
+            	}
+            	
+            	if (!isnanrule || !evalrule) {
+            		if (isFR) {
             			vm.endorseFRInvalidValueField = vm.service.attributes[typeid].name;
             			vm.endorseFRInvalidValue = vm.service.attributes[typeid].value;
-            			vm.service.attributes[typeid].value = null;
-            		}
-        		} else {
-        			vm.endorseNFRInvalidValue = null;
-        			vm.endorseNFRInvalidValueField = null;
-            		if (isNaN(vm.service.attributes[typeid].value)) {
+            		} else {
             			vm.endorseNFRInvalidValueField = vm.service.attributes[typeid].name;
             			vm.endorseNFRInvalidValue = vm.service.attributes[typeid].value;
-            			vm.service.attributes[typeid].value = null;
             		}
-        		}
+            		vm.service.attributes[typeid].value = null;
+            	} else {
+            		vm.endorseFRInvalidValue = null;
+        			vm.endorseFRInvalidValueField = null;
+        			vm.endorseNFRInvalidValue = null;
+        			vm.endorseNFRInvalidValueField = null;
+            	}
         	} else {
         		vm.endorseFRInvalidValue = null;
     			vm.endorseFRInvalidValueField = null;
@@ -579,17 +585,6 @@
         		if (vm.service.attributes[i] != null) {
         			// Eliminar array auxiliar de unidades
         			delete vm.service.attributes[i].arrayunits;
-        			
-        			// Evaluar array auxiliar de checklists
-        			if (vm.service.attributes[i].ischecklist) {
-        				vm.service.attributes[i].checklistvalue =
-        					convertArrayToString(vm.service.attributes[i].arraychecklist, ",");
-            			
-            			// Aplicar regla
-            			var variable = vm.service.attributes[i].arraychecklist.length;
-            			vm.service.attributes[i].value = eval(vm.service.attributes[i].checklistevalrule);
-            			delete vm.service.attributes[i].arraychecklist;
-            		}
         		}
         	}
         	
@@ -598,8 +593,20 @@
         		vm.service.attributes[2].value = null;
         	}
         	
+        	// Transformar "legal assessment"
+        	for (var i = 0;i < vm.form.controls.length;i++) {
+        		vm.form.controls[i].createdDate = null;
+        		vm.form.controls[i].lastModifiedDate = null;
+        		vm.form.controls[i].deletedDate = null;
+        		for (var j = 0;j < vm.form.controls[i].answers.length;j++) {
+        			vm.form.controls[i].answers[j].createdDate = null;
+            		vm.form.controls[i].answers[j].lastModifiedDate = null;
+            		vm.form.controls[i].answers[j].deletedDate = null;
+        		}
+        	}
+        	
         	// Guardar
-            Service.save({attributes: vm.service.attributes}, vm.service, onSaveServiceSuccess, onSaveServiceError);
+            Service.save({attributes: vm.service.attributes, controls: vm.form.controls}, vm.service, onSaveServiceSuccess, onSaveServiceError);
         }
         
 
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/search/search.html b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/search/search.html
index 4b2a8518709ed45a317684614f6bc50c1a64c995..fa191606fff7aaaa50d1ac313ea0fbcd4542e715 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/search/search.html
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/search/search.html
@@ -11,7 +11,6 @@
 				<select class="form-control" id="field_serviceclass" name="serviceclass" ng-model="vm.searchselectedclassid" ng-options="serviceclass.id as serviceclass.serviceclassname for serviceclass in vm.serviceClasses" ng-change="changeClass()">
 		        </select>
 			</div>
-			
 			<div ng-show="vm.searchselectedclassid != null && vm.attributes != null && vm.attributes.length > 0">
 				<div ng-show="vm.filter != null && vm.filter.length > 0">
 					<table style="width: 100%;">
@@ -19,10 +18,10 @@
 							<td style="width: 4%;">&nbsp;</td>
 							<td style="width: 89%;">
 								<div class="form-group" ng-show="attr.unit == null || attr.unit.length == 0">
-									<input type="text" class="form-control" value="{{ attr.name }} : {{ attr.value }}" disabled />
+									<input type="text" class="form-control" value="{{ attr.name }} :   '{{ attr.value }}'" disabled />
 								</div>
 								<div class="form-group" ng-show="attr.unit != null && attr.unit.length > 0">
-									<input type="text" class="form-control" value="{{ attr.name }} : {{ attr.value }} {{ attr.unit }}" disabled />
+									<input type="text" class="form-control" value="{{ attr.name }} :   '{{ attr.value }} ({{ attr.unit }})'" disabled />
 								</div>
 			        		</td>
 			        		<td style="width: 1%;">&nbsp;</td>
@@ -43,11 +42,11 @@
 			    <table style="width: 100%;">
 					<tr>
 						<td style="width: 4%;">&nbsp;</td>
-	        			<td style="width: 43%;">
+	        			<td style="width: 41%;">
 		        			<label data-translate="search.form.attribute">Attribute</label>
 	        			</td>
-			        	<td style="width: 3%;">&nbsp;</td>
-			        	<td style="width: 43%;">
+			        	<td style="width: 7%;">&nbsp;</td>
+			        	<td style="width: 41%;">
 			        		<label data-translate="search.form.value">Value</label>
 			        		<label class="invalid-value-left" data-translate="search.form.invalidValue" ng-show="vm.searchInvalidValue != null">Invalid value</label>
 			        		<label class="invalid-value-right" ng-show="vm.searchInvalidValue != null">' {{ vm.searchInvalidValue }} '</label>
@@ -57,25 +56,28 @@
 			        </tr>
 			        <tr>
 			        	<td style="width: 4%;">&nbsp;</td>
-	        			<td style="width: 43%;">
+	        			<td style="width: 30%;">
 		            		<select class="form-control" id="field_AttributeType" name="fieldattributetype" ng-model="vm.selectedattribute.typeid" ng-change="changeAttributeType()">
 								<option ng-repeat="attr in vm.attributes | orderBy: 'weight'" value="{{ attr.typeid }}#{{ attr.childid }}#{{ attr.name }}">
 					       			{{attr.name}}
 					   			</option>
 					   		</select>
 		        		</td>
-			        	<td style="width: 3%;">&nbsp;</td>
-			        	<td style="width: 43%;">
+			        	<td class="operation-cell" style="width: 7%;">
+			        		<span class="glyphicon glyphicon-ban-circle" ng-show="vm.selectedrule == null"></span>
+			        		<div class="selected-rule" ng-show="vm.selectedrule != null">{{ vm.selectedrule }}</div>
+			        	</td>
+			        	<td style="width: 52%;">
 			        		<table style="width: 100%">
 			        			<tr>
 			        				<td style="width: 100%;" ng-show="vm.selectedattribute.unit == null || vm.selectedattribute.unit.length == 0">
 			        					<input type="text" class="form-control" id="field_AttributeValue" name="fieldattributevalue" ng-model="vm.selectedattribute.value" />
 			        				</td>
-			        				<td style="width: 81%;" ng-show="vm.selectedattribute.unit != null && vm.selectedattribute.unit.length > 0">
+			        				<td style="width: 73%;" ng-show="vm.selectedattribute.unit != null && vm.selectedattribute.unit.length > 0">
 			        					<input type="text" class="form-control" id="field_AttributeValue" name="fieldattributevalue" ng-model="vm.selectedattribute.value" />
 			        				</td>
 			        				<td style="width: 2%;">&nbsp;</td>
-			        				<td style="width: 17%;" ng-show="vm.selectedattribute.arrayunits != null && vm.selectedattribute.arrayunits.length > 0">
+			        				<td style="width: 25%;" ng-show="vm.selectedattribute.arrayunits != null && vm.selectedattribute.arrayunits.length > 0">
 			        					<select class="form-control" id="field_AttributeTypeUnits" name="fieldattributetypeunits" ng-model="vm.selectedattribute.unit" ng-disabled="vm.selectedattribute.arrayunits.length == 1">
 											<option ng-repeat="unit in vm.selectedattribute.arrayunits" value="{{unit}}">
 								       			{{unit}}
@@ -116,23 +118,28 @@
            	</thead>
            	<tbody>
                	<tr ng-repeat="service in vm.results | orderBy: '-match' track by service.id">
-					<td ng-show="service.deleteddate == null" style="width: 38%;">
-						<a ui-sref="service-detail({id:service.id})">{{service.servicename}}</a>
-					</td>
-           			<td ng-show="service.deleteddate != null" class="registry-deleted" style="width: 38%;">{{service.servicename}}</td>
+           			<td style="width: 38%;">
+           				<div class="result-service">
+           					<a ng-click="detailPopup(service.id)">
+           						<span class="glyphicon glyphicon-search" style="margin: 1px 6px 0 0;"></span>
+           						{{service.servicename}}
+           					</a>
+           					<span class="subtitle">({{service.provider}})</span>
+           				</div>
+           			</td>
 					
-           			<td class="status-active" ng-show="service.match >= 95" style="width: 5%; text-align: center;">{{service.match}}%</td>
-           			<td class="status-almost-active" ng-show="service.match < 95 && service.match >= 75" style="width: 5%; text-align: center;">{{service.match}}%</td>
-           			<td class="status-medium" ng-show="service.match < 75 && service.match >= 50" style="width: 5%; text-align: center;">{{service.match}}%</td>
-           			<td class="status-almost-inactive" ng-show="service.match < 50 && service.match >= 25" style="width: 5%; text-align: center;">{{service.match}}%</td>
-           			<td class="status-inactive" ng-show="service.match < 25" style="width: 5%; text-align: center;">{{service.match}}%</td>
+           			<td ng-show="service.match >= 95" style="width: 5%; text-align: center;"><span class="status-active-div">{{service.match}}%</span></td>
+           			<td ng-show="service.match < 95 && service.match >= 75" style="width: 5%; text-align: center;"><span class="status-almost-active-div">{{service.match}}%</span></td>
+           			<td ng-show="service.match < 75 && service.match >= 50" style="width: 5%; text-align: center;"><span class="status-medium-div">{{service.match}}%</span></td>
+           			<td ng-show="service.match < 50 && service.match >= 25" style="width: 5%; text-align: center;"><span class="status-almost-inactive-div">{{service.match}}%</span></td>
+           			<td ng-show="service.match < 25" style="width: 5%; text-align: center;"><span class="status-inactive-div">{{service.match}}%</span></td>
 
-           			<td ng-show="service.matchingattributelist[0] == null" style="width: 50%; text-align: center;"><span class="glyphicon glyphicon-remove status-no-filter-applied"></span></td>
-           			<td ng-show="service.matchingattributelist[0] != null && service.match >= 95" class="status-active-light" style="width: 50%; text-align: center;">{{service.matchingattributelist[0]}}</td>
-           			<td ng-show="service.matchingattributelist[0] != null && service.match < 95 && service.match >= 75" class="status-almost-active-light" style="width: 50%; text-align: center;">{{service.matchingattributelist[0]}}</td>
-           			<td ng-show="service.matchingattributelist[0] != null && service.match < 75 && service.match >= 50" class="status-medium-light" style="width: 50%; text-align: center;">{{service.matchingattributelist[0]}}</td>
-           			<td ng-show="service.matchingattributelist[0] != null && service.match < 50 && service.match >= 25" class="status-almost-inactive-light" style="width: 50%; text-align: center;">{{service.matchingattributelist[0]}}</td>
-           			<td ng-show="service.matchingattributelist[0] != null && service.match < 25" class="status-inactive-light" style="width: 50%; text-align: center;">{{service.matchingattributelist[0]}}</td>
+           			<td ng-show="service.matchingattributelist[0] == null" style="width: 50%; text-align: center;"><span class="status-no-filter-applied" data-translate="search.form.noFiltersApplied">No filters applied</span></td>
+           			<td ng-show="service.matchingattributelist[0] != null && service.match >= 95" style="width: 50%;"><div class="status-active-attr-div">{{service.matchingattributelist[0]}}</div></td>
+           			<td ng-show="service.matchingattributelist[0] != null && service.match < 95 && service.match >= 75" style="width: 50%;"><div class="status-almost-active-attr-div">{{service.matchingattributelist[0]}}</div></td>
+           			<td ng-show="service.matchingattributelist[0] != null && service.match < 75 && service.match >= 50" style="width: 50%;"><div class="status-medium-attr-div">{{service.matchingattributelist[0]}}</div></td>
+           			<td ng-show="service.matchingattributelist[0] != null && service.match < 50 && service.match >= 25" style="width: 50%;"><div class="status-almost-inactive-attr-div">{{service.matchingattributelist[0]}}</div></td>
+           			<td ng-show="service.matchingattributelist[0] != null && service.match < 25" style="width: 50%;"><div class="status-inactive-attr-div">{{service.matchingattributelist[0]}}</div></td>
            			
            			<td ng-show="service.incidences.length <= 0" style="width: 7%;">&nbsp;</td>
 					<td ng-show="service.incidences.length > 0" style="width: 7%; text-align: center;">
@@ -281,6 +288,7 @@
 			       			<td style="width: 32%;">
 			       				<label class="control-label" for="fieldZone">{{ vm.selectedclass.commonattributes[1].name }}</label>
 						        <select class="form-control" id="fieldZone" name="fieldZone" ng-model="vm.service.attributes[vm.selectedclass.commonattributes[1].typeid].value" ng-show="vm.selectedclass.commonattributes[1].isenumeration" ng-disabled="vm.service.attributes[vm.selectedclass.commonattributes[0].typeid].value == null">
+									<option value=""></option>
 									<option ng-repeat="enum in vm.children[vm.selectedclass.commonattributes[0].childid] track by $index" value="{{ enum.code }}">
 										{{ enum.value }}
 									</option>
@@ -314,10 +322,11 @@
 			</div>
 			<div ng-show="((vm.service.id == null || vm.service.id == 0) && vm.selectedclass.functionalattributes != null && vm.selectedclass.functionalattributes.length > 0) || (vm.service.id != null && vm.service.id != 0 && vm.selectedclass.functionalattributes != null && vm.selectedclass.functionalattributes.length > 0)" ng-repeat="srv in vm.selectedclass.functionalattributes | orderBy: 'weight'">
 		       	<div class="form-group">
-       				<label class="control-label" for="fieldTyp_{{ srv.id }}">{{ srv.name }} <span ng-show="srv.arrayunits.length == 1">({{ srv.arrayunits[0] }})</span> <span ng-show="{{ srv.ismandatory }}">*</span></label>
+       				<label class="control-label" for="fieldTyp_{{ srv.typeid }}">{{ srv.name }} <span ng-show="srv.arrayunits.length == 1">({{ srv.arrayunits[0] }})</span> <span ng-show="{{ srv.ismandatory || srv.isform }}">*</span></label>
        				<div ng-if="srv.arrayunits.length <= 1">
-       					<input type="text" class="form-control" name="{{ 'fieldTyp_' + srv.id }}" id="{{ 'fieldTyp_' + srv.id }}" ng-model="vm.service.attributes[srv.typeid].value" ng-required="{{ srv.ismandatory }}" ng-show="!srv.isenumeration" ng-blur="validateEndorseInput(srv.units, srv.typeid, true)" />
-       					<select class="form-control" id="{{ 'fieldTyp_' + srv.id }}" name="{{ 'fieldTyp_' + srv.id }}" ng-model="vm.service.attributes[srv.typeid].value" ng-required="{{ srv.ismandatory }}" ng-show="srv.isenumeration && !srv.ischecklist" ng-change="loadChildren(srv.typeid, false, true, false)">
+       					<input type="text" class="form-control" name="{{ 'fieldTyp_' + srv.typeid }}" id="{{ 'fieldTyp_' + srv.typeid }}" ng-model="vm.service.attributes[srv.typeid].value" ng-required="{{ srv.ismandatory }}" ng-show="!srv.isenumeration && !srv.isform" ng-blur="validateEndorseInput(srv.units, srv.typeid, true)" />
+       					<select class="form-control" id="{{ 'fieldTyp_' + srv.typeid }}" name="{{ 'fieldTyp_' + srv.typeid }}" ng-model="vm.service.attributes[srv.typeid].value" ng-required="{{ srv.ismandatory }}" ng-show="srv.isenumeration && !srv.isform" ng-change="loadChildren(srv.typeid, false, true, false)">
+							<option ng-show="{{ !srv.ismandatory }}" value=""></option>
 							<option ng-repeat="enum in vm.definitions" ng-show="enum.typeid == srv.typeid && srv.parentid == null" value="{{ enum.code }}">
 								{{ enum.value }}
 							</option>
@@ -325,29 +334,38 @@
 								{{ enum.value }}
 							</option>
 						</select>
-						<div class="checklist" ng-show="srv.ischecklist">
-							<div ng-repeat="enum in vm.checklists[srv.typeid] track by $index">
-  								<input type="checkbox" id="{{ 'fieldCheck_' + srv.id }}" name="{{ 'fieldCheck_' + srv.id }}"
-  									ng-model="null_model"
-  									ng-click="checkOption(srv.typeid, enum.code)"
-  									ng-checked="vm.service.attributes[srv.typeid].arraychecklist.indexOf(enum.code) > -1"
-  									ng-required="srv.ismandatory && vm.service.attributes[srv.typeid].arraychecklist.length == 0"
-  									value="{{ enum.code }}">&nbsp;&nbsp;&nbsp;{{ enum.value }}
-  							</div>
-  						</div>
+  						<div class="checklist" ng-if="srv.isform">
+							<div ng-repeat="control in vm.form.controls track by $index" ng-init="controlIndex = $index">
+								<div ng-if="control.issimplecontrol">
+									<div class="legal-form-control">{{control.question}}</div>
+									<div ng-repeat="answer in control.answers track by $index" ng-init="answerIndex = $index">
+										<table class="legal-answer">
+											<tr>
+												<td style="width: 3%; text-align: center;">
+													<input name="rad_{{control.id}}" type="radio" ng-model="control.score" ng-value="{{answerIndex}}" ng-checked="answerIndex == control.score" />
+												</td>
+												<td style="width: 96%;">{{answer.answer}}</td>
+												<td style="width: 1%;">&nbsp;</td>
+											</tr>
+										</table>
+		  							</div>
+		  						</div>
+	  						</div>
+	  					</div>
        				</div>
        				<div ng-if="srv.arrayunits.length > 1" style="width: 100%;">
-       					<div style="width: 10%; float: right;">
-       						<select class="form-control" id="{{ 'fieldUnit_' + srv.id }}" name="{{ 'fieldUnit_' + srv.id }}" ng-model="vm.service.attributes[srv.typeid].unitvalue" ng-required="{{ srv.ismandatory }}">
+       					<div style="width: 17%; float: right;">
+       						<select class="form-control" id="{{ 'fieldUnit_' + srv.typeid }}" name="{{ 'fieldUnit_' + srv.typeid }}" ng-model="vm.service.attributes[srv.typeid].unitvalue" ng-required="{{ srv.ismandatory }}">
        							<option ng-repeat="enum in srv.arrayunits" value="{{ enum }}">
 									{{ enum }}
 								</option>
        						</select>
        					</div>
        					<div style="width: 1%; float: right;">&nbsp;</div>
-       					<div style="width: 89%;">
-       						<input type="text" class="form-control" name="{{ 'fieldTyp_' + srv.id }}" id="{{ 'fieldTyp_' + srv.id }}" ng-model="vm.service.attributes[srv.typeid].value" ng-required="{{ srv.ismandatory }}" ng-show="!srv.isenumeration" ng-change="vm.service.attributes[srv.typeid].value == null ? vm.service.attributes[srv.typeid].unitvalue = null : vm.service.attributes[srv.typeid].unitvalue" ng-blur="validateEndorseInput(srv.units, srv.typeid, true)" />
-       						<select class="form-control" id="{{ 'fieldTyp_' + srv.id }}" name="{{ 'fieldTyp_' + srv.id }}" ng-model="vm.service.attributes[srv.typeid].value" ng-required="{{ srv.ismandatory }}" ng-show="srv.isenumeration && !srv.ischecklist" ng-change="loadChildren(srv.typeid, false, true, false)">
+       					<div style="width: 82%;">
+       						<input type="text" class="form-control" name="{{ 'fieldTyp_' + srv.typeid }}" id="{{ 'fieldTyp_' + srv.typeid }}" ng-model="vm.service.attributes[srv.typeid].value" ng-required="{{ srv.ismandatory }}" ng-show="!srv.isenumeration && !srv.isform" ng-change="vm.service.attributes[srv.typeid].value == null ? vm.service.attributes[srv.typeid].unitvalue = null : vm.service.attributes[srv.typeid].unitvalue" ng-blur="validateEndorseInput(srv.units, srv.typeid, true)" />
+       						<select class="form-control" id="{{ 'fieldTyp_' + srv.typeid }}" name="{{ 'fieldTyp_' + srv.typeid }}" ng-model="vm.service.attributes[srv.typeid].value" ng-required="{{ srv.ismandatory }}" ng-show="srv.isenumeration && !srv.isform" ng-change="loadChildren(srv.typeid, false, true, false)">
+								<option ng-show="{{ !srv.ismandatory }}" value=""></option>
 								<option ng-repeat="enum in vm.definitions" ng-show="enum.typeid == srv.typeid && srv.parentid == null" value="{{ enum.code }}">
 									{{ enum.value }}
 								</option>
@@ -355,14 +373,22 @@
 									{{ enum.value }}
 								</option>
 							</select>
-							<div class="checklist" ng-show="srv.ischecklist">
-								<div ng-repeat="enum in vm.checklists[srv.typeid] track by $index">
-	  								<input type="checkbox" id="{{ 'fieldCheck_' + srv.id }}" name="{{ 'fieldCheck_' + srv.id }}"
-	  									ng-model="null_model"
-	  									ng-click="checkOption(srv.typeid, enum.code)"
-	  									ng-checked="vm.service.attributes[srv.typeid].arraychecklist.indexOf(enum.code) > -1"
-	  									ng-required="srv.ismandatory && vm.service.attributes[srv.typeid].arraychecklist.length == 0"
-	  									value="{{ enum.code }}">&nbsp;&nbsp;&nbsp;{{ enum.value }}
+							<div class="checklist" ng-if="srv.isform">
+								<div ng-repeat="control in vm.form.controls track by $index" ng-init="controlIndex = $index">
+									<div ng-if="control.issimplecontrol">
+										<div class="legal-form-control">{{control.question}}</div>
+										<div ng-repeat="answer in control.answers track by $index" ng-init="answerIndex = $index">
+											<table class="legal-answer">
+												<tr>
+													<td style="width: 3%; text-align: center;">
+														<input name="rad_{{control.id}}" type="radio" ng-model="control.score" ng-value="{{answerIndex}}" ng-checked="answerIndex == control.score" />
+													</td>
+													<td style="width: 96%;">{{answer.answer}}</td>
+													<td style="width: 1%;">&nbsp;</td>
+												</tr>
+											</table>
+		  								</div>
+		  							</div>
 	  							</div>
 	  						</div>
        					</div>
@@ -384,10 +410,11 @@
 			</div>
 			<div ng-show="((vm.service.id == null || vm.service.id == 0) && vm.selectedclass.nonfunctionalattributes != null && vm.selectedclass.nonfunctionalattributes.length > 0) || (vm.service.id != null && vm.service.id != 0 && vm.selectedclass.nonfunctionalattributes != null && vm.selectedclass.nonfunctionalattributes.length > 0)" ng-repeat="srv in vm.selectedclass.nonfunctionalattributes | orderBy: 'weight'">
 		       	<div class="form-group">
-       				<label class="control-label" for="fieldTyp_{{ srv.id }}">{{ srv.name }} <span ng-show="srv.arrayunits.length == 1">({{ srv.arrayunits[0] }})</span> <span ng-show="{{ srv.ismandatory }}">*</span></label>
+       				<label class="control-label" for="fieldTyp_{{ srv.typeid }}">{{ srv.name }} <span ng-show="srv.arrayunits.length == 1">({{ srv.arrayunits[0] }})</span> <span ng-show="{{ srv.ismandatory || srv.isform }}">*</span></label>
        				<div ng-if="srv.arrayunits.length <= 1">
-       					<input type="text" class="form-control" name="{{ 'fieldTyp_' + srv.id }}" id="{{ 'fieldTyp_' + srv.id }}" ng-model="vm.service.attributes[srv.typeid].value" ng-required="{{ srv.ismandatory }}" ng-show="!srv.isenumeration" ng-blur="validateEndorseInput(srv.units, srv.typeid, false)" />
-       					<select class="form-control" id="{{ 'fieldTyp_' + srv.id }}" name="{{ 'fieldTyp_' + srv.id }}" ng-model="vm.service.attributes[srv.typeid].value" ng-required="{{ srv.ismandatory }}" ng-show="srv.isenumeration && !srv.ischecklist" ng-change="loadChildren(srv.typeid, false, true, false)">
+       					<input type="text" class="form-control" name="{{ 'fieldTyp_' + srv.typeid }}" id="{{ 'fieldTyp_' + srv.typeid }}" ng-model="vm.service.attributes[srv.typeid].value" ng-required="{{ srv.ismandatory }}" ng-show="!srv.isenumeration && !srv.isform" ng-blur="validateEndorseInput(srv.units, srv.typeid, false)" />
+       					<select class="form-control" id="{{ 'fieldTyp_' + srv.typeid }}" name="{{ 'fieldTyp_' + srv.typeid }}" ng-model="vm.service.attributes[srv.typeid].value" ng-required="{{ srv.ismandatory }}" ng-show="srv.isenumeration && !srv.isform" ng-change="loadChildren(srv.typeid, false, true, false)">
+							<option ng-show="{{ !srv.ismandatory }}" value=""></option>
 							<option ng-repeat="enum in vm.definitions" ng-show="enum.typeid == srv.typeid && srv.parentid == null" value="{{ enum.code }}">
 								{{ enum.value }}
 							</option>
@@ -395,29 +422,38 @@
 								{{ enum.value }}
 							</option>
 						</select>
-  						<div class="checklist" ng-show="srv.ischecklist">
-							<div ng-repeat="enum in vm.checklists[srv.typeid] track by $index">
-  								<input type="checkbox" id="{{ 'fieldCheck_' + srv.id }}" name="{{ 'fieldCheck_' + srv.id }}"
-  									ng-model="null_model"
-  									ng-click="checkOption(srv.typeid, enum.code)"
-  									ng-checked="vm.service.attributes[srv.typeid].arraychecklist.indexOf(enum.code) > -1"
-  									ng-required="srv.ismandatory && vm.service.attributes[srv.typeid].arraychecklist.length == 0"
-  									value="{{ enum.code }}">&nbsp;&nbsp;&nbsp;{{ enum.value }}
+  						<div class="checklist" ng-if="srv.isform">
+							<div ng-repeat="control in vm.form.controls track by $index" ng-init="controlIndex = $index">
+								<div ng-if="control.issimplecontrol">
+									<div class="legal-form-control">{{control.question}}</div>
+									<div ng-repeat="answer in control.answers track by $index" ng-init="answerIndex = $index">
+										<table class="legal-answer">
+											<tr>
+												<td style="width: 3%; text-align: center;">
+													<input name="rad_{{control.id}}" type="radio" ng-model="control.score" ng-value="{{answerIndex}}" ng-checked="answerIndex == control.score" />
+												</td>
+												<td style="width: 96%;">{{answer.answer}}</td>
+												<td style="width: 1%;">&nbsp;</td>
+											</tr>
+										</table>
+	  								</div>
+	  							</div>
   							</div>
   						</div>
        				</div>
        				<div ng-if="srv.arrayunits.length > 1" style="width: 100%;">
-       					<div style="width: 10%; float: right;">
-       						<select class="form-control" id="{{ 'fieldUnit_' + srv.id }}" name="{{ 'fieldUnit_' + srv.id }}" ng-model="vm.service.attributes[srv.typeid].unitvalue" ng-required="{{ srv.ismandatory }}">
+       					<div style="width: 17%; float: right;">
+       						<select class="form-control" id="{{ 'fieldUnit_' + srv.typeid }}" name="{{ 'fieldUnit_' + srv.typeid }}" ng-model="vm.service.attributes[srv.typeid].unitvalue" ng-required="{{ srv.ismandatory }}">
        							<option ng-repeat="enum in srv.arrayunits" value="{{ enum }}">
 									{{ enum }}
 								</option>
        						</select>
        					</div>
        					<div style="width: 1%; float: right;">&nbsp;</div>
-       					<div style="width: 89%;">
-       						<input type="text" class="form-control" name="{{ 'fieldTyp_' + srv.id }}" id="{{ 'fieldTyp_' + srv.id }}" ng-model="vm.service.attributes[srv.typeid].value" ng-required="{{ srv.ismandatory }}" ng-show="!srv.isenumeration" ng-change="vm.service.attributes[srv.typeid].value == null ? vm.service.attributes[srv.typeid].unitvalue = null : vm.service.attributes[srv.typeid].unitvalue" ng-blur="validateEndorseInput(srv.units, srv.typeid, false)" />
-       						<select class="form-control" id="{{ 'fieldTyp_' + srv.id }}" name="{{ 'fieldTyp_' + srv.id }}" ng-model="vm.service.attributes[srv.typeid].value" ng-required="{{ srv.ismandatory }}" ng-show="srv.isenumeration && !srv.ischecklist" ng-change="loadChildren(srv.typeid, false, true, false)">
+       					<div style="width: 82%;">
+       						<input type="text" class="form-control" name="{{ 'fieldTyp_' + srv.typeid }}" id="{{ 'fieldTyp_' + srv.typeid }}" ng-model="vm.service.attributes[srv.typeid].value" ng-required="{{ srv.ismandatory }}" ng-show="!srv.isenumeration && !srv.isform" ng-change="vm.service.attributes[srv.typeid].value == null ? vm.service.attributes[srv.typeid].unitvalue = null : vm.service.attributes[srv.typeid].unitvalue" ng-blur="validateEndorseInput(srv.units, srv.typeid, false)" />
+       						<select class="form-control" id="{{ 'fieldTyp_' + srv.typeid }}" name="{{ 'fieldTyp_' + srv.typeid }}" ng-model="vm.service.attributes[srv.typeid].value" ng-required="{{ srv.ismandatory }}" ng-show="srv.isenumeration && !srv.isform" ng-change="loadChildren(srv.typeid, false, true, false)">
+								<option ng-show="{{ !srv.ismandatory }}" value=""></option>
 								<option ng-repeat="enum in vm.definitions" ng-show="enum.typeid == srv.typeid && srv.parentid == null" value="{{ enum.code }}">
 									{{ enum.value }}
 								</option>
@@ -425,14 +461,22 @@
 									{{ enum.value }}
 								</option>
 							</select>
-							<div class="checklist" ng-show="srv.ischecklist">
-								<div ng-repeat="enum in vm.checklists[srv.typeid] track by $index">
-	  								<input type="checkbox" id="{{ 'fieldCheck_' + srv.id }}" name="{{ 'fieldCheck_' + srv.id }}"
-	  									ng-model="null_model"
-	  									ng-click="checkOption(srv.typeid, enum.code)"
-	  									ng-checked="vm.service.attributes[srv.typeid].arraychecklist.indexOf(enum.code) > -1"
-	  									ng-required="srv.ismandatory && vm.service.attributes[srv.typeid].arraychecklist.length == 0"
-	  									value="{{ enum.code }}">&nbsp;&nbsp;&nbsp;{{ enum.value }}
+							<div class="checklist" ng-if="srv.isform">
+								<div ng-repeat="control in vm.form.controls track by $index" ng-init="controlIndex = $index">
+									<div ng-if="control.issimplecontrol">
+										<div class="legal-form-control">{{control.question}}</div>
+										<div ng-repeat="answer in control.answers track by $index" ng-init="answerIndex = $index">
+											<table class="legal-answer">
+												<tr>
+													<td style="width: 3%; text-align: center;">
+														<input name="rad_{{control.id}}" type="radio" ng-model="control.score" ng-value="{{answerIndex}}" ng-checked="answerIndex == control.score" />
+													</td>
+													<td style="width: 96%;">{{answer.answer}}</td>
+													<td style="width: 1%;">&nbsp;</td>
+												</tr>
+											</table>
+		  								</div>
+		  							</div>
 	  							</div>
 	  						</div>
        					</div>
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/search/search.state.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/search/search.state.js
index c176dd88bd49794f88cc7b35b8c243d5c54423cb..49db6dd3569e804b7e792dbe97a020b0b99ec808 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/search/search.state.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/search/search.state.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/auth/account.service.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/auth/account.service.js
index cebdec3a45a4b87467cba47639eddbb95a058f8d..5f9d6d5741e169074a08e686fa9a315e5b4def25 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/auth/account.service.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/auth/account.service.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/auth/activate.service.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/auth/activate.service.js
index 69cbb407d5b3b070f5ff3311ec326781f5cf772a..8dc22172933cb4496c2313890cdc7be84b6aec56 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/auth/activate.service.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/auth/activate.service.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/auth/auth.jwt.service.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/auth/auth.jwt.service.js
index 18558e6294b448f5b7859d043f5f57d64e80aa4d..8d64c41e4164df5538891ea3415ad56ed4b44c08 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/auth/auth.jwt.service.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/auth/auth.jwt.service.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/auth/auth.service.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/auth/auth.service.js
index 671bd573211453e20f9295b1d32774f4987e2e1b..90ce9ed3e6e3e4acccf14ec0d5391ab237b1e5a8 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/auth/auth.service.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/auth/auth.service.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/auth/has-any-authority.directive.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/auth/has-any-authority.directive.js
index 62f81d087202c4a478cb75d712cf53241135db10..3300f4f5ba70201f493f6837c36f12fd0d3a0db0 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/auth/has-any-authority.directive.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/auth/has-any-authority.directive.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/auth/has-authority.directive.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/auth/has-authority.directive.js
index b08d18d7fa234c74eca4035d5960607b62c9bff8..35ac7f6519cb87bfc7d23f334f768929010e8574 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/auth/has-authority.directive.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/auth/has-authority.directive.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/auth/password-reset-finish.service.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/auth/password-reset-finish.service.js
index 9014e51cbc0b512f03b471f2b348146fff4ccc41..b664bd9062367433832b5aa8278379b1c9afb3a8 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/auth/password-reset-finish.service.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/auth/password-reset-finish.service.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/auth/password-reset-init.service.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/auth/password-reset-init.service.js
index 5756053ff3244a7415a8b6016f3f47db4458e821..592d2dc6edd4b664b95fcb838c242ebb16402aab 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/auth/password-reset-init.service.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/auth/password-reset-init.service.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/auth/password.service.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/auth/password.service.js
index ae8790f363e1de0ab47cb52dd6aa55f6589a3e57..1b5fcf13ff1ddc78f5d524c8875a2c9b34521714 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/auth/password.service.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/auth/password.service.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/auth/principal.service.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/auth/principal.service.js
index 13713b614525cf49168036a4585f57276e326953..28d9b25440b4de0be05d9ca6e00afbb5195b978b 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/auth/principal.service.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/auth/principal.service.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/auth/register.service.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/auth/register.service.js
index 4918b6aa375f5c36d891b024599fde57b1721321..f7e30c35d4400f05a23174fae31dd77c902e5bf2 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/auth/register.service.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/auth/register.service.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/profiles/page-ribbon.directive.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/profiles/page-ribbon.directive.js
index c4ed4938add47a69bf6e7bb21b9eda8cbbba7b3a..17e60d77f6c9522102c624298e8220f7fd776d46 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/profiles/page-ribbon.directive.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/profiles/page-ribbon.directive.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/profiles/profile.service.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/profiles/profile.service.js
index 911c1becaadfad279ba50a14197b798cf5bbc9a3..8af9baa8d32e2c051719b65525733c334d9aad1b 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/profiles/profile.service.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/profiles/profile.service.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/user/user.service.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/user/user.service.js
index a47979b49a5026b1b135c1ca44b92a15b8753f52..12f474cc72ab0ed72cb1740e706d72c2abde0dcd 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/user/user.service.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/app/services/user/user.service.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/content/css/main.css b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/content/css/main.css
index 2817868b90d57755ffff004e648a906cfcdc97c6..558f290be2da5998bb2308238fe31cbec7aed8d8 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/content/css/main.css
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/content/css/main.css
@@ -401,6 +401,7 @@ ui bootstrap tweaks
 	text-align: center;
 	font-size: 11px;
 	font-weight: 600;
+	border-radius: 2px;
 }
 
 .info-table-content {
@@ -425,6 +426,29 @@ ui bootstrap tweaks
 	font-weight: 600;
 }
 
+.status-active-div {
+	background: #429b49;
+	box-shadow: 0 4px 4px 0 rgba(0,0,0,0.14);
+	color: #fff;
+	padding: 4px 16px 4px 16px;
+	font-weight: 600;
+	border: 1px solid #429b49;
+	border-radius: 4px;
+	font-size: 12px;
+}
+
+.status-active-attr-div {
+	background: #f0f9f1;
+	box-shadow: 0 4px 4px 0 rgba(0,0,0,0.14);
+	color: #429b49;
+	padding: 4px 16px 4px 16px;
+	font-weight: 600;
+	border: 1px solid #429b49;
+	border-radius: 4px;
+	font-size: 11px;
+	text-align: center;
+}
+
 .status-active-light {
 	color: #429b49;
 }
@@ -434,6 +458,29 @@ ui bootstrap tweaks
 	font-weight: 600;
 }
 
+.status-inactive-div {
+	background: #ff3d3d;
+	box-shadow: 0 4px 4px 0 rgba(0,0,0,0.14);
+	color: #fff;
+	padding: 4px 16px 4px 16px;
+	font-weight: 600;
+	border: 1px solid #ff3d3d;
+	border-radius: 4px;
+	font-size: 12px;
+}
+
+.status-inactive-attr-div {
+	background: #fff2f2;
+	box-shadow: 0 4px 4px 0 rgba(0,0,0,0.14);
+	color: #ff3d3d;
+	padding: 4px 16px 4px 16px;
+	font-weight: 600;
+	border: 1px solid #ff3d3d;
+	border-radius: 4px;
+	font-size: 11px;
+	text-align: center;
+}
+
 .status-inactive-light {
 	color: #ff3d3d;
 }
@@ -443,6 +490,29 @@ ui bootstrap tweaks
 	font-weight: 600;
 }
 
+.status-almost-active-div {
+	background: #a1aa17;
+	box-shadow: 0 4px 4px 0 rgba(0,0,0,0.14);
+	color: #fff;
+	padding: 4px 16px 4px 16px;
+	font-weight: 600;
+	border: 1px solid #a1aa17;
+	border-radius: 4px;
+	font-size: 12px;
+}
+
+.status-almost-active-attr-div {
+	background: #fcfceb;
+	box-shadow: 0 4px 4px 0 rgba(0,0,0,0.14);
+	color: #9ba316;
+	padding: 4px 16px 4px 16px;
+	font-weight: 600;
+	border: 1px solid #a1aa17;
+	border-radius: 4px;
+	font-size: 11px;
+	text-align: center;
+}
+
 .status-almost-active-light {
 	color: #a1aa17;
 }
@@ -452,6 +522,29 @@ ui bootstrap tweaks
 	font-weight: 600;
 }
 
+.status-medium-div {
+	background: #cea615;
+	box-shadow: 0 4px 4px 0 rgba(0,0,0,0.14);
+	color: #fff;
+	padding: 4px 16px 4px 16px;
+	font-weight: 600;
+	border: 1px solid #cea615;
+	border-radius: 4px;
+	font-size: 12px;
+}
+
+.status-medium-attr-div {
+	background: #fdf9ea;
+	box-shadow: 0 4px 4px 0 rgba(0,0,0,0.14);
+	color: #cea615;
+	padding: 4px 16px 4px 16px;
+	font-weight: 600;
+	border: 1px solid #cea615;
+	border-radius: 4px;
+	font-size: 11px;
+	text-align: center;
+}
+
 .status-medium-light {
 	color: #cea615;
 }
@@ -461,26 +554,76 @@ ui bootstrap tweaks
 	font-weight: 600;
 }
 
+.status-almost-inactive-div {
+	background: #e87a30;
+	box-shadow: 0 4px 4px 0 rgba(0,0,0,0.14);
+	color: #fff;
+	padding: 4px 16px 4px 16px;
+	font-weight: 600;
+	border: 1px solid #e87a30;
+	border-radius: 4px;
+	font-size: 12px;
+}
+
+.status-almost-inactive-attr-div {
+	background: #fdf2ea;
+	box-shadow: 0 4px 4px 0 rgba(0,0,0,0.14);
+	color: #e87a30;
+	padding: 4px 16px 4px 16px;
+	font-weight: 600;
+	border: 1px solid #e87a30;
+	border-radius: 4px;
+	font-size: 11px;
+	text-align: center;
+}
+
 .status-almost-inactive-light {
 	color: #e87a30;
 }
 
 .status-no-filter-applied {
-	margin-left: 16px;
+	margin-left: 12px;
 	color: #bbb;
+	border: 1px solid #bbb;
+	border-radius: 4px;
+	box-shadow: 0 4px 4px 0 rgba(0,0,0,0.14);
+	padding: 4px 16px 4px 16px;
+	width: 100%;
+	font-style: italic;
+	font-size: 13px;
+}
+
+.result-service {
+	background: #f0f9ff;
+	box-shadow: 0 4px 4px 0 rgba(0,0,0,0.14);
+	color: #004c8b;
+	padding: 4px 16px 4px 10px;
+	font-weight: 600;
+	border: 1px solid #004c8b;
+	border-radius: 4px;
+	font-size: 13px;
+}
+
+.result-service .subtitle {
+	padding-left: 12px;
+	font-weight: 600;
+	font-size: 11px;
 }
 
 .list-description {
-	color: #00447c;
+	color: #001c33;
+	opacity: 0.7;
 }
 
 .checklist {
-	border: 1px solid #aaa;
+	border: 1px solid #75c1ff;
 	border-style: dotted;
+	border-radius: 6px;
 	font-size: 12px;
 	font-weight: 600;
 	color: #777;
-	padding: 4px 4px 4px 12px;
+	padding: 4px;
+	background: #fcfcfc;
 }
 
 .info-alert-timestamp {
@@ -553,19 +696,6 @@ ui bootstrap tweaks
 	margin-left: 8px;
 }
 
-.no-services-found {
-	width: 100%;
-	color: #004c8b;
-	font-size: 14px;
-	font-weight: 600;
-	text-align: center;
-	border: 1px solid #004c8b;
-	padding: 8px;
-	border-radius: 4px;
-	background: #c9e6ff;
-	margin-bottom: 24px;
-}
-
 .home-info-bold {
 	font-weight: 600;
 }
@@ -590,4 +720,118 @@ ui bootstrap tweaks
 
 .marked-provider {
 	color: rgba(255, 255, 255, 0.85)!important;
+}
+
+.selected-rule {
+	font-size: 13px;
+	font-weight: 600;
+	background: #28b9ff;
+	color: #fff;
+	border: 1px solid #008fd5;
+	border-radius: 4px;
+	padding: 8px 0 5px 0;
+}
+
+.operation-cell {
+	text-align: center;
+	padding: 0 8px 0 8px;
+}
+
+.detail-modal-window .modal-dialog {
+  width: 1024px;
+}
+
+.legal-control {
+	width: 100%;
+	font-size: 11px;
+	font-weight: 600;
+	padding: 4px 12px 4px 8px;
+	border-radius: 2px;
+	background: #eff1e4;
+}
+
+.legal-answer {
+	width: 100%;
+	font-size: 11px;
+	margin-top: 4px;
+}
+
+.legal-form-control {
+	width: 100%;
+	font-size: 11px;
+	padding: 4px 12px 4px 8px;
+	border-radius: 2px;
+	background: #eff1e4;
+}
+
+.legal-title {
+	color: #005177;
+	background: #e8f3ff;
+	box-shadow: 0 4px 4px 0 rgba(0,0,0,0.14);
+	font-size: 13px;
+	font-weight: 600;
+	padding: 6px 6px 6px 12px;
+	margin-bottom: 6px;
+	border-radius: 2px;
+}
+
+.legal-justification {
+	font-size: 11px;
+	color: #005177;
+	margin-top: 10px;
+}
+
+.legal-tooltip {
+	width: 55%;
+	background: #ffffea;
+	box-shadow: 0 4px 4px 0 rgba(0,0,0,0.14);
+	font-size: 11px;
+	font-style: italic;
+	font-weight: 600;
+	text-align: center;
+	margin: 8px 0 0 0;
+	padding: 4px 2px 4px 2px;
+	color: #7e7e7e;
+}
+
+.register-legal-conditions-label {
+	margin: 8px 0 -2px 0;
+	font-size: 12px;
+	color: #750000;
+}
+
+.register-legal-conditions {
+	height: 96px;
+	background: #f3f3f3;
+	border: 1px solid #750000;
+	border-radius: 2px;
+	box-shadow: 0 4px 4px 0 rgba(0,0,0,0.14);
+	font-size: 12px;
+	color: #5d5d5d;
+	overflow-y: auto;
+	padding: 4px;
+}
+
+.register-accept {
+	text-align: center;
+	font-size: 11px;
+	color: #5d5d5d;
+	font-weight: 600;
+}
+
+.export-div {
+	float: right;
+	background: #f3f3f3;
+	border: 1px solid #b8b6b6;
+	border-radius: 4px;
+	padding: 8px 10px 8px 10px;
+	font-size: 13px;
+	font-weight: 600;
+}
+
+.export-image {
+	width: 16px;
+	height: 16px;
+	cursor: pointer;
+	margin-left: 8px;
 }
\ No newline at end of file
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/content/images/csv16x16.png b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/content/images/csv16x16.png
new file mode 100644
index 0000000000000000000000000000000000000000..fe9ba8f1397876410eac9a2ffd3b9144bc258333
Binary files /dev/null and b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/content/images/csv16x16.png differ
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/content/images/decide_warning_alert_dark.png b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/content/images/decide_warning_alert_dark.png
new file mode 100644
index 0000000000000000000000000000000000000000..a373ae671e3b58a6fb53d9010f4bf56172fc0e8f
Binary files /dev/null and b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/content/images/decide_warning_alert_dark.png differ
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/content/images/decide_warning_alert_darker.png b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/content/images/decide_warning_alert_darker.png
new file mode 100644
index 0000000000000000000000000000000000000000..10b635fadf0034dccd56866c67bbbfa6d37a4ca9
Binary files /dev/null and b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/content/images/decide_warning_alert_darker.png differ
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/content/images/pdf16x16.png b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/content/images/pdf16x16.png
new file mode 100644
index 0000000000000000000000000000000000000000..2aded003cb6bea9484f71538febfb5c6cd76c469
Binary files /dev/null and b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/content/images/pdf16x16.png differ
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/i18n/en/global.json b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/i18n/en/global.json
index eff6b72314e8cb69f47734dc617616a43b829795..1f480dedd3f3d8507d007274417ddc22093c2863 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/i18n/en/global.json
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/i18n/en/global.json
@@ -90,7 +90,8 @@
         "messages": {
             "info": {
                 "authenticated": "If you want to <a class=\"alert-link\" href=\"\" ng-click=\"vm.login()\">sign in</a>, you can try the default accounts:<br/>- Administrator (login=\"admin\" and password=\"admin\") <br/>- User (login=\"user\" and password=\"user\").",
-                "register": "You don't have an account yet? <a class=\"alert-link\" href=\"\" ng-click=\"vm.register()\">Register a new account</a>"
+                "register": "You don't have an account yet? <a class=\"alert-link\" href=\"\" ng-click=\"vm.register()\">Register a new account</a>",
+                "welcome": "If you have an account, please <a class=\"alert-link\" href=\"\" ng-click=\"vm.login()\">sign in</a>."
             },
             "error": {
                 "dontmatch": "The password and its confirmation do not match!"
@@ -159,7 +160,9 @@
             "list": "List",
             "services": "Servicies",
             "deactivate": "Deactivate",
-            "migrate": "Migrate"
+            "migrate": "Migrate",
+            "close": "Close",
+            "questionnaire": "View questionnaire"
         },
         "detail": {
             "field": "Field",
@@ -205,9 +208,13 @@
         "serviceGetNFRError": "Cannot get the Service NFR Info",
         "serviceGetDevOpsInfoError": "Cannot get the Service DevOps Info",
         "serviceGetOptimusInfoError": "Cannot get the Service Optimus Info",
+        "serviceGetShortInfoError": "Cannot get the list of Services",
         "serviceDeleteError": "The Service cannot be deleted",
         "serviceIncidenceCreateError": "Cannot create the Service incidence",
         "serviceIncidenceGetAllError": "Cannot get the list of Service incidences",
+        
+        "serviceExportPDFError": "Cannot export to PDF",
+        
         "serviceClassGetError": "Cannot get the Service class",
         "serviceClassGetAllError": "Cannot get the list of Service classes",
         "serviceClassAttributeGetError": "Cannot get the Service class attribute",
@@ -224,9 +231,24 @@
         "serviceInstanceDeactivateError": "The Service cannot be deactivated",
         "serviceProviderGetError": "Cannot get the Service provider",
         "definitionGetAllError": "Cannot get the list of Definitions",
+        "definitionGetByAttributeError": "Cannot get the list of Definitions for the attribute",
+        "definitionGetByStartingCodeError": "Cannot get the list of Definitions for the starting code",
         "definitionGetError": "Cannot get the Definition",
         "certificationGetError": "Cannot get the Certification",
-        "serviceCertificationGetError": "Cannot get the Service certification"
+        "serviceCertificationGetError": "Cannot get the Service certification",
+        "legalControlGetAllError": "Cannot get the list of legal controls",
+        "legalAnswerGetAllError": "Cannot get the list of legal answers",
+        "legalAssessmentGetAllError": "Cannot get the list of legal assessments",
+        "serviceLegalAssessmentGetFullError": "Cannot get the full service legal assessment",
+        "serviceLegalAssessmentGetByControlTypeError": "Cannot get the full legal assessment by control type",
+        "serviceLegalAssessmentUpdateError": "Cannot save the legal assessment questionnaire",
+        "serviceLegalAssessmentDeleteError": "Cannot delete the legal assessment questionnaire",
+        "serviceLegalAssessmentResetError": "Cannot reset the legal assessment questionnaire",
+        "acsmiAuthenticateError": "Bad credentials",        
+        "serviceLegalManagementGetError": "Cannot get the Service legal management",
+        "serviceLegalManagementCreateError": "Cannot create the Service legal management",
+        "serviceLegalManagementUpdateError": "Cannot update the Service legal management",
+        "serviceLegalManagementDeleteError": "The Service legal management cannot be deleted"
     },
     "footer": "This is your footer"
 }
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/i18n/en/legal.json b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/i18n/en/legal.json
index 26c400aaade6c83f51b4a269d8d4b6c2a609c918..f3f7ba075f7bbda0e58037ca5a7e060994b9815b 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/i18n/en/legal.json
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/i18n/en/legal.json
@@ -1,5 +1,14 @@
 {
     "legal": {
-        "title": "Legal assessment"
+        "title": "Legal assessment",
+        "select": "Select a service (if available) to complete its legal questionnaire. The service must previously contain at least one type of contract.",
+        "serviceName": "Service Name",
+        "serviceClass": "Service Class",
+        "provider": "Provider",
+        "justifyYourAnswer": "Justify your answer:",
+        "alerts": "Legal alerts",
+        "noContractAlert": "The service has no contract.",
+        "modifiedContractAlert": "The service contract has been modified by the CSP.",
+        "formAlert": "The legal questionnaire has not been completed."
     }
 }
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/i18n/en/register.json b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/i18n/en/register.json
index c126ee93ee2371d13d22d40f970d51a51c89456a..82670c03bea764f559f2c5919a31a2ab41331659 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/i18n/en/register.json
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/i18n/en/register.json
@@ -2,7 +2,12 @@
     "register": {
         "title": "Registration",
         "form": {
-            "button": "Register"
+            "button": "Register",
+            "legalConditionsLabel": "Legal conditions:",
+            "cspLegalConditions": "CSP Lorem ipsum dolor sit amet consectetur adipiscing elit convallis justo, vulputate congue dictum senectus primis euismod habitasse potenti ullamcorper, elementum cras nec nascetur fames vel porttitor montes. Risus sodales ligula quisque sapien sagittis pharetra class lacinia, at facilisi netus auctor varius praesent nisl etiam proin, semper magna malesuada dapibus habitant nostra ac. Pretium tempus nisi ultricies dictumst hac lacus diam nullam cursus, eros sed euismod eleifend nunc magna varius etiam, platea curae at malesuada elementum tincidunt nostra sodales.",
+            "developerLegalConditions": "Developer Lorem ipsum dolor sit amet consectetur adipiscing elit convallis justo, vulputate congue dictum senectus primis euismod habitasse potenti ullamcorper, elementum cras nec nascetur fames vel porttitor montes. Risus sodales ligula quisque sapien sagittis pharetra class lacinia, at facilisi netus auctor varius praesent nisl etiam proin, semper magna malesuada dapibus habitant nostra ac. Pretium tempus nisi ultricies dictumst hac lacus diam nullam cursus, eros sed euismod eleifend nunc magna varius etiam, platea curae at malesuada elementum tincidunt nostra sodales.",
+            "legalExpertLegalConditions": "Legal Expert Lorem ipsum dolor sit amet consectetur adipiscing elit convallis justo, vulputate congue dictum senectus primis euismod habitasse potenti ullamcorper, elementum cras nec nascetur fames vel porttitor montes. Risus sodales ligula quisque sapien sagittis pharetra class lacinia, at facilisi netus auctor varius praesent nisl etiam proin, semper magna malesuada dapibus habitant nostra ac. Pretium tempus nisi ultricies dictumst hac lacus diam nullam cursus, eros sed euismod eleifend nunc magna varius etiam, platea curae at malesuada elementum tincidunt nostra sodales.",
+            "acceptLegalConditions": "I have read and accept the conditions"
         },
         "messages": {
             "validate": {
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/i18n/en/search.json b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/i18n/en/search.json
index eceb6248dac1a5bbc11ea499d89d16270bbbfd7e..b8c7c4c7302e4d663852fac76d505cdc642a929e 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/i18n/en/search.json
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/i18n/en/search.json
@@ -16,7 +16,8 @@
             "alerts": "Alerts",
             "invalidValue": "Invalid value: ",
             "theField": "The field ",
-            "hasAnInvalidValue": " has an invalid value: "
+            "hasAnInvalidValue": " has an invalid value: ",
+            "noFiltersApplied": "No filters applied"
         }
     }
 }
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/i18n/en/service.json b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/i18n/en/service.json
index cc129967c42746fa4d0cafb6c9fd2676f1b5f138..80fdff7ed6551953dae6423b9f0e68f377aeb5da 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/i18n/en/service.json
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/i18n/en/service.json
@@ -45,7 +45,9 @@
             "theField": "The field ",
             "hasAnInvalidValue": " has an invalid value: ",
             "noServicesFound": "No services found",
-            "provider": "Provider"
+            "provider": "Provider",
+            "legalNote": "Adding, deleting or modifying a contract implies a new revision of the legal level.",
+            "export": "Export to:"
         }
     },
     "acsmiservicesApp": {
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/i18n/en/user-management.json b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/i18n/en/user-management.json
index 4b2c478e283de4de9714ce213c728d499d449653..ac3d2ee8d0527c5dd0b0ee299ba290e44cf5128b 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/i18n/en/user-management.json
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/i18n/en/user-management.json
@@ -35,6 +35,10 @@
         "createdBy": "Created by",
         "createdDate": "Created date",
         "lastModifiedBy": "Modified by",
-        "lastModifiedDate": "Modified date"
+        "lastModifiedDate": "Modified date",
+        "csp": "Cloud Service Provider",
+        "dev": "Developer / User",
+        "lgl": "Legal expert",
+        "adm": "Administrator"
     }
 }
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/index.html b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/index.html
index 877534ef1915fde7de807e4222e1f4ce50093f75..ecd2d4039696abde2676045a1bf1fa9f31386984 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/index.html
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/main/webapp/index.html
@@ -94,6 +94,8 @@
     <script src="app/search/search.controller.js"></script>
     <script src="app/legal/legal.state.js"></script>
     <script src="app/legal/legal.controller.js"></script>
+    <script src="app/legal/legal-questionnaire.controller.js"></script>
+    <script src="app/legal/legal.service.js"></script>
     <script src="app/provider/provider-members-dialog.controller.js"></script>
     <script src="app/provider/provider-members-delete-dialog.controller.js"></script>
     <script src="app/provider/provider-members.controller.js"></script>
@@ -110,6 +112,8 @@
     <script src="app/entities/service/service-reactivate-dialog.controller.js"></script>
     <script src="app/entities/service/service-dialog.controller.js"></script>
     <script src="app/entities/service/service-detail.controller.js"></script>
+    <script src="app/entities/service/service-detail-popup.controller.js"></script>
+    <script src="app/entities/service/service-legal-popup.controller.js"></script>
     <script src="app/entities/service/service-delete-dialog.controller.js"></script>
     <script src="app/entities/service/service.state.js"></script>
     <script src="app/entities/service/service.service.js"></script>
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/config/WebConfigurerTest.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/config/WebConfigurerTest.java
index 094589df40effbb81abfa8e81234b3354c201374..c3fd11817de0bd5220b1e4ce030ec7ecf8f3b366 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/config/WebConfigurerTest.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/config/WebConfigurerTest.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/config/WebConfigurerTestController.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/config/WebConfigurerTestController.java
index 56849b3407a8139d3a6f16d117104117fc4c10f6..14a8a844f55d2f39f7c2fb2382d25f0d6e4d2e9b 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/config/WebConfigurerTestController.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/config/WebConfigurerTestController.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/gateway/responserewriting/SwaggerBasePathRewritingFilterTest.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/gateway/responserewriting/SwaggerBasePathRewritingFilterTest.java
index b4185e4c038d0ea294fab3b60c196a238d49a1b1..c9a6d26885a438c9aca6bcc81ea63455ba92a537 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/gateway/responserewriting/SwaggerBasePathRewritingFilterTest.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/gateway/responserewriting/SwaggerBasePathRewritingFilterTest.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/repository/CustomAuditEventRepositoryIntTest.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/repository/CustomAuditEventRepositoryIntTest.java
index 3348294a32246e0e0e37d7903e2cbf43ce758a70..61eeecaf1ddd470adfe8ba38f66df316c077c9f7 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/repository/CustomAuditEventRepositoryIntTest.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/repository/CustomAuditEventRepositoryIntTest.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/security/SecurityUtilsUnitTest.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/security/SecurityUtilsUnitTest.java
index 9940fba0cfc1753b7da022c2765ec05c7303bae1..4d7457196fd8ac625c10f75c9a8f445783bc69db 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/security/SecurityUtilsUnitTest.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/security/SecurityUtilsUnitTest.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/security/jwt/JWTFilterTest.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/security/jwt/JWTFilterTest.java
index 7f70c72d74cb54c0bd4a562f26ef96d5e3646348..9069b9fee2d85245363d79126643998b79f37373 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/security/jwt/JWTFilterTest.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/security/jwt/JWTFilterTest.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/security/jwt/TokenProviderTest.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/security/jwt/TokenProviderTest.java
index b7b7a83e3b92af073a7e784539c0e847338aa11c..8420472e6f213c1153a7b21984ab9c506a74f1b3 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/security/jwt/TokenProviderTest.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/security/jwt/TokenProviderTest.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/service/MailServiceIntTest.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/service/MailServiceIntTest.java
index 263637daa2baf9804d623468945174cfe9fdbe5a..d19544ad819dbaf02ad87171aa2918ff40a9d94a 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/service/MailServiceIntTest.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/service/MailServiceIntTest.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/service/UserServiceIntTest.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/service/UserServiceIntTest.java
index 42845404aa4c6fdb512fd2f61f662e3f1e4dddc7..0dd2a8c7bf951e0bf6e5cfed2fb0635f191e281c 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/service/UserServiceIntTest.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/service/UserServiceIntTest.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/web/rest/AccountResourceIntTest.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/web/rest/AccountResourceIntTest.java
index 2ae36996930a413558838b261d5c194241e638f2..89b809e8dae418ab3c8bc0f0bd658c9d51907847 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/web/rest/AccountResourceIntTest.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/web/rest/AccountResourceIntTest.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
@@ -471,7 +472,7 @@ public class AccountResourceIntTest {
         Optional<User> userDup = userRepository.findOneByLogin("badguy");
         assertThat(userDup.isPresent()).isTrue();
         assertThat(userDup.get().getAuthorities()).hasSize(2)
-            .containsExactly(authorityRepository.findOne(AuthoritiesConstants.USER), authorityRepository.findOne(AuthoritiesConstants.PA_OWNER));
+            .containsExactly(authorityRepository.findOne(AuthoritiesConstants.USER), authorityRepository.findOne(AuthoritiesConstants.CSP));
     }
 
     @Test
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/web/rest/AuditResourceIntTest.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/web/rest/AuditResourceIntTest.java
index 8f66e780b0a89efc2c0ffbf2f3dc9b086e805f20..81f49ffab2d306c84a3c9d0e901689c104cbdf80 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/web/rest/AuditResourceIntTest.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/web/rest/AuditResourceIntTest.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/web/rest/LogsResourceIntTest.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/web/rest/LogsResourceIntTest.java
index 0b771287206759fbdbce3f5f1947d85a8361967d..e4b0b51eeae087c5041c0456cf2e2c2219da6ab1 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/web/rest/LogsResourceIntTest.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/web/rest/LogsResourceIntTest.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/web/rest/ProfileInfoResourceIntTest.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/web/rest/ProfileInfoResourceIntTest.java
index ba2a900a086674ca90737adb1ae4733ab3f2d1e7..97a710fbd2abbc3a484786228aa19ce11d3e64e7 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/web/rest/ProfileInfoResourceIntTest.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/web/rest/ProfileInfoResourceIntTest.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/web/rest/TestUtil.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/web/rest/TestUtil.java
index c6b290b8f115fcb45d46794a6ef5a2f47645b04a..be07344e773d023af805a959cd13b565c8a48c51 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/web/rest/TestUtil.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/web/rest/TestUtil.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/web/rest/UserJWTControllerIntTest.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/web/rest/UserJWTControllerIntTest.java
index 9d0b5e080bd1d879abdf6a5f9ac2628fafeeb19b..2515cb1dba119375115fb7b4536f7faf68e2e725 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/web/rest/UserJWTControllerIntTest.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/web/rest/UserJWTControllerIntTest.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/web/rest/UserResourceIntTest.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/web/rest/UserResourceIntTest.java
index bf4184bec2a1a61a668022c81f17b7a02ce93b9a..20c40a432883ce3bd8f51ee6984b6ddc48cfae2a 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/web/rest/UserResourceIntTest.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/web/rest/UserResourceIntTest.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/web/rest/errors/ExceptionTranslatorIntTest.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/web/rest/errors/ExceptionTranslatorIntTest.java
index 59449a6d6494e35862f7a7f8a6d392ead76f72ff..c313094e5106803ec6a0ddf1fa6e1cab6fbe9c29 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/web/rest/errors/ExceptionTranslatorIntTest.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/web/rest/errors/ExceptionTranslatorIntTest.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/web/rest/errors/ExceptionTranslatorTestController.java b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/web/rest/errors/ExceptionTranslatorTestController.java
index 0e0b9afc877c06d766884756498fc5b124875263..f770ff6221ea89c033bb3bb82a1548cc2430bdbe 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/web/rest/errors/ExceptionTranslatorTestController.java
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/java/eu/decideh2020/acsmi/frontend/server/web/rest/errors/ExceptionTranslatorTestController.java
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/karma.conf.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/karma.conf.js
index 63946cca03d2b65f4f55bcae5822138344936ae3..16ba30b7cee22c849d74656cceb8c7090d276d6c 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/karma.conf.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/karma.conf.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/app/account/activate/activate.controller.spec.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/app/account/activate/activate.controller.spec.js
index c5f755b14dc11acab3ae8c32747135ede7cfde6e..24d98220a033a1ce3175fb6f6fb326435d3fb243 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/app/account/activate/activate.controller.spec.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/app/account/activate/activate.controller.spec.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/app/account/password/password-strength-bar.directive.spec.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/app/account/password/password-strength-bar.directive.spec.js
index f0aaf0d487c00bebcf9243dbce913ac0dbac41a8..e5d40a1aa5681b4dd23fc63f6b8867c18fea6806 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/app/account/password/password-strength-bar.directive.spec.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/app/account/password/password-strength-bar.directive.spec.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/app/account/password/password.controller.spec.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/app/account/password/password.controller.spec.js
index b20bc76f6c4df0cae6b7f0091d44313000648110..6992f55390b3780c1f3e75428064998abe3b1ab2 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/app/account/password/password.controller.spec.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/app/account/password/password.controller.spec.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/app/account/register/register.controller.spec.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/app/account/register/register.controller.spec.js
index ef0a33547e5a5e8793cd22d4f6f45272655a7a7c..f9e162bc8daa6a6ef84dee983971a8b6b798f942 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/app/account/register/register.controller.spec.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/app/account/register/register.controller.spec.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/app/account/reset/finish/reset.finish.controller.spec.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/app/account/reset/finish/reset.finish.controller.spec.js
index a12e37accf76bb60d18c9237815b849b33f6fb7e..0414874194593a487397da6426b21d54b9343bb2 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/app/account/reset/finish/reset.finish.controller.spec.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/app/account/reset/finish/reset.finish.controller.spec.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/app/account/reset/request/reset.request.controller.spec.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/app/account/reset/request/reset.request.controller.spec.js
index 343ce20f30e309d51a71d66556fe202de10ac2d7..c58d0750dff8fcf49b3d8ece825bec9798f99b14 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/app/account/reset/request/reset.request.controller.spec.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/app/account/reset/request/reset.request.controller.spec.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/app/account/settings/settings.controller.spec.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/app/account/settings/settings.controller.spec.js
index f5907fc9954ea0fb051319b8f3a33979117d43f6..d3940b88fd3a00c297379202b0abdfa4ec10257f 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/app/account/settings/settings.controller.spec.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/app/account/settings/settings.controller.spec.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/app/admin/health/health.controller.spec.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/app/admin/health/health.controller.spec.js
index d208aa88724cc81b6eb47a490ebce9c54a5cda37..217ab3f1b4ad4535b95ca68343402773089cb722 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/app/admin/health/health.controller.spec.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/app/admin/health/health.controller.spec.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/app/components/login/login.controller.spec.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/app/components/login/login.controller.spec.js
index a789904a6832a8b5f1a1d7f73ab67bd32d6d3442..42f31bc0d67a8e44791bdcc43616ffc67013da6d 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/app/components/login/login.controller.spec.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/app/components/login/login.controller.spec.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/app/entities/service/service-detail.controller.spec.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/app/entities/service/service-detail.controller.spec.js
index c5fe2b481f1c4eda237e66caab6f3cad1a0cb010..147a96bd6915acbdb4672210edcec155d81a6fb1 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/app/entities/service/service-detail.controller.spec.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/app/entities/service/service-detail.controller.spec.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/app/services/auth/auth.services.spec.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/app/services/auth/auth.services.spec.js
index 888815e93e0339b6f72aab715dc9305b0443d208..79b315221b9b0b8b1bd0096ca1f076237e9dce7b 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/app/services/auth/auth.services.spec.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/app/services/auth/auth.services.spec.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/helpers/httpBackend.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/helpers/httpBackend.js
index da1083020ab7e5017c97cd14d2a71c2b9e3b5f76..57fdd977517f376e4fa17a7a3d5581c2cec78bfb 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/helpers/httpBackend.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/helpers/httpBackend.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/helpers/module.js b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/helpers/module.js
index 760b4070c9163eb1a12db79f8f24cc896d3e5690..de699d25e799e81879f43fd46ef9173c542b446e 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/helpers/module.js
+++ b/ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server/src/test/javascript/spec/helpers/module.js
@@ -18,6 +18,7 @@
  * 
  * Contributors (in alphabetical order):
  * 
+ * Alberto Molinuevo					Tecnalia
  * Gorka Benguria                       Tecnalia
  * Iñaki Etxaniz                        Tecnalia
  * Juncal Alonso                        Tecnalia
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.registry/mvnw b/ACSmI/Discovery/eu.decideh2020.acsmi.registry/mvnw
deleted file mode 100644
index a1ba1bf554bb63c401f90c6a472c21470ed4e164..0000000000000000000000000000000000000000
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.registry/mvnw
+++ /dev/null
@@ -1,233 +0,0 @@
-#!/bin/sh
-# ----------------------------------------------------------------------------
-# 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.
-# ----------------------------------------------------------------------------
-
-# ----------------------------------------------------------------------------
-# Maven2 Start Up Batch script
-#
-# Required ENV vars:
-# ------------------
-#   JAVA_HOME - location of a JDK home dir
-#
-# Optional ENV vars
-# -----------------
-#   M2_HOME - location of maven2's installed home dir
-#   MAVEN_OPTS - parameters passed to the Java VM when running Maven
-#     e.g. to debug Maven itself, use
-#       set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
-#   MAVEN_SKIP_RC - flag to disable loading of mavenrc files
-# ----------------------------------------------------------------------------
-
-if [ -z "$MAVEN_SKIP_RC" ] ; then
-
-  if [ -f /etc/mavenrc ] ; then
-    . /etc/mavenrc
-  fi
-
-  if [ -f "$HOME/.mavenrc" ] ; then
-    . "$HOME/.mavenrc"
-  fi
-
-fi
-
-# OS specific support.  $var _must_ be set to either true or false.
-cygwin=false;
-darwin=false;
-mingw=false
-case "`uname`" in
-  CYGWIN*) cygwin=true ;;
-  MINGW*) mingw=true;;
-  Darwin*) darwin=true
-           #
-           # Look for the Apple JDKs first to preserve the existing behaviour, and then look
-           # for the new JDKs provided by Oracle.
-           #
-           if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK ] ; then
-             #
-             # Apple JDKs
-             #
-             export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home
-           fi
-
-           if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Java/JavaVirtualMachines/CurrentJDK ] ; then
-             #
-             # Apple JDKs
-             #
-             export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home
-           fi
-
-           if [ -z "$JAVA_HOME" ] && [ -L "/Library/Java/JavaVirtualMachines/CurrentJDK" ] ; then
-             #
-             # Oracle JDKs
-             #
-             export JAVA_HOME=/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home
-           fi
-
-           if [ -z "$JAVA_HOME" ] && [ -x "/usr/libexec/java_home" ]; then
-             #
-             # Apple JDKs
-             #
-             export JAVA_HOME=`/usr/libexec/java_home`
-           fi
-           ;;
-esac
-
-if [ -z "$JAVA_HOME" ] ; then
-  if [ -r /etc/gentoo-release ] ; then
-    JAVA_HOME=`java-config --jre-home`
-  fi
-fi
-
-if [ -z "$M2_HOME" ] ; then
-  ## resolve links - $0 may be a link to maven's home
-  PRG="$0"
-
-  # need this for relative symlinks
-  while [ -h "$PRG" ] ; do
-    ls=`ls -ld "$PRG"`
-    link=`expr "$ls" : '.*-> \(.*\)$'`
-    if expr "$link" : '/.*' > /dev/null; then
-      PRG="$link"
-    else
-      PRG="`dirname "$PRG"`/$link"
-    fi
-  done
-
-  saveddir=`pwd`
-
-  M2_HOME=`dirname "$PRG"`/..
-
-  # make it fully qualified
-  M2_HOME=`cd "$M2_HOME" && pwd`
-
-  cd "$saveddir"
-  # echo Using m2 at $M2_HOME
-fi
-
-# For Cygwin, ensure paths are in UNIX format before anything is touched
-if $cygwin ; then
-  [ -n "$M2_HOME" ] &&
-    M2_HOME=`cygpath --unix "$M2_HOME"`
-  [ -n "$JAVA_HOME" ] &&
-    JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
-  [ -n "$CLASSPATH" ] &&
-    CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
-fi
-
-# For Migwn, ensure paths are in UNIX format before anything is touched
-if $mingw ; then
-  [ -n "$M2_HOME" ] &&
-    M2_HOME="`(cd "$M2_HOME"; pwd)`"
-  [ -n "$JAVA_HOME" ] &&
-    JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
-  # TODO classpath?
-fi
-
-if [ -z "$JAVA_HOME" ]; then
-  javaExecutable="`which javac`"
-  if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
-    # readlink(1) is not available as standard on Solaris 10.
-    readLink=`which readlink`
-    if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
-      if $darwin ; then
-        javaHome="`dirname \"$javaExecutable\"`"
-        javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
-      else
-        javaExecutable="`readlink -f \"$javaExecutable\"`"
-      fi
-      javaHome="`dirname \"$javaExecutable\"`"
-      javaHome=`expr "$javaHome" : '\(.*\)/bin'`
-      JAVA_HOME="$javaHome"
-      export JAVA_HOME
-    fi
-  fi
-fi
-
-if [ -z "$JAVACMD" ] ; then
-  if [ -n "$JAVA_HOME"  ] ; then
-    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
-      # IBM's JDK on AIX uses strange locations for the executables
-      JAVACMD="$JAVA_HOME/jre/sh/java"
-    else
-      JAVACMD="$JAVA_HOME/bin/java"
-    fi
-  else
-    JAVACMD="`which java`"
-  fi
-fi
-
-if [ ! -x "$JAVACMD" ] ; then
-  echo "Error: JAVA_HOME is not defined correctly." >&2
-  echo "  We cannot execute $JAVACMD" >&2
-  exit 1
-fi
-
-if [ -z "$JAVA_HOME" ] ; then
-  echo "Warning: JAVA_HOME environment variable is not set."
-fi
-
-CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
-
-# For Cygwin, switch paths to Windows format before running java
-if $cygwin; then
-  [ -n "$M2_HOME" ] &&
-    M2_HOME=`cygpath --path --windows "$M2_HOME"`
-  [ -n "$JAVA_HOME" ] &&
-    JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
-  [ -n "$CLASSPATH" ] &&
-    CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
-fi
-
-# traverses directory structure from process work directory to filesystem root
-# first directory with .mvn subdirectory is considered project base directory
-find_maven_basedir() {
-  local basedir=$(pwd)
-  local wdir=$(pwd)
-  while [ "$wdir" != '/' ] ; do
-    if [ -d "$wdir"/.mvn ] ; then
-      basedir=$wdir
-      break
-    fi
-    wdir=$(cd "$wdir/.."; pwd)
-  done
-  echo "${basedir}"
-}
-
-# concatenates all lines of a file
-concat_lines() {
-  if [ -f "$1" ]; then
-    echo "$(tr -s '\n' ' ' < "$1")"
-  fi
-}
-
-export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-$(find_maven_basedir)}
-MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
-
-# Provide a "standardized" way to retrieve the CLI args that will
-# work with both Windows and non-Windows executions.
-MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
-export MAVEN_CMD_LINE_ARGS
-
-WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
-
-exec "$JAVACMD" \
-  $MAVEN_OPTS \
-  -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
-  "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
-  ${WRAPPER_LAUNCHER} "$@"
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.registry/mvnw.cmd b/ACSmI/Discovery/eu.decideh2020.acsmi.registry/mvnw.cmd
deleted file mode 100644
index 2b934e89dd1d9872b747047fa696477264a86ad8..0000000000000000000000000000000000000000
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.registry/mvnw.cmd
+++ /dev/null
@@ -1,145 +0,0 @@
-@REM ----------------------------------------------------------------------------
-@REM Licensed to the Apache Software Foundation (ASF) under one
-@REM or more contributor license agreements.  See the NOTICE file
-@REM distributed with this work for additional information
-@REM regarding copyright ownership.  The ASF licenses this file
-@REM to you under the Apache License, Version 2.0 (the
-@REM "License"); you may not use this file except in compliance
-@REM with the License.  You may obtain a copy of the License at
-@REM
-@REM    http://www.apache.org/licenses/LICENSE-2.0
-@REM
-@REM Unless required by applicable law or agreed to in writing,
-@REM software distributed under the License is distributed on an
-@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-@REM KIND, either express or implied.  See the License for the
-@REM specific language governing permissions and limitations
-@REM under the License.
-@REM ----------------------------------------------------------------------------
-
-@REM ----------------------------------------------------------------------------
-@REM Maven2 Start Up Batch script
-@REM
-@REM Required ENV vars:
-@REM JAVA_HOME - location of a JDK home dir
-@REM
-@REM Optional ENV vars
-@REM M2_HOME - location of maven2's installed home dir
-@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
-@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending
-@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
-@REM     e.g. to debug Maven itself, use
-@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
-@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
-@REM ----------------------------------------------------------------------------
-
-@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
-@echo off
-@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on'
-@if "%MAVEN_BATCH_ECHO%" == "on"  echo %MAVEN_BATCH_ECHO%
-
-@REM set %HOME% to equivalent of $HOME
-if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
-
-@REM Execute a user defined script before this one
-if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
-@REM check for pre script, once with legacy .bat ending and once with .cmd ending
-if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
-if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
-:skipRcPre
-
-@setlocal
-
-set ERROR_CODE=0
-
-@REM To isolate internal variables from possible post scripts, we use another setlocal
-@setlocal
-
-@REM ==== START VALIDATION ====
-if not "%JAVA_HOME%" == "" goto OkJHome
-
-echo.
-echo Error: JAVA_HOME not found in your environment. >&2
-echo Please set the JAVA_HOME variable in your environment to match the >&2
-echo location of your Java installation. >&2
-echo.
-goto error
-
-:OkJHome
-if exist "%JAVA_HOME%\bin\java.exe" goto init
-
-echo.
-echo Error: JAVA_HOME is set to an invalid directory. >&2
-echo JAVA_HOME = "%JAVA_HOME%" >&2
-echo Please set the JAVA_HOME variable in your environment to match the >&2
-echo location of your Java installation. >&2
-echo.
-goto error
-
-@REM ==== END VALIDATION ====
-
-:init
-
-set MAVEN_CMD_LINE_ARGS=%*
-
-@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
-@REM Fallback to current working directory if not found.
-
-set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
-IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
-
-set EXEC_DIR=%CD%
-set WDIR=%EXEC_DIR%
-:findBaseDir
-IF EXIST "%WDIR%"\.mvn goto baseDirFound
-cd ..
-IF "%WDIR%"=="%CD%" goto baseDirNotFound
-set WDIR=%CD%
-goto findBaseDir
-
-:baseDirFound
-set MAVEN_PROJECTBASEDIR=%WDIR%
-cd "%EXEC_DIR%"
-goto endDetectBaseDir
-
-:baseDirNotFound
-set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
-cd "%EXEC_DIR%"
-
-:endDetectBaseDir
-
-IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
-
-@setlocal EnableExtensions EnableDelayedExpansion
-for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
-@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
-
-:endReadAdditionalConfig
-
-SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
-
-set WRAPPER_JAR="".\.mvn\wrapper\maven-wrapper.jar""
-set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
-
-%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CMD_LINE_ARGS%
-if ERRORLEVEL 1 goto error
-goto end
-
-:error
-set ERROR_CODE=1
-
-:end
-@endlocal & set ERROR_CODE=%ERROR_CODE%
-
-if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
-@REM check for post script, once with legacy .bat ending and once with .cmd ending
-if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
-if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
-:skipRcPost
-
-@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
-if "%MAVEN_BATCH_PAUSE%" == "on" pause
-
-if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
-
-exit /B %ERROR_CODE%
\ No newline at end of file
diff --git a/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.src.dvp/src/main/docker/.dockerignore b/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.src.dvp/src/main/docker/.dockerignore
new file mode 100644
index 0000000000000000000000000000000000000000..d3064226ba3aa9312002c53467a04ecccec42ef5
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.src.dvp/src/main/docker/.dockerignore
@@ -0,0 +1,3 @@
+node_modules/
+node/
+bower_components/
\ No newline at end of file
diff --git a/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.src.dvp/src/main/docker/.gitignore b/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.src.dvp/src/main/docker/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..59a4e66eaea0a4fdb51672d97673ad79089ec530
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.src.dvp/src/main/docker/.gitignore
@@ -0,0 +1 @@
+/sources
\ No newline at end of file
diff --git a/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.src.dvp/src/main/docker/Dockerfile b/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.src.dvp/src/main/docker/Dockerfile
index 9d522f6e27911f96f28aac438156d436d9f6dea6..2cb0f4f692c8d587b55d9a85abfa070f5f776aaf 100644
--- a/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.src.dvp/src/main/docker/Dockerfile
+++ b/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.src.dvp/src/main/docker/Dockerfile
@@ -1,11 +1,32 @@
-FROM localhost:5000/eu.decideh2020.int.springboot.server.repo
-
-ENV MYSQL_DOMAIN mysql
-ENV REGISTRY_DOMAIN registry
-
-WORKDIR /
-
-# Install Maven
-COPY maven-init.sh /maven-init.sh
-RUN chmod +x /maven-init.sh
-RUN sh ./maven-init.sh
+FROM decideh2020/jhipster.repo as builder
+
+ARG GIT_CREDENTIALS
+ARG ARTIFACTORY_USE
+ARG ARTIFACTORY_USER
+ARG ARTIFACTORY_PASSWORD
+ARG ARTIFACTORY_MAVEN_REPO
+ARG ACSMI_BACKEND_GIT_REF
+ARG VERSION
+
+COPY . /
+
+RUN \
+	chmod 750 /*.sh 
+
+RUN \
+	. /configartifactorymaven.sh && \
+	python /processSourcesJson.py && \
+	rm -rf /sources
+
+FROM openjdk:8-jdk-alpine
+
+COPY --from=builder /app.war .
+
+ENV SPRING_OUTPUT_ANSI_ENABLED=ALWAYS \
+    JHIPSTER_SLEEP=0 \
+    JAVA_OPTS=""
+
+EXPOSE 8761 
+CMD echo "The application will start in ${JHIPSTER_SLEEP}s..." && \
+    sleep ${JHIPSTER_SLEEP} && \
+    java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar /app.war
\ No newline at end of file
diff --git a/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.src.dvp/src/main/docker/config.sh b/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.src.dvp/src/main/docker/config.sh
new file mode 100644
index 0000000000000000000000000000000000000000..da719fbc3b9f081a578745d2efe4d194c5cd7069
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.src.dvp/src/main/docker/config.sh
@@ -0,0 +1,23 @@
+#!/bin/bash
+sourcespath=$1
+project=$2
+echo "sourcespath $sourcespath"
+echo "project $project"
+application=$sourcespath/$project/src/main/resources/config/application-prod.yml
+if [ -f $application ]; then
+   echo "File $applicationdev exists."
+   sed -i "s/localhost:3306/acsmi.mysql:3306/g" $application
+   sed -i "s/localhost:8761/jhipster.registry:8761/g" $application
+else
+   echo "File $applicationdev does not exist."
+fi
+
+bootstrap=$sourcespath/$project/src/main/resources/config/bootstrap-prod.yml
+if [ -f $bootstrap ]; then
+   echo "File $bootstrap exists."
+   sed -i "s/localhost:8761/jhipster.registry:8761/g" $bootstrap
+else
+   echo "File $bootstrap does not exist."
+fi
+
+#rm -rf ${xpref}
\ No newline at end of file
diff --git a/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.src.dvp/src/main/docker/configartifactorymaven.sh b/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.src.dvp/src/main/docker/configartifactorymaven.sh
new file mode 100644
index 0000000000000000000000000000000000000000..1fe2d19e9e517411406ad9d1d44766503a1bec7d
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.src.dvp/src/main/docker/configartifactorymaven.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+if [ "$ARTIFACTORY_USE" != "Y" ]
+then
+  echo "Without Artifactory"
+else
+
+  echo "With Artifactory"
+  cp /settings.xml /usr/share/maven/conf/.
+  mkdir /root/.m2
+  cp /settings-security.xml /root/.m2/.
+  export MAVEN_USER="$ARTIFACTORY_USER"
+  export MASTER_PASSWORD="$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1)"
+  export MAVEN_MASTER_PASSWORD="$(mvn --encrypt-master-password $MASTER_PASSWORD)"
+
+  sed -i "s@\${.*}@$MAVEN_MASTER_PASSWORD@g" /root/.m2/settings-security.xml
+  export MAVEN_PASSWORD="$(mvn --encrypt-password $ARTIFACTORY_PASSWORD)"
+
+fi
+
+#rm -rf /root/.m2/repository/ #to test that it works
diff --git a/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.src.dvp/src/main/docker/maven-init.sh b/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.src.dvp/src/main/docker/maven-init.sh
deleted file mode 100644
index f6e1749735795f466c2aa424ea7a80b3a1e470fc..0000000000000000000000000000000000000000
--- a/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.src.dvp/src/main/docker/maven-init.sh
+++ /dev/null
@@ -1,26 +0,0 @@
-repo=/WP5/ACSmI_discovery/eu.decideh2020.acsmi.backend.services.server
-#repo=/WP5/ACSmI_discovery/eu.decideh2020.acsmi.frontend.server
-#repo=/WP5/ACSmI_discovery/eu.decideh2020.acsmi.registry
-echo "repo $repo"
-
-applicationdev=${repo}/src/main/resources/config/application-dev.yml
-if [ -f $applicationdev ]; then
-   echo "File $applicationdev exists."
-   sed -i "s/localhost:3306/$MYSQL_DOMAIN:3306/g" $applicationdev
-   sed -i "s/localhost:8761/$REGISTRY_DOMAIN:8761/g" $applicationdev
-else
-   echo "File $applicationdev does not exist."
-fi
-
-bootstrap=${repo}/src/main/resources/config/bootstrap.yml
-if [ -f $bootstrap ]; then
-   echo "File $bootstrap exists."
-   sed -i "s/localhost:8761/$REGISTRY_DOMAIN:8761/g" $bootstrap
-else
-   echo "File $bootstrap does not exist."
-fi
-
-mvn package -Dmaven.test.skip=true -f ${repo}/pom.xml
-cp ${repo}/target/*.war app.war
-
-#rm -rf ${xpref}
\ No newline at end of file
diff --git a/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.src.dvp/src/main/docker/moveappwar.sh b/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.src.dvp/src/main/docker/moveappwar.sh
new file mode 100644
index 0000000000000000000000000000000000000000..07ef1909223c63502219db61c47130b3e7ddfc75
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.src.dvp/src/main/docker/moveappwar.sh
@@ -0,0 +1,6 @@
+#!/bin/bash
+sourcespath=$1
+project=$2
+echo "sourcespath $sourcespath"
+echo "project $project"
+cp $sourcespath/$project/target/*.war /app.war || true
diff --git a/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.src.dvp/src/main/docker/processSource.sh b/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.src.dvp/src/main/docker/processSource.sh
new file mode 100644
index 0000000000000000000000000000000000000000..2ed9b80bb6427bb8713a47e55bb71f456cc508fd
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.src.dvp/src/main/docker/processSource.sh
@@ -0,0 +1,58 @@
+#!/bin/bash -e
+
+if [ $# -lt 5 ]; then
+    echo "Arguments required: dockerRepoUrl projectPath gitRef mavenParams"
+fi
+
+dockerRepoUrl=$1
+projectPath=$2
+gitRef=$3
+gitCredentials=$4
+mavenParams=$5
+repofix=$dockerRepoUrl
+
+[ -d /sources ] || mkdir -p /sources
+
+#phase 1 clone repo if necesary
+repo_dir=`echo $dockerRepoUrl | sed 's%^.*/\([^/]*\)\.git$%\1%g'`
+echo "Git repository: $dockerRepoUrl"
+echo "repository dir: $repo_dir"
+if [ "$VERSION" != "local" ] && [ ! -d /sources/$repo_dir/.git ]; then
+	echo "Enter to clone repo..."
+	rm -rf /sources/$repo_dir/* > /dev/null 2>&1 || true
+	if [[ ! -z "$gitCredentials" ]]; then
+		repofix=${repofix/https:\/\//https:\/\/$gitCredentials@}
+	fi
+	git clone "$repofix" /sources/$repo_dir
+	echo "repository cloned"
+else
+	echo "repository found in local folder: $repo_dir"
+fi
+
+#phase 2 checkout right version
+if [ "$VERSION" != "local" ] && [ ! -z "$gitRef" ]; then
+	echo "checking out: $gitRef"
+	git -C /sources/$repo_dir checkout $gitRef --force
+fi
+
+#phase 3 config 
+/config.sh /sources/$repo_dir $projectPath
+
+#phase 4 mvn 
+#NOTE jhipster bower instalation requires a file /root/.bowerrc to be run as root
+if [[ ! -z "$mavenParams" ]]; then
+	echo "copying jhipster resouces"
+	cp -r /bower_components  /sources/$repo_dir/$projectPath/src/main/webapp/ || true
+	cp -r /node_modules /sources/$repo_dir/$projectPath/. || true
+	cp -r /node /sources/$repo_dir/$projectPath/. || true
+	echo "maven execution: -f sources/$repo_dir/$projectPath/pom.xml  $mavenParams"
+	mvn  -f /sources/$repo_dir/$projectPath/pom.xml $mavenParams || true
+	#because jhister
+	echo "saving jhister resources" 
+	cp -r /sources/$repo_dir/$projectPath/src/main/webapp/bower_components / || true
+	cp -r /sources/$repo_dir/$projectPath/node_modules / || true
+	cp -r /sources/$repo_dir/$projectPath/node / || true
+fi
+
+#phase 5 move app war 
+/moveappwar.sh /sources/$repo_dir $projectPath
diff --git a/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.src.dvp/src/main/docker/processSourcesJson.py b/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.src.dvp/src/main/docker/processSourcesJson.py
new file mode 100644
index 0000000000000000000000000000000000000000..674930941ff948eaf85a0ec23dec4d79686f6f3c
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.src.dvp/src/main/docker/processSourcesJson.py
@@ -0,0 +1,9 @@
+import json
+import subprocess
+import os
+
+with open('/sources.json', 'r') as handle:
+    parsed = json.load(handle)
+    for source in parsed['sources']:
+        subprocess.check_call(['/processSource.sh',source['source']['repo'],source['source']['path'],os.getenv(source['source']['git_ref'],''),os.getenv(source['source']['git_credentials'],''),source['source']['maven']])
+
diff --git a/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.src.dvp/src/main/docker/root/.bowerrc b/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.src.dvp/src/main/docker/root/.bowerrc
new file mode 100644
index 0000000000000000000000000000000000000000..71ed2b173356f933345913d2ca9099f850b268ae
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.src.dvp/src/main/docker/root/.bowerrc
@@ -0,0 +1 @@
+{"allow_root":true,"registry":"https://registry.bower.io"}
diff --git a/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.src.dvp/src/main/docker/root/.m2/settings-security.xml b/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.src.dvp/src/main/docker/root/.m2/settings-security.xml
new file mode 100644
index 0000000000000000000000000000000000000000..663d9c91ac87740dfecdba5f1da1c113d9379c6f
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.src.dvp/src/main/docker/root/.m2/settings-security.xml
@@ -0,0 +1,3 @@
+<settingsSecurity>
+<master>${env.MAVEN_MASTER_PASSWORD}</master>
+</settingsSecurity>
\ No newline at end of file
diff --git a/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.src.dvp/src/main/docker/settings-security.xml b/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.src.dvp/src/main/docker/settings-security.xml
new file mode 100644
index 0000000000000000000000000000000000000000..663d9c91ac87740dfecdba5f1da1c113d9379c6f
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.src.dvp/src/main/docker/settings-security.xml
@@ -0,0 +1,3 @@
+<settingsSecurity>
+<master>${env.MAVEN_MASTER_PASSWORD}</master>
+</settingsSecurity>
\ No newline at end of file
diff --git a/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.src.dvp/src/main/docker/settings.xml b/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.src.dvp/src/main/docker/settings.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0a4df6f659d664ce3eb0e4c6cfdfb8c5ccef3ee7
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.src.dvp/src/main/docker/settings.xml
@@ -0,0 +1,306 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+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.
+-->
+
+<!--
+ | This is the configuration file for Maven. It can be specified at two levels:
+ |
+ |  1. User Level. This settings.xml file provides configuration for a single user,
+ |                 and is normally provided in ${user.home}/.m2/settings.xml.
+ |
+ |                 NOTE: This location can be overridden with the CLI option:
+ |
+ |                 -s /path/to/user/settings.xml
+ |
+ |  2. Global Level. This settings.xml file provides configuration for all Maven
+ |                 users on a machine (assuming they're all using the same Maven
+ |                 installation). It's normally provided in
+ |                 ${maven.conf}/settings.xml.
+ |
+ |                 NOTE: This location can be overridden with the CLI option:
+ |
+ |                 -gs /path/to/global/settings.xml
+ |
+ | The sections in this sample file are intended to give you a running start at
+ | getting the most out of your Maven installation. Where appropriate, the default
+ | values (values used when the setting is not specified) are provided.
+ |
+ |-->
+<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
+          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
+  <!-- localRepository
+   | The path to the local repository maven will use to store artifacts.
+   |
+   | Default: ${user.home}/.m2/repository
+  <localRepository>/path/to/local/repo</localRepository>
+  -->
+
+  <!-- interactiveMode
+   | This will determine whether maven prompts you when it needs input. If set to false,
+   | maven will use a sensible default value, perhaps based on some other setting, for
+   | the parameter in question.
+   |
+   | Default: true
+  <interactiveMode>true</interactiveMode>
+  -->
+
+  <!-- offline
+   | Determines whether maven should attempt to connect to the network when executing a build.
+   | This will have an effect on artifact downloads, artifact deployment, and others.
+   |
+   | Default: false
+  <offline>false</offline>
+  -->
+
+  <!-- pluginGroups
+   | This is a list of additional group identifiers that will be searched when resolving plugins by their prefix, i.e.
+   | when invoking a command line like "mvn prefix:goal". Maven will automatically add the group identifiers
+   | "org.apache.maven.plugins" and "org.codehaus.mojo" if these are not already contained in the list.
+   |-->
+  <pluginGroups>
+    <!-- pluginGroup
+     | Specifies a further group identifier to use for plugin lookup.
+    <pluginGroup>com.your.plugins</pluginGroup>
+    -->
+  </pluginGroups>
+
+  <!-- proxies
+   | This is a list of proxies which can be used on this machine to connect to the network.
+   | Unless otherwise specified (by system property or command-line switch), the first proxy
+   | specification in this list marked as active will be used.
+   |-->
+  <proxies>
+    <!-- proxy
+     | Specification for one proxy, to be used in connecting to the network.
+     |
+    <proxy>
+      <id>optional</id>
+      <active>true</active>
+      <protocol>http</protocol>
+      <username>proxyuser</username>
+      <password>proxypass</password>
+      <host>proxy.host.net</host>
+      <port>80</port>
+      <nonProxyHosts>local.net|some.host.com</nonProxyHosts>
+    </proxy>
+    -->
+  </proxies>
+
+  <!-- servers
+   | This is a list of authentication profiles, keyed by the server-id used within the system.
+   | Authentication profiles can be used whenever maven must make a connection to a remote server.
+   |-->
+  <servers>
+    <server>
+      <username>${env.MAVEN_USER}</username>
+      <password>${env.MAVEN_PASSWORD}</password>
+      <id>central</id>
+    </server>
+    <server>
+      <username>${env.MAVEN_USER}</username>
+      <password>${env.MAVEN_PASSWORD}</password>
+      <id>snapshots</id>
+    </server>
+  
+    <!-- server
+     | Specifies the authentication information to use when connecting to a particular server, identified by
+     | a unique name within the system (referred to by the 'id' attribute below).
+     |
+     | NOTE: You should either specify username/password OR privateKey/passphrase, since these pairings are
+     |       used together.
+     |
+    <server>
+      <id>deploymentRepo</id>
+      <username>repouser</username>
+      <password>repopwd</password>
+    </server>
+    -->
+
+    <!-- Another sample, using keys to authenticate.
+    <server>
+      <id>siteServer</id>
+      <privateKey>/path/to/private/key</privateKey>
+      <passphrase>optional; leave empty if not used.</passphrase>
+    </server>
+    -->
+  </servers>
+
+  <!-- mirrors
+   | This is a list of mirrors to be used in downloading artifacts from remote repositories.
+   |
+   | It works like this: a POM may declare a repository to use in resolving certain artifacts.
+   | However, this repository may have problems with heavy traffic at times, so people have mirrored
+   | it to several places.
+   |
+   | That repository definition will have a unique id, so we can create a mirror reference for that
+   | repository, to be used as an alternate download site. The mirror site will be the preferred
+   | server for that repository.
+   |-->
+  <mirrors>
+    <!-- mirror
+     | Specifies a repository mirror site to use instead of a given repository. The repository that
+     | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
+     | for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
+     |
+    <mirror>
+      <id>mirrorId</id>
+      <mirrorOf>repositoryId</mirrorOf>
+      <name>Human Readable Name for this Mirror.</name>
+      <url>http://my.repository.com/repo/path</url>
+    </mirror>
+     -->
+  </mirrors>
+
+  <!-- profiles
+   | This is a list of profiles which can be activated in a variety of ways, and which can modify
+   | the build process. Profiles provided in the settings.xml are intended to provide local machine-
+   | specific paths and repository locations which allow the build to work in the local environment.
+   |
+   | For example, if you have an integration testing plugin - like cactus - that needs to know where
+   | your Tomcat instance is installed, you can provide a variable here such that the variable is
+   | dereferenced during the build process to configure the cactus plugin.
+   |
+   | As noted above, profiles can be activated in a variety of ways. One way - the activeProfiles
+   | section of this document (settings.xml) - will be discussed later. Another way essentially
+   | relies on the detection of a system property, either matching a particular value for the property,
+   | or merely testing its existence. Profiles can also be activated by JDK version prefix, where a
+   | value of '1.4' might activate a profile when the build is executed on a JDK version of '1.4.2_07'.
+   | Finally, the list of active profiles can be specified directly from the command line.
+   |
+   | NOTE: For profiles defined in the settings.xml, you are restricted to specifying only artifact
+   |       repositories, plugin repositories, and free-form properties to be used as configuration
+   |       variables for plugins in the POM.
+   |
+   |-->
+  <profiles>
+    <profile>
+      <repositories>
+        <repository>
+          <snapshots>
+            <enabled>false</enabled>
+          </snapshots>
+          <id>central</id>
+          <name>${env.ARTIFACTORY_MAVEN_REPO}</name>
+          <url>https://artifact.tecnalia.com:443/${env.ARTIFACTORY_MAVEN_REPO}</url>
+        </repository>
+        <repository>
+          <snapshots />
+          <id>snapshots</id>
+          <name>${env.ARTIFACTORY_MAVEN_REPO}</name>
+          <url>https://artifact.tecnalia.com:443/${env.ARTIFACTORY_MAVEN_REPO}</url>
+        </repository>
+      </repositories>
+      <pluginRepositories>
+        <pluginRepository>
+          <snapshots>
+            <enabled>false</enabled>
+          </snapshots>
+          <id>central</id>
+          <name>${env.ARTIFACTORY_MAVEN_REPO}</name>
+          <url>https://artifact.tecnalia.com:443/${env.ARTIFACTORY_MAVEN_REPO}</url>
+        </pluginRepository>
+        <pluginRepository>
+          <snapshots />
+          <id>snapshots</id>
+          <name>${env.ARTIFACTORY_MAVEN_REPO}</name>
+          <url>https://artifact.tecnalia.com:443/${env.ARTIFACTORY_MAVEN_REPO}</url>
+        </pluginRepository>
+      </pluginRepositories>
+      <id>artifactory</id>
+    </profile>
+    <!-- profile
+     | Specifies a set of introductions to the build process, to be activated using one or more of the
+     | mechanisms described above. For inheritance purposes, and to activate profiles via <activatedProfiles/>
+     | or the command line, profiles have to have an ID that is unique.
+     |
+     | An encouraged best practice for profile identification is to use a consistent naming convention
+     | for profiles, such as 'env-dev', 'env-test', 'env-production', 'user-jdcasey', 'user-brett', etc.
+     | This will make it more intuitive to understand what the set of introduced profiles is attempting
+     | to accomplish, particularly when you only have a list of profile id's for debug.
+     |
+     | This profile example uses the JDK version to trigger activation, and provides a JDK-specific repo.
+    <profile>
+      <id>jdk-1.4</id>
+
+      <activation>
+        <jdk>1.4</jdk>
+      </activation>
+
+      <repositories>
+        <repository>
+          <id>jdk14</id>
+          <name>Repository for JDK 1.4 builds</name>
+          <url>http://www.myhost.com/maven/jdk14</url>
+          <layout>default</layout>
+          <snapshotPolicy>always</snapshotPolicy>
+        </repository>
+      </repositories>
+    </profile>
+    -->
+
+    <!--
+     | Here is another profile, activated by the system property 'target-env' with a value of 'dev',
+     | which provides a specific path to the Tomcat instance. To use this, your plugin configuration
+     | might hypothetically look like:
+     |
+     | ...
+     | <plugin>
+     |   <groupId>org.myco.myplugins</groupId>
+     |   <artifactId>myplugin</artifactId>
+     |
+     |   <configuration>
+     |     <tomcatLocation>${tomcatPath}</tomcatLocation>
+     |   </configuration>
+     | </plugin>
+     | ...
+     |
+     | NOTE: If you just wanted to inject this configuration whenever someone set 'target-env' to
+     |       anything, you could just leave off the <value/> inside the activation-property.
+     |
+    <profile>
+      <id>env-dev</id>
+
+      <activation>
+        <property>
+          <name>target-env</name>
+          <value>dev</value>
+        </property>
+      </activation>
+
+      <properties>
+        <tomcatPath>/path/to/tomcat/instance</tomcatPath>
+      </properties>
+    </profile>
+    -->
+  </profiles>
+
+  <activeProfiles>
+    <activeProfile>artifactory</activeProfile>
+  </activeProfiles>
+  <!-- activeProfiles
+   | List of profiles that are active for all builds.
+   |
+  <activeProfiles>
+    <activeProfile>alwaysActiveProfile</activeProfile>
+    <activeProfile>anotherAlwaysActiveProfile</activeProfile>
+  </activeProfiles>
+  -->
+</settings>
diff --git a/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.src.dvp/src/main/docker/sources.json b/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.src.dvp/src/main/docker/sources.json
new file mode 100644
index 0000000000000000000000000000000000000000..a3cab321444d39b06d4ff7a1bfd1f8a6aab8448e
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.src.dvp/src/main/docker/sources.json
@@ -0,0 +1,13 @@
+{
+	"sources": [
+		{
+			"source": {
+				"repo": "https://git.code.tecnalia.com/DECIDE_Public/DECIDE_Components.git",
+				"path": "ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.server",
+				"git_ref": "ACSMI_BACKEND_GIT_REF",
+				"git_credentials": "GIT_CREDENTIALS",
+				"maven": "package -Pprod -Dmaven.test.skip=true -DskipTests"
+			}
+		}
+	]
+} 
\ No newline at end of file
diff --git a/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.test.00.src.dvp/src/main/docker/Dockerfile b/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.test.00.src.dvp/src/main/docker/Dockerfile
index 43ede9652da69ee29a37c8f2dd1deb968afaab13..118776208dbce452568ce9a238c5e5250814a262 100644
--- a/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.test.00.src.dvp/src/main/docker/Dockerfile
+++ b/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.test.00.src.dvp/src/main/docker/Dockerfile
@@ -2,7 +2,7 @@
 # we choose normal 
 FROM ubuntu
 
-RUN apt-get update && apt-get install mysql-client -y && rm -rf /var/lib/apt/lists/*
+RUN apt-get update && apt-get install curl mysql-client -y && rm -rf /var/lib/apt/lists/*
 
 ENV MYSQL_DB_USER root
 # ENV MYSQL_DB_PASSWORD 
diff --git a/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.test.00.src.dvp/src/main/docker/run.sh b/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.test.00.src.dvp/src/main/docker/run.sh
index d9ed8f7172425ab66e23c818b9f125335a35e64c..6dd441117d1872d1d8006e37b8c9f471150dc331 100644
--- a/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.test.00.src.dvp/src/main/docker/run.sh
+++ b/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.test.00.src.dvp/src/main/docker/run.sh
@@ -2,15 +2,29 @@
 #mysql -u $MYSQL_DB_USER -p$MYSQL_DB_PASSWORD -h $MYSQL_DB_HOST -D $MYSQL_DB_NAME < sql/test.sql
 #mysql -u $MYSQL_DB_USER -h $MYSQL_DB_HOST -D $MYSQL_DB_NAME < sql/test.sql
 #adds force to avoid stop during import errors
-mysql_ready() {
-	mysqladmin ping --host=$MYSQL_DB_HOST --user=$MYSQL_DB_USER  > /dev/null 2>&1
-}
 
-while !(mysql_ready)
-do
-   sleep 3
-   echo "waiting for mysql ..."
+#mysql -u $MYSQL_DB_USER -p $MYSQL_DB_PASSWORD -h $MYSQL_DB_HOST -D $MYSQL_DB_NAME < sql/discovery_backend_server_test.sql
+#adds force to avoid stop during import errors
+
+while ! mysqladmin ping -h $MYSQL_DB_HOST --silent; do
+    sleep 1
+done
+
+#wait for the frontend to be on
+URL="http://acsmi.frontend:8080/"
+
+echo "URL=$URL"
+
+#$(curl --output /dev/null --silent --head --fail $URL) it does not work it returns 500
+until $(curl --output /dev/null --silent --head --fail $URL); do
+    printf 'waiting for jhipster frontend'
+    echo ''
+	sleep 5
 done
+
+echo waiting 15 segs more in case of
+sleep 15
+
 mysql -u $MYSQL_DB_USER -f -h $MYSQL_DB_HOST -D $MYSQL_DB_NAME < sql/test.sql
 if [ $? -eq 0 ]
 then
diff --git a/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.test.00.src.dvp/src/main/docker/sql/test.sql b/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.test.00.src.dvp/src/main/docker/sql/test.sql
index 14859343224a4d9305be3a2dc7558f928609e97e..fd33c87610500f5aeec5e1d39539b370b8cc3b87 100644
--- a/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.test.00.src.dvp/src/main/docker/sql/test.sql
+++ b/ACSmI/Discovery/eu.decideh2020.int.acsmi.backend.services.server.test.00.src.dvp/src/main/docker/sql/test.sql
@@ -1,365 +1,510 @@
--- MySQL dump 10.13  Distrib 5.7.19, for Win64 (x86_64)
---
--- Host: localhost    Database: acsmi_backend_services_server
--- ------------------------------------------------------
--- Server version	5.7.19
-
-/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
-/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
-/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
-/*!40101 SET NAMES utf8 */;
-/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
-/*!40103 SET TIME_ZONE='+00:00' */;
-/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
-/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
-/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
-/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
-
---
--- Current Database: `acsmi_backend_services_server`
---
-
-CREATE DATABASE /*!32312 IF NOT EXISTS*/ `acsmi_backend_services_server` /*!40100 DEFAULT CHARACTER SET latin1 */;
-
-USE `acsmi_backend_services_server`;
-
---
--- Table structure for table `databasechangelog`
---
-
-DROP TABLE IF EXISTS `databasechangelog`;
-/*!40101 SET @saved_cs_client     = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `databasechangelog` (
-  `ID` varchar(255) NOT NULL,
-  `AUTHOR` varchar(255) NOT NULL,
-  `FILENAME` varchar(255) NOT NULL,
-  `DATEEXECUTED` datetime NOT NULL,
-  `ORDEREXECUTED` int(11) NOT NULL,
-  `EXECTYPE` varchar(10) NOT NULL,
-  `MD5SUM` varchar(35) DEFAULT NULL,
-  `DESCRIPTION` varchar(255) DEFAULT NULL,
-  `COMMENTS` varchar(255) DEFAULT NULL,
-  `TAG` varchar(255) DEFAULT NULL,
-  `LIQUIBASE` varchar(20) DEFAULT NULL,
-  `CONTEXTS` varchar(255) DEFAULT NULL,
-  `LABELS` varchar(255) DEFAULT NULL,
-  `DEPLOYMENT_ID` varchar(10) DEFAULT NULL
-) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Dumping data for table `databasechangelog`
---
-
-LOCK TABLES `databasechangelog` WRITE;
-/*!40000 ALTER TABLE `databasechangelog` DISABLE KEYS */;
-INSERT INTO `databasechangelog` VALUES ('00000000000001','jhipster','classpath:config/liquibase/changelog/00000000000000_initial_schema.xml','2018-11-14 14:45:02',1,'EXECUTED','7:9d88ecd533d5a3530e304f778b9dc982','createTable tableName=jhi_persistent_audit_event; createTable tableName=jhi_persistent_audit_evt_data; addPrimaryKey tableName=jhi_persistent_audit_evt_data; createIndex indexName=idx_persistent_audit_event, tableName=jhi_persistent_audit_event; c...','',NULL,'3.5.3',NULL,NULL,'2203101960'),('20170523072708-1','jhipster','classpath:config/liquibase/changelog/20170523072708_added_entity_Service.xml','2018-11-14 14:45:02',2,'EXECUTED','7:b2878d1c838426e7f8d852719a9ace94','createTable tableName=service; dropDefaultValue columnName=deleted_date, tableName=service','',NULL,'3.5.3',NULL,NULL,'2203101960'),('20170717105245-1','jhipster','classpath:config/liquibase/changelog/20170717105245_added_entity_ServiceClass.xml','2018-11-14 14:45:02',3,'EXECUTED','7:fd2ea387398c6ca51c331111cdb0ef13','createTable tableName=service_class; dropDefaultValue columnName=deleted_date, tableName=service_class','',NULL,'3.5.3',NULL,NULL,'2203101960'),('20170717114231-1','jhipster','classpath:config/liquibase/changelog/20170717114231_added_entity_ServiceAttributeType.xml','2018-11-14 14:45:02',4,'EXECUTED','7:9a00075abf08381f7210697028ccfc8a','createTable tableName=service_attribute_type; dropDefaultValue columnName=deleted_date, tableName=service_attribute_type','',NULL,'3.5.3',NULL,NULL,'2203101960'),('20170717115247-1','jhipster','classpath:config/liquibase/changelog/20170717115247_added_entity_ServiceAttributeValue.xml','2018-11-14 14:45:02',5,'EXECUTED','7:e86ef170d794941cd5e42693fa976513','createTable tableName=service_attribute_value; dropDefaultValue columnName=deleted_date, tableName=service_attribute_value','',NULL,'3.5.3',NULL,NULL,'2203101960'),('20170718105315-1','jhipster','classpath:config/liquibase/changelog/20170718105315_added_entity_ServiceClassAttribute.xml','2018-11-14 14:45:02',6,'EXECUTED','7:6f7411acd09ec651030c2f222f805d83','createTable tableName=service_class_attribute; dropDefaultValue columnName=deleted_date, tableName=service_class_attribute','',NULL,'3.5.3',NULL,NULL,'2203101960'),('20180515151200-1','jhipster','classpath:config/liquibase/changelog/20180515151200_added_entity_Definition.xml','2018-11-14 14:45:02',7,'EXECUTED','7:8757b65ff09ded8df03df7d367d2dff1','createTable tableName=definition; dropDefaultValue columnName=deleted_date, tableName=definition','',NULL,'3.5.3',NULL,NULL,'2203101960'),('20181005115200-1','jhipster','classpath:config/liquibase/changelog/20181005115200_added_entity_ServiceIncidence.xml','2018-11-14 14:45:02',8,'EXECUTED','7:6e4fdfd49c2a5b8b72df17238b93ee39','createTable tableName=service_incidence; dropDefaultValue columnName=timestamp, tableName=service_incidence; dropDefaultValue columnName=deleted_date, tableName=service_incidence','',NULL,'3.5.3',NULL,NULL,'2203101960');
-/*!40000 ALTER TABLE `databasechangelog` ENABLE KEYS */;
-UNLOCK TABLES;
-
---
--- Table structure for table `databasechangeloglock`
---
-
-DROP TABLE IF EXISTS `databasechangeloglock`;
-/*!40101 SET @saved_cs_client     = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `databasechangeloglock` (
-  `ID` int(11) NOT NULL,
-  `LOCKED` bit(1) NOT NULL,
-  `LOCKGRANTED` datetime DEFAULT NULL,
-  `LOCKEDBY` varchar(255) DEFAULT NULL,
-  PRIMARY KEY (`ID`)
-) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Dumping data for table `databasechangeloglock`
---
-
-LOCK TABLES `databasechangeloglock` WRITE;
-/*!40000 ALTER TABLE `databasechangeloglock` DISABLE KEYS */;
-INSERT INTO `databasechangeloglock` VALUES (1,'\0',NULL,NULL);
-/*!40000 ALTER TABLE `databasechangeloglock` ENABLE KEYS */;
-UNLOCK TABLES;
-
---
--- Table structure for table `definition`
---
-
-DROP TABLE IF EXISTS `definition`;
-/*!40101 SET @saved_cs_client     = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `definition` (
-  `id` bigint(20) NOT NULL AUTO_INCREMENT,
-  `code` varchar(4) NOT NULL,
-  `value` varchar(60) NOT NULL,
-  `ismainattribute` bit(1) NOT NULL,
-  `ischeckoption` bit(1) NOT NULL,
-  `typeid` bigint(20) DEFAULT NULL,
-  `created_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
-  `last_modified_date` timestamp NULL DEFAULT NULL,
-  `deleted_date` timestamp NULL,
-  PRIMARY KEY (`id`)
-) ENGINE=InnoDB AUTO_INCREMENT=63 DEFAULT CHARSET=latin1;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Dumping data for table `definition`
---
-
-LOCK TABLES `definition` WRITE;
-/*!40000 ALTER TABLE `definition` DISABLE KEYS */;
-INSERT INTO `definition` VALUES (1,'00AS','Asia','','\0',1,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(2,'AUAS','Australia','','\0',2,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(3,'CHAS','China','','\0',2,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(4,'JPAS','Japan','','\0',2,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(5,'00EU','Europe','','\0',1,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(6,'FREU','France','','\0',2,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(7,'DEEU','Germany','','\0',2,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(8,'IEEU','Ireland','','\0',2,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(9,'SPEU','Spain','','\0',2,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(10,'UKEU','United Kingdom','','\0',2,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(11,'00NA','North America','','\0',1,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(12,'CANA','Canada','','\0',2,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(13,'MXNA','Mexico','','\0',2,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(14,'USNA','United States','','\0',2,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(15,'00SA','South America','','\0',1,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(16,'ARSA','Argentina','','\0',2,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(17,'BRSA','Brazil','','\0',2,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(18,'AIME','AIMES','','\0',3,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(19,'AMAZ','Amazon','','\0',3,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(20,'ARSY','Arsys','','\0',3,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(21,'AZUR','Azure','','\0',3,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(22,'GOOG','Google','','\0',3,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(23,'GEPU','General purpose','','\0',8,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(24,'COOP','Compute optimized','','\0',8,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(25,'GPUI','GPU instances','','\0',8,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(26,'MEOP','Memory optimized','','\0',8,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(27,'SGOP','Storage optimized','','\0',8,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(28,'HPCO','High performance compute','','\0',8,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(29,'IPV4','IPv4','','\0',9,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(30,'00RE','Relational','','\0',11,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(31,'AURE','Amazon Aurora','','\0',12,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(32,'ARRE','Amazon RDS','','\0',12,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(33,'MARE','MariaDB','','\0',12,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(34,'MSRE','MS SQL Server','','\0',12,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(35,'MYRE','MySQL','','\0',12,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(36,'ORRE','Oracle','','\0',12,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(37,'PORE','PostgreSQL','','\0',12,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(38,'00NR','Non-relational','','\0',11,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(39,'AMNR','Amazon DynamoDB','','\0',12,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(40,'CANR','Apache Cassandra','','\0',12,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(41,'MONR','MongoDB','','\0',12,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(42,'BACK','Backup','','\0',16,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(43,'GENE','General','','\0',16,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(44,'FILE','Files','','\0',17,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(45,'OBJT','Objects','','\0',17,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(46,'QUEU','Queues','','\0',17,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(47,'BLOK','Block','','\0',17,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(48,'GEOS','Geo-redundant storage (GRS)','','\0',19,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(49,'LOCS','Locally redundant storage (LRS)','','\0',19,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(50,'REAS','Read-access geo-redundant storage (RA-GRS)','','\0',19,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(51,'ZONS','Zone-redundant storage (ZRS)','','\0',19,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(52,'LEG1','Legal Level 1','','\0',24,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(53,'LEG2','Legal Level 2','','\0',24,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(54,'LEG3','Legal Level 3','','\0',24,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(55,'LEG4','Legal Level 4','','\0',24,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(56,'CRT1','ISO 27001 / 27017 / 27018','\0','',24,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(57,'CRT2','BSI C5 (Germany)','\0','',24,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(58,'CRT3','PCI - DSS','\0','',24,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(59,'CRT4','EU - Wide Certification Scheme (TBD)','\0','',24,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(60,'CRT5','Other','\0','',24,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(61,'CLSI','CloudSigma','','\0',3,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(62,'ZUEU','Zurich','','\0',2,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL);
-/*!40000 ALTER TABLE `definition` ENABLE KEYS */;
-UNLOCK TABLES;
-
---
--- Table structure for table `jhi_persistent_audit_event`
---
-
-DROP TABLE IF EXISTS `jhi_persistent_audit_event`;
-/*!40101 SET @saved_cs_client     = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `jhi_persistent_audit_event` (
-  `event_id` bigint(20) NOT NULL AUTO_INCREMENT,
-  `principal` varchar(50) NOT NULL,
-  `event_date` timestamp NULL DEFAULT NULL,
-  `event_type` varchar(255) DEFAULT NULL,
-  PRIMARY KEY (`event_id`),
-  KEY `idx_persistent_audit_event` (`principal`,`event_date`)
-) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Dumping data for table `jhi_persistent_audit_event`
---
-
-LOCK TABLES `jhi_persistent_audit_event` WRITE;
-/*!40000 ALTER TABLE `jhi_persistent_audit_event` DISABLE KEYS */;
-/*!40000 ALTER TABLE `jhi_persistent_audit_event` ENABLE KEYS */;
-UNLOCK TABLES;
-
---
--- Table structure for table `jhi_persistent_audit_evt_data`
---
-
-DROP TABLE IF EXISTS `jhi_persistent_audit_evt_data`;
-/*!40101 SET @saved_cs_client     = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `jhi_persistent_audit_evt_data` (
-  `event_id` bigint(20) NOT NULL,
-  `name` varchar(150) NOT NULL,
-  `value` varchar(255) DEFAULT NULL,
-  PRIMARY KEY (`event_id`,`name`),
-  KEY `idx_persistent_audit_evt_data` (`event_id`),
-  CONSTRAINT `fk_evt_pers_audit_evt_data` FOREIGN KEY (`event_id`) REFERENCES `jhi_persistent_audit_event` (`event_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Dumping data for table `jhi_persistent_audit_evt_data`
---
-
-LOCK TABLES `jhi_persistent_audit_evt_data` WRITE;
-/*!40000 ALTER TABLE `jhi_persistent_audit_evt_data` DISABLE KEYS */;
-/*!40000 ALTER TABLE `jhi_persistent_audit_evt_data` ENABLE KEYS */;
-UNLOCK TABLES;
-
---
--- Table structure for table `service`
---
-
-DROP TABLE IF EXISTS `service`;
-/*!40101 SET @saved_cs_client     = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `service` (
-  `id` bigint(20) NOT NULL AUTO_INCREMENT,
-  `servicename` varchar(70) NOT NULL,
-  `firstcontract` longblob,
-  `secondcontract` longblob,
-  `thirdcontract` longblob,
-  `serviceclassid` bigint(20) NOT NULL,
-  `created_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
-  `last_modified_date` timestamp NULL DEFAULT NULL,
-  `deleted_date` timestamp NULL,
-  PRIMARY KEY (`id`)
-) ENGINE=InnoDB AUTO_INCREMENT=49 DEFAULT CHARSET=latin1;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Dumping data for table `service`
---
-
-LOCK TABLES `service` WRITE;
-/*!40000 ALTER TABLE `service` DISABLE KEYS */;
-INSERT INTO `service` VALUES (1,'C1_Spain',NULL,NULL,NULL,3,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(2,'C1_USA',NULL,NULL,NULL,3,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(3,'C2_Europe',NULL,NULL,NULL,3,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(4,'C2_UnitedKingdom',NULL,NULL,NULL,3,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(5,'C4_Europe',NULL,NULL,NULL,3,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(6,'C4_USA',NULL,NULL,NULL,3,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(7,'C8_Germany',NULL,NULL,NULL,3,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(8,'C8_Spain',NULL,NULL,NULL,3,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(9,'Storage1_Spain',NULL,NULL,NULL,2,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(10,'Storage1_USA',NULL,NULL,NULL,2,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(11,'Storage4_Europe',NULL,NULL,NULL,2,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(12,'Storage3_USA',NULL,NULL,NULL,2,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(13,'t2.nano',NULL,NULL,NULL,3,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(14,'t2.medium',NULL,NULL,NULL,3,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(15,'m5.large',NULL,NULL,NULL,3,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(16,'m4.4xlarge',NULL,NULL,NULL,3,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(17,'m5.2xlarge',NULL,NULL,NULL,3,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(18,'c5.2xlarge',NULL,NULL,NULL,3,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(19,'c4.8xlarge',NULL,NULL,NULL,3,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(20,'g3.8xlarge',NULL,NULL,NULL,3,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(21,'p2.8xlarge',NULL,NULL,NULL,3,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(22,'r4.xlarge',NULL,NULL,NULL,3,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(23,'x1e.4xlarge',NULL,NULL,NULL,3,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(24,'StandardStorage1_Europe',NULL,NULL,NULL,2,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(25,'StandardStorage1_USA',NULL,NULL,NULL,2,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(26,'db.m3.medium',NULL,NULL,NULL,1,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(27,'db.r4.4xlarge',NULL,NULL,NULL,1,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(28,'db.dynamo.3',NULL,NULL,NULL,1,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(29,'db.dynamo.4',NULL,NULL,NULL,1,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(30,'A2v2',NULL,NULL,NULL,3,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(31,'A2v2_USA',NULL,NULL,NULL,3,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(32,'B8_USA',NULL,NULL,NULL,3,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(33,'B8_Germany',NULL,NULL,NULL,3,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(34,'A3_France',NULL,NULL,NULL,3,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(35,'DS13v2',NULL,NULL,NULL,3,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(36,'Storage_AZ_1',NULL,NULL,NULL,2,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(37,'Storage_AZ_2',NULL,NULL,NULL,2,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(38,'Storage_AZ_3',NULL,NULL,NULL,2,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(39,'db.mysql.AZ_1',NULL,NULL,NULL,1,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(40,'db.postgreSQL.AZ',NULL,NULL,NULL,1,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(41,'n1-standard-16',NULL,NULL,NULL,3,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(42,'n1-highmem-16',NULL,NULL,NULL,3,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(43,'Storage_G_1',NULL,NULL,NULL,2,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(44,'Storage_G_2',NULL,NULL,NULL,2,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(45,'db.postgreSQL.G',NULL,NULL,NULL,1,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(46,'db.mysql.G',NULL,NULL,NULL,1,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(47,'VM_1_CS',NULL,NULL,NULL,3,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(48,'m1.medium',NULL,NULL,NULL,3,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL);
-/*!40000 ALTER TABLE `service` ENABLE KEYS */;
-UNLOCK TABLES;
-
---
--- Table structure for table `service_attribute_type`
---
-
-DROP TABLE IF EXISTS `service_attribute_type`;
-/*!40101 SET @saved_cs_client     = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `service_attribute_type` (
-  `id` bigint(20) NOT NULL AUTO_INCREMENT,
-  `name` varchar(50) NOT NULL,
-  `nfrname` varchar(20) DEFAULT NULL,
-  `isenumeration` bit(1) NOT NULL,
-  `ischecklist` bit(1) NOT NULL,
-  `iscommon` bit(1) NOT NULL,
-  `isfunctionalrequirement` bit(1) NOT NULL,
-  `parentid` bigint(20) DEFAULT NULL,
-  `childid` bigint(20) DEFAULT NULL,
-  `units` varchar(20) DEFAULT NULL,
-  `unitfactor` varchar(30) DEFAULT NULL,
-  `unitrule` varchar(2) DEFAULT NULL,
-  `checklistevalrule` varchar(70) DEFAULT NULL,
-  `created_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
-  `last_modified_date` timestamp NULL DEFAULT NULL,
-  `deleted_date` timestamp NULL,
-  PRIMARY KEY (`id`)
-) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=latin1;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Dumping data for table `service_attribute_type`
---
-
-LOCK TABLES `service_attribute_type` WRITE;
-/*!40000 ALTER TABLE `service_attribute_type` DISABLE KEYS */;
-INSERT INTO `service_attribute_type` VALUES (1,'Region','Region','','\0','','\0',NULL,2,NULL,NULL,NULL,NULL,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(2,'Zone','Zone','','\0','','\0',1,NULL,NULL,NULL,NULL,NULL,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(3,'Provider','Provider','','\0','','\0',NULL,NULL,NULL,NULL,NULL,NULL,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(4,'Virtual CPU Cores',NULL,'\0','\0','\0','',NULL,NULL,NULL,NULL,NULL,NULL,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(5,'Frequency per Core',NULL,'\0','\0','\0','',NULL,NULL,'MHz','1','>=',NULL,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(6,'Memory',NULL,'\0','\0','\0','',NULL,NULL,'MB,GB,TB','1048576,1024,1','>=',NULL,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(7,'Instance Storage',NULL,'\0','\0','\0','',NULL,NULL,'MB,GB,TB','1048576,1024,1','>=',NULL,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(8,'Optimized for',NULL,'','\0','\0','',NULL,NULL,NULL,NULL,NULL,NULL,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(9,'Public IP',NULL,'','\0','\0','',NULL,NULL,NULL,NULL,NULL,NULL,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(10,'Underpinning Technology',NULL,'\0','\0','\0','',NULL,NULL,NULL,NULL,NULL,NULL,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(11,'Database Type',NULL,'','\0','\0','',NULL,12,NULL,NULL,NULL,NULL,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(12,'Database Technology',NULL,'','\0','\0','',11,NULL,NULL,NULL,NULL,NULL,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(13,'Data Transfer IN',NULL,'\0','\0','\0','',NULL,NULL,'MB,GB,TB','1048576,1024,1','>=',NULL,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(14,'Data Transfer OUT',NULL,'\0','\0','\0','',NULL,NULL,'MB,GB,TB','1048576,1024,1','>=',NULL,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(15,'Database Storage Capacity',NULL,'\0','\0','\0','',NULL,NULL,'MB,GB,TB','1048576,1024,1','>=',NULL,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(16,'Storage Type',NULL,'','\0','\0','',NULL,NULL,NULL,NULL,NULL,NULL,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(17,'Storage Subtype',NULL,'','\0','\0','',NULL,NULL,NULL,NULL,NULL,NULL,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(18,'Storage Capacity',NULL,'\0','\0','\0','',NULL,NULL,'MB,GB,TB','1048576,1024,1','>=',NULL,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(19,'Storage Data Redundancy',NULL,'','\0','\0','',NULL,NULL,NULL,NULL,NULL,NULL,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(20,'Availability','Availability','\0','\0','\0','\0',NULL,NULL,'%','1','>=',NULL,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(21,'Response time: Virtual Machine Performance','Performance','\0','\0','\0','\0',NULL,NULL,'ns,ms,s','1000000000,1000,1','<=',NULL,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(22,'Transaction Unit (DTU): Database Performance','Performance','\0','\0','\0','\0',NULL,NULL,'ns,ms,s','1000000000,1000,1','<=',NULL,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(23,'Request - Response time: Storage Performance','Performance','\0','\0','\0','\0',NULL,NULL,'ns,ms,s','1000000000,1000,1','<=',NULL,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(24,'Legal Level/Accreditations','Legal Level','','','\0','\0',NULL,NULL,NULL,NULL,NULL,'variable > 4 ? \'LEG4\': \'LEG\' + variable','2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(25,'Cost/Currency','Cost/Currency','\0','\0','\0','\0',NULL,NULL,'€,£,$','1,1,1','<=',NULL,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL);
-/*!40000 ALTER TABLE `service_attribute_type` ENABLE KEYS */;
-UNLOCK TABLES;
-
---
--- Table structure for table `service_attribute_value`
---
-
-DROP TABLE IF EXISTS `service_attribute_value`;
-/*!40101 SET @saved_cs_client     = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `service_attribute_value` (
-  `id` bigint(20) NOT NULL AUTO_INCREMENT,
-  `serviceattributevalue` varchar(50) DEFAULT NULL,
-  `unitvalue` varchar(10) DEFAULT NULL,
-  `checklistvalue` varchar(40) DEFAULT NULL,
-  `serviceid` bigint(20) NOT NULL,
-  `serviceattributetypeid` bigint(20) NOT NULL,
-  `created_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
-  `last_modified_date` timestamp NULL DEFAULT NULL,
-  `deleted_date` timestamp NULL,
-  PRIMARY KEY (`id`)
-) ENGINE=InnoDB AUTO_INCREMENT=632 DEFAULT CHARSET=latin1;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Dumping data for table `service_attribute_value`
---
-
-LOCK TABLES `service_attribute_value` WRITE;
-/*!40000 ALTER TABLE `service_attribute_value` DISABLE KEYS */;
-INSERT INTO `service_attribute_value` VALUES (1,'00EU',NULL,NULL,1,1,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(2,'SPEU',NULL,NULL,1,2,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(3,'ARSY',NULL,NULL,1,3,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(4,'1',NULL,NULL,1,4,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(5,'1500',NULL,NULL,1,5,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(6,'1','GB',NULL,1,6,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(7,'40','GB',NULL,1,7,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(8,NULL,NULL,NULL,1,8,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(9,NULL,NULL,NULL,1,9,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(10,'VmWare',NULL,NULL,1,10,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(11,'99.5','%',NULL,1,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(12,'5','ms',NULL,1,21,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(13,'LEG2',NULL,'CRT1,CRT4',1,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(14,'15','€',NULL,1,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(15,'00NA',NULL,NULL,2,1,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(16,'USNA',NULL,NULL,2,2,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(17,'ARSY',NULL,NULL,2,3,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(18,'1',NULL,NULL,2,4,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(19,'1500',NULL,NULL,2,5,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(20,'1','GB',NULL,2,6,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(21,'40','GB',NULL,2,7,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(22,NULL,NULL,NULL,2,8,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(23,NULL,NULL,NULL,2,9,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(24,'VmWare',NULL,NULL,2,10,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(25,'99.5','%',NULL,2,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(26,'5','ms',NULL,2,21,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(27,'LEG1',NULL,'CRT3',2,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(28,'15','€',NULL,2,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(29,'00EU',NULL,NULL,3,1,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(30,'DEEU',NULL,NULL,3,2,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(31,'ARSY',NULL,NULL,3,3,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(32,'2',NULL,NULL,3,4,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(33,'1500',NULL,NULL,3,5,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(34,'4','GB',NULL,3,6,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(35,'60','GB',NULL,3,7,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(36,NULL,NULL,NULL,3,8,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(37,NULL,NULL,NULL,3,9,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(38,'VmWare',NULL,NULL,3,10,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(39,'99.6','%',NULL,3,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(40,'3','ms',NULL,3,21,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(41,'LEG2',NULL,'CRT1,CRT2',3,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(42,'40','€',NULL,3,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(43,'00EU',NULL,NULL,4,1,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(44,'UKEU',NULL,NULL,4,2,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(45,'ARSY',NULL,NULL,4,3,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(46,'2',NULL,NULL,4,4,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(47,'1500',NULL,NULL,4,5,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(48,'4','GB',NULL,4,6,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(49,'60','GB',NULL,4,7,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(50,NULL,NULL,NULL,4,8,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(51,NULL,NULL,NULL,4,9,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(52,'VmWare',NULL,NULL,4,10,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(53,'99.6','%',NULL,4,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(54,'3','ms',NULL,4,21,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(55,'LEG2',NULL,'CRT1,CRT4',4,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(56,'40','€',NULL,4,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(57,'00EU',NULL,NULL,5,1,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(58,NULL,NULL,NULL,5,2,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(59,'ARSY',NULL,NULL,5,3,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(60,'4',NULL,NULL,5,4,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(61,'1500',NULL,NULL,5,5,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(62,'8','GB',NULL,5,6,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(63,'100','GB',NULL,5,7,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(64,NULL,NULL,NULL,5,8,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(65,'IPV4',NULL,NULL,5,9,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(66,'VmWare',NULL,NULL,5,10,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(67,'99.8','%',NULL,5,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(68,'2','ms',NULL,5,21,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(69,'LEG2',NULL,'CRT1,CRT3',5,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(70,'80','€',NULL,5,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(71,'00NA',NULL,NULL,6,1,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(72,'USNA',NULL,NULL,6,2,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(73,'ARSY',NULL,NULL,6,3,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(74,'4',NULL,NULL,6,4,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(75,'1500',NULL,NULL,6,5,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(76,'8','GB',NULL,6,6,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(77,'100','GB',NULL,6,7,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(78,NULL,NULL,NULL,6,8,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(79,NULL,NULL,NULL,6,9,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(80,'VmWare',NULL,NULL,6,10,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(81,'99.8','%',NULL,6,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(82,'3','ms',NULL,6,21,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(83,'LEG1',NULL,'CRT5',6,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(84,'80','€',NULL,6,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(85,'00EU',NULL,NULL,7,1,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(86,'DEEU',NULL,NULL,7,2,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(87,'ARSY',NULL,NULL,7,3,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(88,'8',NULL,NULL,7,4,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(89,'1500',NULL,NULL,7,5,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(90,'16','GB',NULL,7,6,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(91,'200','GB',NULL,7,7,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(92,NULL,NULL,NULL,7,8,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(93,'IPV4',NULL,NULL,7,9,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(94,'VmWare',NULL,NULL,7,10,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(95,'99.9','%',NULL,7,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(96,'2','ms',NULL,7,21,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(97,'LEG2',NULL,'CRT1,CRT2',7,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(98,'150','€',NULL,7,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(99,'00EU',NULL,NULL,8,1,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(100,'SPEU',NULL,NULL,8,2,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(101,'ARSY',NULL,NULL,8,3,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(102,'8',NULL,NULL,8,4,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(103,'1500',NULL,NULL,8,5,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(104,'16','GB',NULL,8,6,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(105,'200','GB',NULL,8,7,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(106,NULL,NULL,NULL,8,8,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(107,'IPV4',NULL,NULL,8,9,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(108,'VmWare',NULL,NULL,8,10,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(109,'99.8','%',NULL,8,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(110,'2','ms',NULL,8,21,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(111,'LEG3',NULL,'CRT1,CRT4,CRT5',8,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(112,'150','€',NULL,8,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(113,'00EU',NULL,NULL,9,1,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(114,'SPEU',NULL,NULL,9,2,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(115,'ARSY',NULL,NULL,9,3,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(116,'GENE',NULL,NULL,9,16,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(117,'BLOK',NULL,NULL,9,17,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(118,'40','GB',NULL,9,18,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(119,'ZONS',NULL,NULL,9,19,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(120,'99.5','%',NULL,9,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(121,'5','ms',NULL,9,23,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(122,'LEG2',NULL,'CRT1,CRT4',9,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(123,'6','€',NULL,9,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(124,'00NA',NULL,NULL,10,1,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(125,'USNA',NULL,NULL,10,2,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(126,'ARSY',NULL,NULL,10,3,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(127,'GENE',NULL,NULL,10,16,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(128,'BLOK',NULL,NULL,10,17,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(129,'40','GB',NULL,10,18,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(130,'LOCS',NULL,NULL,10,19,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(131,'99.5','%',NULL,10,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(132,'5','ms',NULL,10,23,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(133,'LEG1',NULL,'CRT1',10,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(134,'6','€',NULL,10,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(135,'00EU',NULL,NULL,11,1,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(136,NULL,NULL,NULL,11,2,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(137,'ARSY',NULL,NULL,11,3,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(138,'GENE',NULL,NULL,11,16,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(139,'BLOK',NULL,NULL,11,17,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(140,'100','GB',NULL,11,18,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(141,'ZONS',NULL,NULL,11,19,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(142,'99.8','%',NULL,11,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(143,'3','ms',NULL,11,23,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(144,'LEG2',NULL,'CRT1,CRT4',11,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(145,'15','€',NULL,11,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(146,'00NA',NULL,NULL,12,1,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(147,'USNA',NULL,NULL,12,2,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(148,'ARSY',NULL,NULL,12,3,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(149,'GENE',NULL,NULL,12,16,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(150,'BLOK',NULL,NULL,12,17,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(151,'200','GB',NULL,12,18,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(152,'ZONS',NULL,NULL,12,19,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(153,'99.9','%',NULL,12,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(154,'2','ms',NULL,12,23,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(155,'LEG1',NULL,'CRT1',12,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(156,'30','€',NULL,12,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(157,'00EU',NULL,NULL,13,1,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(158,'IEEU',NULL,NULL,13,2,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(159,'AMAZ',NULL,NULL,13,3,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(160,'1',NULL,NULL,13,4,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(161,'1500',NULL,NULL,13,5,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(162,'0.5','GB',NULL,13,6,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(163,NULL,NULL,NULL,13,7,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(164,'GEPU',NULL,NULL,13,8,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(165,'IPV4',NULL,NULL,13,9,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(166,NULL,NULL,NULL,13,10,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(167,'98','%',NULL,13,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(168,'3','s',NULL,13,21,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(169,'LEG1',NULL,'CRT5',13,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(170,'4.53','$',NULL,13,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(171,'00NA',NULL,NULL,14,1,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(172,'USNA',NULL,NULL,14,2,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(173,'AMAZ',NULL,NULL,14,3,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(174,'2',NULL,NULL,14,4,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(175,'1500',NULL,NULL,14,5,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(176,'4','GB',NULL,14,6,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(177,NULL,NULL,NULL,14,7,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(178,'GEPU',NULL,NULL,14,8,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(179,'IPV4',NULL,NULL,14,9,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(180,NULL,NULL,NULL,14,10,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(181,'98.2','%',NULL,14,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(182,'2','s',NULL,14,21,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(183,'LEG2',NULL,'CRT1,CRT5',14,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(184,'39.75','$',NULL,14,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(185,'00NA',NULL,NULL,15,1,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(186,'CANA',NULL,NULL,15,2,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(187,'ARSY',NULL,NULL,15,3,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(188,'2',NULL,NULL,15,4,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(189,'1500',NULL,NULL,15,5,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(190,'8','GB',NULL,15,6,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(191,NULL,NULL,NULL,15,7,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(192,'GEPU',NULL,NULL,15,8,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(193,'IPV4',NULL,NULL,15,9,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(194,NULL,NULL,NULL,15,10,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(195,'98.5','%',NULL,15,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(196,'1','s',NULL,15,21,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(197,'LEG1',NULL,'CRT3',15,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(198,'77','$',NULL,15,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(199,'00EU',NULL,NULL,16,1,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(200,'SPEU',NULL,NULL,16,2,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(201,'AMAZ',NULL,NULL,16,3,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(202,'16',NULL,NULL,16,4,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(203,'1500',NULL,NULL,16,5,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(204,'64','GB',NULL,16,6,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(205,NULL,NULL,NULL,16,7,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(206,'GEPU',NULL,NULL,16,8,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(207,NULL,NULL,NULL,16,9,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(208,NULL,NULL,NULL,16,10,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(209,'99.8','%',NULL,16,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(210,'2','ns',NULL,16,21,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(211,'LEG3',NULL,'CRT1,CRT3,CRT4',16,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(212,'640','$',NULL,16,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(213,'00NA',NULL,NULL,17,1,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(214,'USNA',NULL,NULL,17,2,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(215,'AMAZ',NULL,NULL,17,3,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(216,'8',NULL,NULL,17,4,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(217,'1500',NULL,NULL,17,5,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(218,'32','GB',NULL,17,6,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(219,NULL,NULL,NULL,17,7,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(220,'GEPU',NULL,NULL,17,8,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(221,NULL,NULL,NULL,17,9,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(222,NULL,NULL,NULL,17,10,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(223,'99.2','%',NULL,17,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(224,'3','ms',NULL,17,21,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(225,'LEG2',NULL,'CRT1,CRT4',17,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(226,'323','$',NULL,17,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(227,'00NA',NULL,NULL,18,1,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(228,'CANA',NULL,NULL,18,2,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(229,'AMAZ',NULL,NULL,18,3,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(230,'8',NULL,NULL,18,4,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(231,'1500',NULL,NULL,18,5,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(232,'16','GB',NULL,18,6,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(233,NULL,NULL,NULL,18,7,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(234,'COOP',NULL,NULL,18,8,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(235,'IPV4',NULL,NULL,18,9,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(236,NULL,NULL,NULL,18,10,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(237,'99.4','%',NULL,18,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(238,'5','ms',NULL,18,21,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(239,'LEG3',NULL,'CRT1,CRT3,CRT5',18,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(240,'268','$',NULL,18,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(241,'00EU',NULL,NULL,19,1,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(242,'IEEU',NULL,NULL,19,2,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(243,'AMAZ',NULL,NULL,19,3,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(244,'36',NULL,NULL,19,4,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(245,'1500',NULL,NULL,19,5,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(246,'60','GB',NULL,19,6,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(247,NULL,NULL,NULL,19,7,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(248,'COOP',NULL,NULL,19,8,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(249,'IPV4',NULL,NULL,19,9,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(250,NULL,NULL,NULL,19,10,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(251,'99.8','%',NULL,19,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(252,'2','ms',NULL,19,21,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(253,'LEG2',NULL,'CRT1,CRT4',19,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(254,'1304','€',NULL,19,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(255,'00NA',NULL,NULL,20,1,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(256,'USNA',NULL,NULL,20,2,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(257,'AMAZ',NULL,NULL,20,3,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(258,'32',NULL,NULL,20,4,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(259,'1500',NULL,NULL,20,5,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(260,'244','GB',NULL,20,6,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(261,NULL,NULL,NULL,20,7,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(262,'GPUI',NULL,NULL,20,8,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(263,'IPV4',NULL,NULL,20,9,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(264,NULL,NULL,NULL,20,10,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(265,'99.8','%',NULL,20,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(266,'2','ms',NULL,20,21,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(267,'LEG2',NULL,'CRT1,CRT5',20,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(268,'2209','$',NULL,20,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(269,'00EU',NULL,NULL,21,1,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(270,'UKEU',NULL,NULL,21,2,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(271,'AMAZ',NULL,NULL,21,3,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(272,'32',NULL,NULL,21,4,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(273,'1500',NULL,NULL,21,5,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(274,'488','GB',NULL,21,6,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(275,NULL,NULL,NULL,21,7,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(276,'GPUI',NULL,NULL,21,8,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(277,'IPV4',NULL,NULL,21,9,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(278,NULL,NULL,NULL,21,10,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(279,'99.9','%',NULL,21,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(280,'2','ms',NULL,21,21,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(281,'LEG1',NULL,'CRT4',21,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(282,'5600','$',NULL,21,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(283,'00NA',NULL,NULL,22,1,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(284,'USNA',NULL,NULL,22,2,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(285,'AMAZ',NULL,NULL,22,3,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(286,'4',NULL,NULL,22,4,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(287,'1500',NULL,NULL,22,5,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(288,'30.5','GB',NULL,22,6,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(289,NULL,NULL,NULL,22,7,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(290,'MEOP',NULL,NULL,22,8,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(291,'IPV4',NULL,NULL,22,9,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(292,NULL,NULL,NULL,22,10,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(293,'98.5','%',NULL,22,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(294,'2','s',NULL,22,21,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(295,'LEG1',NULL,'CRT5',22,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(296,'214','€',NULL,22,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(297,'00EU',NULL,NULL,23,1,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(298,'DEEU',NULL,NULL,23,2,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(299,'AMAZ',NULL,NULL,23,3,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(300,'16',NULL,NULL,23,4,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(301,'1500',NULL,NULL,23,5,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(302,'488','GB',NULL,23,6,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(303,NULL,NULL,NULL,23,7,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(304,'MEOP',NULL,NULL,23,8,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(305,'IPV4',NULL,NULL,23,9,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(306,NULL,NULL,NULL,23,10,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(307,'99','%',NULL,23,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(308,'2','ms',NULL,23,21,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(309,'LEG2',NULL,'CRT1,CRT2',23,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(310,'3376','€',NULL,23,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(311,'00EU',NULL,NULL,24,1,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(312,'DEEU',NULL,NULL,24,2,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(313,'AMAZ',NULL,NULL,24,3,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(314,'GENE',NULL,NULL,24,16,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(315,'OBJT',NULL,NULL,24,17,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(316,'50','TB',NULL,24,18,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(317,'ZONS',NULL,NULL,24,19,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(318,'95','%',NULL,24,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(319,'3','s',NULL,24,23,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(320,'LEG2',NULL,'CRT1,CRT3',24,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(321,'25','€',NULL,24,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(322,'00NA',NULL,NULL,25,1,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(323,'USNA',NULL,NULL,25,2,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(324,'AMAZ',NULL,NULL,25,3,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(325,'GENE',NULL,NULL,25,16,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(326,'OBJT',NULL,NULL,25,17,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(327,'50','TB',NULL,25,18,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(328,'ZONS',NULL,NULL,25,19,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(329,'95','%',NULL,25,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(330,'2','s',NULL,25,23,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(331,'LEG2',NULL,'CRT1,CRT3',25,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(332,'26','€',NULL,25,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(333,'00EU',NULL,NULL,26,1,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(334,'IEEU',NULL,NULL,26,2,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(335,'AMAZ',NULL,NULL,26,3,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(336,'1',NULL,NULL,26,4,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(337,'00RE',NULL,NULL,26,11,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(338,'MYRE',NULL,NULL,26,12,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(339,'200','GB',NULL,26,13,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(340,'200','GB',NULL,26,14,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(341,'3.75','GB',NULL,26,15,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(342,'95','%',NULL,26,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(343,'30','ms',NULL,26,22,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(344,'LEG1',NULL,'CRT1',26,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(345,'73','$',NULL,26,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(346,'00NA',NULL,NULL,27,1,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(347,'USNA',NULL,NULL,27,2,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(348,'AMAZ',NULL,NULL,27,3,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(349,'16',NULL,NULL,27,4,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(350,'00RE',NULL,NULL,27,11,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(351,'MYRE',NULL,NULL,27,12,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(352,'250','GB',NULL,27,13,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(353,'250','GB',NULL,27,14,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(354,'122','GB',NULL,27,15,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(355,'99','%',NULL,27,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(356,'2','ms',NULL,27,22,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(357,'LEG2',NULL,'CRT1,CRT2',27,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(358,'1787','$',NULL,27,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(359,'00EU',NULL,NULL,28,1,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(360,'DEEU',NULL,NULL,28,2,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(361,'AMAZ',NULL,NULL,28,3,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(362,'2',NULL,NULL,28,4,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(363,'00NR',NULL,NULL,28,11,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(364,'AMNR',NULL,NULL,28,12,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(365,'35','GB',NULL,28,13,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(366,'35','GB',NULL,28,14,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(367,'100','GB',NULL,28,15,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(368,'99.6','%',NULL,28,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(369,'3','ns',NULL,28,22,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(370,'LEG2',NULL,'CRT1,CRT4',28,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(371,'35','$',NULL,28,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(372,'00NA',NULL,NULL,29,1,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(373,'USNA',NULL,NULL,29,2,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(374,'AMAZ',NULL,NULL,29,3,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(375,'2',NULL,NULL,29,4,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(376,'00NR',NULL,NULL,29,11,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(377,'AMNR',NULL,NULL,29,12,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(378,'35','GB',NULL,29,13,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(379,'35','GB',NULL,29,14,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(380,'100','GB',NULL,29,15,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(381,'99.6','%',NULL,29,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(382,'3','ns',NULL,29,22,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(383,'LEG2',NULL,'CRT1,CRT5',29,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(384,'25','$',NULL,29,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(385,'00EU',NULL,NULL,30,1,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(386,'IEEU',NULL,NULL,30,2,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(387,'AZUR',NULL,NULL,30,3,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(388,'2',NULL,NULL,30,4,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(389,'1500',NULL,NULL,30,5,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(390,'4','GB',NULL,30,6,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(391,'20','GB',NULL,30,7,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(392,NULL,NULL,NULL,30,8,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(393,'IPV4',NULL,NULL,30,9,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(394,NULL,NULL,NULL,30,10,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(395,'95','%',NULL,30,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(396,'5','ms',NULL,30,21,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(397,'LEG2',NULL,'CRT1,CRT4',30,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(398,'93.60','$',NULL,30,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(399,'00NA',NULL,NULL,31,1,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(400,'USNA',NULL,NULL,31,2,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(401,'AZUR',NULL,NULL,31,3,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(402,'2',NULL,NULL,31,4,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(403,'1500',NULL,NULL,31,5,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(404,'4','GB',NULL,31,6,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(405,'20','GB',NULL,31,7,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(406,NULL,NULL,NULL,31,8,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(407,'IPV4',NULL,NULL,31,9,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(408,NULL,NULL,NULL,31,10,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(409,'95','%',NULL,31,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(410,'5','ms',NULL,31,21,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(411,'LEG1',NULL,'CRT5',31,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(412,'67','$',NULL,31,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(413,'00NA',NULL,NULL,32,1,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(414,NULL,NULL,NULL,32,2,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(415,'AZUR',NULL,NULL,32,3,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(416,'8',NULL,NULL,32,4,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(417,'1500',NULL,NULL,32,5,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(418,'32','GB',NULL,32,6,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(419,'64','GB',NULL,32,7,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(420,NULL,NULL,NULL,32,8,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(421,'IPV4',NULL,NULL,32,9,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(422,NULL,NULL,NULL,32,10,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(423,'98','%',NULL,32,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(424,'2','ms',NULL,32,21,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(425,'LEG2',NULL,'CRT1,CRT5',32,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(426,'242','$',NULL,32,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(427,'00EU',NULL,NULL,33,1,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(428,'DEEU',NULL,NULL,33,2,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(429,'AZUR',NULL,NULL,33,3,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(430,'8',NULL,NULL,33,4,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(431,'1500',NULL,NULL,33,5,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(432,'32','GB',NULL,33,6,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(433,'64','GB',NULL,33,7,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(434,NULL,NULL,NULL,33,8,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(435,NULL,NULL,NULL,33,9,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(436,NULL,NULL,NULL,33,10,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(437,'98','%',NULL,33,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(438,'2','ms',NULL,33,21,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(439,'LEG2',NULL,'CRT1,CRT4',33,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(440,'170','$',NULL,33,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(441,'00EU',NULL,NULL,34,1,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(442,'FREU',NULL,NULL,34,2,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(443,'AZUR',NULL,NULL,34,3,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(444,'4',NULL,NULL,34,4,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(445,'1500',NULL,NULL,34,5,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(446,'7','GB',NULL,34,6,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(447,'120','GB',NULL,34,7,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(448,NULL,NULL,NULL,34,8,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(449,'IPV4',NULL,NULL,34,9,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(450,NULL,NULL,NULL,34,10,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(451,'96','%',NULL,34,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(452,'3','ms',NULL,34,21,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(453,'LEG2',NULL,'CRT1,CRT4',34,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(454,'193','$',NULL,34,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(455,'00EU',NULL,NULL,35,1,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(456,NULL,NULL,NULL,35,2,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(457,'AZUR',NULL,NULL,35,3,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(458,'8',NULL,NULL,35,4,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(459,'1500',NULL,NULL,35,5,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(460,'56','GB',NULL,35,6,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(461,'112','GB',NULL,35,7,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(462,NULL,NULL,NULL,35,8,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(463,NULL,NULL,NULL,35,9,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(464,NULL,NULL,NULL,35,10,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(465,'98','%',NULL,35,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(466,'3','ms',NULL,35,21,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(467,'LEG1',NULL,'CRT5',35,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(468,'541','$',NULL,35,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(469,'00NA',NULL,NULL,36,1,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(470,'USNA',NULL,NULL,36,2,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(471,'AZUR',NULL,NULL,36,3,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(472,'GENE',NULL,NULL,36,16,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(473,'BLOK',NULL,NULL,36,17,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(474,'2000','GB',NULL,36,18,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(475,'LOCS',NULL,NULL,36,19,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(476,'96','%',NULL,36,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(477,'4','ms',NULL,36,23,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(478,'LEG2',NULL,'CRT1,CRT5',36,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(479,'48','$',NULL,36,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(480,'00EU',NULL,NULL,37,1,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(481,'IEEU',NULL,NULL,37,2,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(482,'AZUR',NULL,NULL,37,3,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(483,'GENE',NULL,NULL,37,16,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(484,'FILE',NULL,NULL,37,17,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(485,'2000','GB',NULL,37,18,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(486,'LOCS',NULL,NULL,37,19,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(487,'98','%',NULL,37,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(488,'3','ms',NULL,37,23,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(489,'LEG2',NULL,'CRT1,CRT4',37,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(490,'120','$',NULL,37,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(491,'00AS',NULL,NULL,38,1,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(492,'JPAS',NULL,NULL,38,2,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(493,'AZUR',NULL,NULL,38,3,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(494,'GENE',NULL,NULL,38,16,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(495,'BLOK',NULL,NULL,38,17,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(496,'2000','GB',NULL,38,18,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(497,'REAS',NULL,NULL,38,19,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(498,'98','%',NULL,38,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(499,'2','ms',NULL,38,23,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(500,'LEG1',NULL,'CRT1',38,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(501,'221','$',NULL,38,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(502,'00EU',NULL,NULL,39,1,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(503,NULL,NULL,NULL,39,2,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(504,'AZUR',NULL,NULL,39,3,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(505,'2',NULL,NULL,39,4,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(506,'00RE',NULL,NULL,39,11,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(507,'MYRE',NULL,NULL,39,12,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(508,'25','GB',NULL,39,13,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(509,'25','GB',NULL,39,14,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(510,'100','GB',NULL,39,15,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(511,'96','%',NULL,39,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(512,'3','ms',NULL,39,22,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(513,'LEG1',NULL,'CRT5',39,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(514,'184','$',NULL,39,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(515,'00EU',NULL,NULL,40,1,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(516,NULL,NULL,NULL,40,2,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(517,'AZUR',NULL,NULL,40,3,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(518,'8',NULL,NULL,40,4,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(519,'00RE',NULL,NULL,40,11,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(520,'PORE',NULL,NULL,40,12,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(521,'35','GB',NULL,40,13,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(522,'35','GB',NULL,40,14,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(523,'500','GB',NULL,40,15,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(524,'98','%',NULL,40,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(525,'3','ms',NULL,40,22,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(526,'LEG1',NULL,'CRT5',40,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(527,'618','$',NULL,40,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(528,'00EU',NULL,NULL,41,1,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(529,'DEEU',NULL,NULL,41,2,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(530,'GOOG',NULL,NULL,41,3,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(531,'16',NULL,NULL,41,4,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(532,'1500',NULL,NULL,41,5,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(533,'60','GB',NULL,41,6,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(534,'300','GB',NULL,41,7,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(535,NULL,NULL,NULL,41,8,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(536,'IPV4',NULL,NULL,41,9,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(537,NULL,NULL,NULL,41,10,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(538,'96','%',NULL,41,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(539,'4','ms',NULL,41,21,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(540,'LEG1',NULL,'CRT1',41,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(541,'500','$',NULL,41,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(542,'00NA',NULL,NULL,42,1,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(543,'USNA',NULL,NULL,42,2,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(544,'GOOG',NULL,NULL,42,3,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(545,'16',NULL,NULL,42,4,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(546,'1500',NULL,NULL,42,5,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(547,'104','GB',NULL,42,6,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(548,'300','GB',NULL,42,7,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(549,'MEOP',NULL,NULL,42,8,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(550,NULL,NULL,NULL,42,9,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(551,NULL,NULL,NULL,42,10,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(552,'98','%',NULL,42,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(553,'4','ms',NULL,42,21,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(554,'LEG2',NULL,'CRT1,CRT5',42,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(555,'552','$',NULL,42,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(556,'00EU',NULL,NULL,43,1,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(557,'IEEU',NULL,NULL,43,2,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(558,'GOOG',NULL,NULL,43,3,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(559,'GENE',NULL,NULL,43,16,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(560,'FILE',NULL,NULL,43,17,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(561,'500','GB',NULL,43,18,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(562,'GEOS',NULL,NULL,43,19,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(563,'99','%',NULL,43,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(564,'3','ms',NULL,43,23,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(565,'LEG1',NULL,'CRT5',43,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(566,'13','$',NULL,43,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(567,'00NA',NULL,NULL,44,1,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(568,'USNA',NULL,NULL,44,2,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(569,'GOOG',NULL,NULL,44,3,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(570,'GENE',NULL,NULL,44,16,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(571,'OBJT',NULL,NULL,44,17,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(572,'1','TB',NULL,44,18,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(573,'ZONS',NULL,NULL,44,19,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(574,'99.9','%',NULL,44,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(575,'3','ms',NULL,44,23,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(576,'LEG1',NULL,'CRT5',44,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(577,'28','$',NULL,44,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(578,'00EU',NULL,NULL,45,1,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(579,'IEEU',NULL,NULL,45,2,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(580,'GOOG',NULL,NULL,45,3,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(581,'4',NULL,NULL,45,4,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(582,'00RE',NULL,NULL,45,11,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(583,'PORE',NULL,NULL,45,12,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(584,'50','GB',NULL,45,13,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(585,'50','GB',NULL,45,14,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(586,'50','GB',NULL,45,15,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(587,'98','%',NULL,45,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(588,'3','ms',NULL,45,22,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(589,'LEG2',NULL,'CRT1,CRT4',45,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(590,'169','$',NULL,45,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(591,'00NA',NULL,NULL,46,1,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(592,'USNA',NULL,NULL,46,2,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(593,'GOOG',NULL,NULL,46,3,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(594,'8',NULL,NULL,46,4,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(595,'00RE',NULL,NULL,46,11,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(596,'MYRE',NULL,NULL,46,12,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(597,'50','GB',NULL,46,13,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(598,'50','GB',NULL,46,14,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(599,'500','GB',NULL,46,15,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(600,'99','%',NULL,46,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(601,'4','ms',NULL,46,22,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(602,'LEG1',NULL,'CRT5',46,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(603,'388','$',NULL,46,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(604,'00EU',NULL,NULL,47,1,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(605,'ZUEU',NULL,NULL,47,2,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(606,'CLSI',NULL,NULL,47,3,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(607,'2',NULL,NULL,47,4,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(608,'5200',NULL,NULL,47,5,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(609,'4','GB',NULL,47,6,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(610,'256','GB',NULL,47,7,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(611,NULL,NULL,NULL,47,8,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(612,'IPV4',NULL,NULL,47,9,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(613,NULL,NULL,NULL,47,10,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(614,'98','%',NULL,47,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(615,'100','ms',NULL,47,21,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(616,'LEG2',NULL,'CRT1,CRT5',47,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(617,'186','€',NULL,47,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(618,'00NA',NULL,NULL,48,1,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(619,'USNA',NULL,NULL,48,2,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(620,'AMAZ',NULL,NULL,48,3,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(621,'1',NULL,NULL,48,4,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(622,NULL,NULL,NULL,48,5,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(623,'3.7','GB',NULL,48,6,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(624,'410','GB',NULL,48,7,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(625,NULL,NULL,NULL,48,8,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(626,'IPV4',NULL,NULL,48,9,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(627,NULL,NULL,NULL,48,10,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(628,'98','%',NULL,48,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(629,'100','ms',NULL,48,21,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(630,'LEG3',NULL,'CRT1,CRT2,CRT5',48,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(631,'200','$',NULL,48,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL);
-/*!40000 ALTER TABLE `service_attribute_value` ENABLE KEYS */;
-UNLOCK TABLES;
-
---
--- Table structure for table `service_class`
---
-
-DROP TABLE IF EXISTS `service_class`;
-/*!40101 SET @saved_cs_client     = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `service_class` (
-  `id` bigint(20) NOT NULL AUTO_INCREMENT,
-  `serviceclassname` varchar(20) NOT NULL,
-  `created_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
-  `last_modified_date` timestamp NULL DEFAULT NULL,
-  `deleted_date` timestamp NULL,
-  PRIMARY KEY (`id`)
-) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Dumping data for table `service_class`
---
-
-LOCK TABLES `service_class` WRITE;
-/*!40000 ALTER TABLE `service_class` DISABLE KEYS */;
-INSERT INTO `service_class` VALUES (1,'Database','2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(2,'Storage','2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(3,'Virtual Machine','2018-11-16 17:44:47','2018-11-16 17:44:47',NULL);
-/*!40000 ALTER TABLE `service_class` ENABLE KEYS */;
-UNLOCK TABLES;
-
---
--- Table structure for table `service_class_attribute`
---
-
-DROP TABLE IF EXISTS `service_class_attribute`;
-/*!40101 SET @saved_cs_client     = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `service_class_attribute` (
-  `id` bigint(20) NOT NULL AUTO_INCREMENT,
-  `weight` int(11) NOT NULL,
-  `ismandatory` bit(1) NOT NULL,
-  `serviceclassid` bigint(20) NOT NULL,
-  `serviceattributetypeid` bigint(20) NOT NULL,
-  `created_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
-  `last_modified_date` timestamp NULL DEFAULT NULL,
-  `deleted_date` timestamp NULL,
-  PRIMARY KEY (`id`)
-) ENGINE=InnoDB AUTO_INCREMENT=33 DEFAULT CHARSET=latin1;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Dumping data for table `service_class_attribute`
---
-
-LOCK TABLES `service_class_attribute` WRITE;
-/*!40000 ALTER TABLE `service_class_attribute` DISABLE KEYS */;
-INSERT INTO `service_class_attribute` VALUES (1,1,'',0,1,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(2,2,'\0',0,2,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(3,3,'',0,3,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(4,4,'',1,11,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(5,5,'',1,12,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(6,6,'',1,13,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(7,7,'',1,14,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(8,8,'',1,4,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(9,9,'',1,15,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(10,10,'',1,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(11,11,'',1,22,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(12,12,'',1,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(13,13,'\0',1,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(14,4,'',2,16,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(15,5,'',2,17,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(16,6,'',2,18,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(17,7,'',2,19,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(18,8,'',2,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(19,9,'',2,23,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(20,10,'',2,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(21,11,'\0',2,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(22,4,'',3,4,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(23,5,'\0',3,5,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(24,6,'',3,6,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(25,7,'\0',3,7,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(26,8,'\0',3,8,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(27,9,'\0',3,9,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(28,10,'\0',3,10,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(29,11,'',3,20,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(30,12,'',3,21,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(31,13,'',3,24,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL),(32,14,'\0',3,25,'2018-11-16 17:44:48','2018-11-16 17:44:48',NULL);
-/*!40000 ALTER TABLE `service_class_attribute` ENABLE KEYS */;
-UNLOCK TABLES;
-
---
--- Table structure for table `service_incidence`
---
-
-DROP TABLE IF EXISTS `service_incidence`;
-/*!40101 SET @saved_cs_client     = @@character_set_client */;
-/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `service_incidence` (
-  `id` bigint(20) NOT NULL AUTO_INCREMENT,
-  `timestamp` bigint(20) NOT NULL,
-  `detail` varchar(60) NOT NULL,
-  `serviceid` bigint(20) NOT NULL,
-  `created_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
-  `last_modified_date` timestamp NULL DEFAULT NULL,
-  `deleted_date` timestamp NULL,
-  PRIMARY KEY (`id`)
-) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Dumping data for table `service_incidence`
---
-
-LOCK TABLES `service_incidence` WRITE;
-/*!40000 ALTER TABLE `service_incidence` DISABLE KEYS */;
-INSERT INTO `service_incidence` VALUES (1,1542202871512,'NFR Violation',6,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(2,1542202871512,'NFR Violation',8,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(3,1542202871512,'NFR Violation',8,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(4,1542202871512,'NFR Violation',8,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(5,1542202871512,'NFR Violation',30,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL),(6,1542202871512,'NFR Violation',30,'2018-11-16 17:44:47','2018-11-16 17:44:47',NULL);
-/*!40000 ALTER TABLE `service_incidence` ENABLE KEYS */;
-UNLOCK TABLES;
-/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
-
-/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
-/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
-/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
-/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
-/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
-/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
-/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-
--- Dump completed on 2018-11-16 18:45:24
+-- MySQL dump 10.13  Distrib 5.7.19, for Win64 (x86_64)
+--
+-- Host: localhost    Database: acsmi_backend_services_server
+-- ------------------------------------------------------
+-- Server version	5.7.19
+
+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
+/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
+/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
+/*!40101 SET NAMES utf8 */;
+/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
+/*!40103 SET TIME_ZONE='+00:00' */;
+/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
+/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
+/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
+/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
+
+--
+-- Current Database: `acsmi_backend_services_server`
+--
+
+CREATE DATABASE /*!32312 IF NOT EXISTS*/ `acsmi_backend_services_server` /*!40100 DEFAULT CHARACTER SET latin1 */;
+
+USE `acsmi_backend_services_server`;
+
+--
+-- Table structure for table `databasechangelog`
+--
+
+DROP TABLE IF EXISTS `databasechangelog`;
+/*!40101 SET @saved_cs_client     = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `databasechangelog` (
+  `ID` varchar(255) NOT NULL,
+  `AUTHOR` varchar(255) NOT NULL,
+  `FILENAME` varchar(255) NOT NULL,
+  `DATEEXECUTED` datetime NOT NULL,
+  `ORDEREXECUTED` int(11) NOT NULL,
+  `EXECTYPE` varchar(10) NOT NULL,
+  `MD5SUM` varchar(35) DEFAULT NULL,
+  `DESCRIPTION` varchar(255) DEFAULT NULL,
+  `COMMENTS` varchar(255) DEFAULT NULL,
+  `TAG` varchar(255) DEFAULT NULL,
+  `LIQUIBASE` varchar(20) DEFAULT NULL,
+  `CONTEXTS` varchar(255) DEFAULT NULL,
+  `LABELS` varchar(255) DEFAULT NULL,
+  `DEPLOYMENT_ID` varchar(10) DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Dumping data for table `databasechangelog`
+--
+
+LOCK TABLES `databasechangelog` WRITE;
+/*!40000 ALTER TABLE `databasechangelog` DISABLE KEYS */;
+INSERT INTO `databasechangelog` VALUES ('00000000000001','jhipster','classpath:config/liquibase/changelog/00000000000000_initial_schema.xml','2019-05-16 09:43:08',1,'EXECUTED','7:9d88ecd533d5a3530e304f778b9dc982','createTable tableName=jhi_persistent_audit_event; createTable tableName=jhi_persistent_audit_evt_data; addPrimaryKey tableName=jhi_persistent_audit_evt_data; createIndex indexName=idx_persistent_audit_event, tableName=jhi_persistent_audit_event; c...','',NULL,'3.5.3',NULL,NULL,'7992588046'),('20170523072708-1','jhipster','classpath:config/liquibase/changelog/20170523072708_added_entity_Service.xml','2019-05-16 09:43:08',2,'EXECUTED','7:b2878d1c838426e7f8d852719a9ace94','createTable tableName=service; dropDefaultValue columnName=deleted_date, tableName=service','',NULL,'3.5.3',NULL,NULL,'7992588046'),('20170717105245-1','jhipster','classpath:config/liquibase/changelog/20170717105245_added_entity_ServiceClass.xml','2019-05-16 09:43:08',3,'EXECUTED','7:fd2ea387398c6ca51c331111cdb0ef13','createTable tableName=service_class; dropDefaultValue columnName=deleted_date, tableName=service_class','',NULL,'3.5.3',NULL,NULL,'7992588046'),('20170717114232-1','jhipster','classpath:config/liquibase/changelog/20170717114232_added_entity_ServiceAttributeType.xml','2019-05-16 09:43:08',4,'EXECUTED','7:5e565d27497c5ddae84cd859fab302aa','createTable tableName=service_attribute_type; dropDefaultValue columnName=deleted_date, tableName=service_attribute_type','',NULL,'3.5.3',NULL,NULL,'7992588046'),('20170717115247-1','jhipster','classpath:config/liquibase/changelog/20170717115247_added_entity_ServiceAttributeValue.xml','2019-05-16 09:43:08',5,'EXECUTED','7:950a2059b6c60f8ea3ad2def589260d1','createTable tableName=service_attribute_value; dropDefaultValue columnName=deleted_date, tableName=service_attribute_value','',NULL,'3.5.3',NULL,NULL,'7992588046'),('20170718105315-1','jhipster','classpath:config/liquibase/changelog/20170718105315_added_entity_ServiceClassAttribute.xml','2019-05-16 09:43:08',6,'EXECUTED','7:6f7411acd09ec651030c2f222f805d83','createTable tableName=service_class_attribute; dropDefaultValue columnName=deleted_date, tableName=service_class_attribute','',NULL,'3.5.3',NULL,NULL,'7992588046'),('20180515151200-1','jhipster','classpath:config/liquibase/changelog/20180515151200_added_entity_Definition.xml','2019-05-16 09:43:08',7,'EXECUTED','7:8757b65ff09ded8df03df7d367d2dff1','createTable tableName=definition; dropDefaultValue columnName=deleted_date, tableName=definition','',NULL,'3.5.3',NULL,NULL,'7992588046'),('20181005115200-1','jhipster','classpath:config/liquibase/changelog/20181005115200_added_entity_ServiceIncidence.xml','2019-05-16 09:43:08',8,'EXECUTED','7:ad008bb3aa4b95cc59df2559e5552044','createTable tableName=service_incidence; dropDefaultValue columnName=timestamp, tableName=service_incidence; dropDefaultValue columnName=deleted_date, tableName=service_incidence','',NULL,'3.5.3',NULL,NULL,'7992588046'),('20190306104000-1','jhipster','classpath:config/liquibase/changelog/20190306104000_added_entity_LegalControl.xml','2019-05-16 09:43:08',9,'EXECUTED','7:cd0cd2597a9a1e548e55669b3bc99782','createTable tableName=legal_control; dropDefaultValue columnName=deleted_date, tableName=legal_control','',NULL,'3.5.3',NULL,NULL,'7992588046'),('20190306105000-1','jhipster','classpath:config/liquibase/changelog/20190306105000_added_entity_LegalAnswer.xml','2019-05-16 09:43:08',10,'EXECUTED','7:233de2a1d8f9de5330139d9a947bfec4','createTable tableName=legal_answer; dropDefaultValue columnName=deleted_date, tableName=legal_answer','',NULL,'3.5.3',NULL,NULL,'7992588046'),('20190306121000-1','jhipster','classpath:config/liquibase/changelog/20190306121000_added_entity_LegalAssessment.xml','2019-05-16 09:43:08',11,'EXECUTED','7:b1a8c0d2313a3ca8424a4834f8055a30','createTable tableName=legal_assessment; dropDefaultValue columnName=deleted_date, tableName=legal_assessment','',NULL,'3.5.3',NULL,NULL,'7992588046'),('20190403150500-1','jhipster','classpath:config/liquibase/changelog/20190403150500_added_entity_ServiceLegalAssessment.xml','2019-05-16 09:43:08',12,'EXECUTED','7:665c3a729d648219f934566cc3fdd715','createTable tableName=service_legal_assessment; dropDefaultValue columnName=deleted_date, tableName=service_legal_assessment','',NULL,'3.5.3',NULL,NULL,'7992588046'),('20190506073900-1','jhipster','classpath:config/liquibase/changelog/20190506073900_added_entity_ServiceLegalManagement.xml','2019-05-16 09:43:08',13,'EXECUTED','7:6596c76fd503417a56351fa9cc7cc69c','createTable tableName=service_legal_management; dropDefaultValue columnName=deleted_date, tableName=service_legal_management','',NULL,'3.5.3',NULL,NULL,'7992588046');
+/*!40000 ALTER TABLE `databasechangelog` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `databasechangeloglock`
+--
+
+DROP TABLE IF EXISTS `databasechangeloglock`;
+/*!40101 SET @saved_cs_client     = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `databasechangeloglock` (
+  `ID` int(11) NOT NULL,
+  `LOCKED` bit(1) NOT NULL,
+  `LOCKGRANTED` datetime DEFAULT NULL,
+  `LOCKEDBY` varchar(255) DEFAULT NULL,
+  PRIMARY KEY (`ID`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Dumping data for table `databasechangeloglock`
+--
+
+LOCK TABLES `databasechangeloglock` WRITE;
+/*!40000 ALTER TABLE `databasechangeloglock` DISABLE KEYS */;
+INSERT INTO `databasechangeloglock` VALUES (1,'\0',NULL,NULL);
+/*!40000 ALTER TABLE `databasechangeloglock` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `definition`
+--
+
+DROP TABLE IF EXISTS `definition`;
+/*!40101 SET @saved_cs_client     = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `definition` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `code` varchar(4) NOT NULL,
+  `value` varchar(60) NOT NULL,
+  `ismainattribute` bit(1) NOT NULL,
+  `ischeckoption` bit(1) NOT NULL,
+  `typeid` bigint(20) DEFAULT NULL,
+  `created_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `last_modified_date` timestamp NULL DEFAULT NULL,
+  `deleted_date` timestamp NULL,
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=62 DEFAULT CHARSET=latin1;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Dumping data for table `definition`
+--
+
+LOCK TABLES `definition` WRITE;
+/*!40000 ALTER TABLE `definition` DISABLE KEYS */;
+INSERT INTO `definition` VALUES (1,'00AS','Asia','','\0',1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(2,'AUAS','Australia','','\0',2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(3,'CHAS','China','','\0',2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(4,'JPAS','Japan','','\0',2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(5,'00EU','Europe','','\0',1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(6,'FREU','France','','\0',2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(7,'DEEU','Germany','','\0',2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(8,'IEEU','Ireland','','\0',2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(9,'SPEU','Spain','','\0',2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(10,'UKEU','United Kingdom','','\0',2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(11,'00NA','North America','','\0',1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(12,'CANA','Canada','','\0',2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(13,'MXNA','Mexico','','\0',2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(14,'USNA','United States','','\0',2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(15,'00SA','South America','','\0',1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(16,'ARSA','Argentina','','\0',2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(17,'BRSA','Brazil','','\0',2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(18,'AIME','AIMES','','\0',3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(19,'AMAZ','Amazon','','\0',3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(20,'ARSY','Arsys','','\0',3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(21,'AZUR','Azure','','\0',3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(22,'GOOG','Google','','\0',3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(23,'GEPU','General purpose','','\0',8,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(24,'COOP','Compute optimized','','\0',8,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(25,'GPUI','GPU instances','','\0',8,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(26,'MEOP','Memory optimized','','\0',8,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(27,'SGOP','Storage optimized','','\0',8,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(28,'HPCO','High performance compute','','\0',8,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(29,'IPV4','IPv4','','\0',9,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(30,'00RE','Relational','','\0',11,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(31,'AURE','Amazon Aurora','','\0',12,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(32,'ARRE','Amazon RDS','','\0',12,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(33,'MARE','MariaDB','','\0',12,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(34,'MSRE','MS SQL Server','','\0',12,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(35,'MYRE','MySQL','','\0',12,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(36,'ORRE','Oracle','','\0',12,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(37,'PORE','PostgreSQL','','\0',12,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(38,'00NR','Non-relational','','\0',11,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(39,'AMNR','Amazon DynamoDB','','\0',12,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(40,'CANR','Apache Cassandra','','\0',12,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(41,'MONR','MongoDB','','\0',12,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(42,'BACK','Backup','','\0',16,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(43,'GENE','General','','\0',16,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(44,'FILE','Files','','\0',17,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(45,'OBJT','Objects','','\0',17,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(46,'QUEU','Queues','','\0',17,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(47,'BLOK','Block','','\0',17,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(48,'GEOS','Geo-redundant storage (GRS)','','\0',19,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(49,'LOCS','Locally redundant storage (LRS)','','\0',19,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(50,'REAS','Read-access geo-redundant storage (RA-GRS)','','\0',19,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(51,'ZONS','Zone-redundant storage (ZRS)','','\0',19,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(52,'LEG1','Legal Level Tier 1','','\0',24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(53,'LEG2','Legal Level Tier 2','','\0',24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(54,'LEG3','Legal Level Tier 3','','\0',24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(55,'CRT1','ISO 27001 / 27017 / 27018','\0','',24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(56,'CRT2','BSI C5 (Germany)','\0','',24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(57,'CRT3','PCI - DSS','\0','',24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(58,'CRT4','EU - Wide Certification Scheme (TBD)','\0','',24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(59,'CRT5','Other','\0','',24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(60,'CLSI','CloudSigma','','\0',3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(61,'ZUEU','Zurich','','\0',2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL);
+/*!40000 ALTER TABLE `definition` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `jhi_persistent_audit_event`
+--
+
+DROP TABLE IF EXISTS `jhi_persistent_audit_event`;
+/*!40101 SET @saved_cs_client     = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `jhi_persistent_audit_event` (
+  `event_id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `principal` varchar(50) NOT NULL,
+  `event_date` timestamp NULL DEFAULT NULL,
+  `event_type` varchar(255) DEFAULT NULL,
+  PRIMARY KEY (`event_id`),
+  KEY `idx_persistent_audit_event` (`principal`,`event_date`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Dumping data for table `jhi_persistent_audit_event`
+--
+
+LOCK TABLES `jhi_persistent_audit_event` WRITE;
+/*!40000 ALTER TABLE `jhi_persistent_audit_event` DISABLE KEYS */;
+/*!40000 ALTER TABLE `jhi_persistent_audit_event` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `jhi_persistent_audit_evt_data`
+--
+
+DROP TABLE IF EXISTS `jhi_persistent_audit_evt_data`;
+/*!40101 SET @saved_cs_client     = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `jhi_persistent_audit_evt_data` (
+  `event_id` bigint(20) NOT NULL,
+  `name` varchar(150) NOT NULL,
+  `value` varchar(255) DEFAULT NULL,
+  PRIMARY KEY (`event_id`,`name`),
+  KEY `idx_persistent_audit_evt_data` (`event_id`),
+  CONSTRAINT `fk_evt_pers_audit_evt_data` FOREIGN KEY (`event_id`) REFERENCES `jhi_persistent_audit_event` (`event_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Dumping data for table `jhi_persistent_audit_evt_data`
+--
+
+LOCK TABLES `jhi_persistent_audit_evt_data` WRITE;
+/*!40000 ALTER TABLE `jhi_persistent_audit_evt_data` DISABLE KEYS */;
+/*!40000 ALTER TABLE `jhi_persistent_audit_evt_data` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `legal_answer`
+--
+
+DROP TABLE IF EXISTS `legal_answer`;
+/*!40101 SET @saved_cs_client     = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `legal_answer` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `answer` text NOT NULL,
+  `created_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `last_modified_date` timestamp NULL DEFAULT NULL,
+  `deleted_date` timestamp NULL,
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=68 DEFAULT CHARSET=latin1;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Dumping data for table `legal_answer`
+--
+
+LOCK TABLES `legal_answer` WRITE;
+/*!40000 ALTER TABLE `legal_answer` DISABLE KEYS */;
+INSERT INTO `legal_answer` VALUES (1,'Yes.','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(2,'No.','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(3,'Not applicable.','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(4,'No protection (no actual proof of presence, clear non-compliance, unenforceability).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(5,'Low protection (the transfer mechanism and related documents are faulty, provide a low level of protection, or are otherwise clearly less than ideal, but seem to be sufficiently conforming to the applicable law to not be an immediate compliance issue).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(6,'Medium protection (the transfer mechanisms and related documents are adequately described, enforceable and provide a more or less balanced level of protection and obligations and rights).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(7,'High protection (the transfer mechanism and related documents are adequately described, enforceable and provide a strong protection and rights for the application developer/target user organization as a controller).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(8,'Description not present.','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(9,'Present, but potentially faulty or unclear description (reservation) (low protection).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(10,'Present and adequate enough so that it is unlikely to be legally challengeable (medium protection).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(11,'Present and fully adequate (high protection).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(12,'Obligation not present.','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(13,'Present, but potentially faulty (e.g. making the controller agree that a certain set of current measures will forever be appropriate) or unclear description given the context of the given CSP (reservation), so that it may be insufficient under Article 28(3), c) GDPR (low protection).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(14,'Present and adequate enough so that it is unlikely to be legally challengeable under Article 28(3), c) GDPR (medium protection).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(15,'Present, but potentially faulty or unclear description (reservation), e.g. because of unreasonably short delays, an infeasible manner of objection, or other conditions arguably hollowing out the legally intended effect of Article 28(2) GDPR (low protection).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(16,'Present and adequate enough so that it is unlikely to be legally challengeable under Article 28(3), d) GDPR (medium protection).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(17,'Present, but potentially faulty or unclear description (reservation), e.g. because of potential limitations or obscurity created by the contract terms which may be interpreted as such, arguably hollowing out the legally intended effect of Article 28(4) GDPR (low protection).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(18,'Present, but potentially faulty or unclear description (reservation), e.g. because of high costs, unreasonable conditions or other, arguably hollowing out the legally intended effect of Article 28(3), e) GDPR (low protection).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(19,'Present and adequate enough so that it is unlikely to be legally challengeable under Article 28(3), e) GDPR (medium protection).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(20,'Present, but potentially faulty or unclear description (reservation), e.g. because of high costs, unreasonable conditions or other, arguably hollowing out the legally intended effect of Article 28(3), f) GDPR (low protection).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(21,'Present and adequate enough so that it is unlikely to be legally challengeable under Article 28(3), f) GDPR (medium protection).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(22,'Present, but potentially faulty or unclear description (reservation), e.g. because of unreasonable conditions, carveouts or other faults, arguably hollowing out the legally intended effect of Article 28(3), f) GDPR (low protection).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(23,'Present, but potentially faulty or unclear description (reservation), e.g. because of unreasonable conditions, unreasonably high costs, lack of capacity of the counterparty to decide when a data protection impact assessment or prior consultation is necessary, carveouts or other faults, arguably hollowing out the legally intended effect of Article 28(3), f) GDPR (low protection).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(24,'Present, but potentially faulty or unclear description (reservation), e.g. because of unreasonable conditions, carveouts or other faults, arguably hollowing out the legally intended effect of Article 28(3), g) GDPR (low protection).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(25,'Present and adequate enough so that it is unlikely to be legally challengeable under Article 28(3), g) GDPR (medium protection).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(26,'Present, but potentially faulty or unclear description (reservation), e.g. because of unreasonable conditions, carveouts or other faults, arguably hollowing out the legally intended effect of Article 28(3), h) GDPR (low protection).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(27,'Present and adequate enough so that it is unlikely to be legally challengeable under Article 28(3), h) GDPR (medium protection).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(28,'Present, but potentially faulty or unclear description (reservation), e.g. because of unreasonable conditions (high costs, long delays, etc.), carveouts or other faults, arguably hollowing out the legally intended effect of Article 28(3), h) GDPR (low protection).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(29,'Present and fully adequate, providing for real audit and inspection rights at reasonable conditions for the counterparty (high protection).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(30,'Present, but potentially faulty or unclear description (reservation), e.g. because of potential delays, carveouts or other faults, arguably hollowing out the legally intended effect of Article 28(3), second subparagraph GDPR (low protection).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(31,'Present and adequate enough so that it is unlikely to be legally challengeable under Article 28(3), second subparagraph GDPR (medium protection).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(32,'Exclusions are present in a wording clearly in direct conflict of the GDPR, e.g. conflicting with the terms of Article 82 GDPR or providing for backdoor circumvention of Article 28(4) GDPR.','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(33,'The DPA contains some clear liability caps, limitations and/or exclusions, the text of which may be in conflict with the GDPR and/or are very negative for the counterparty (reservation) (low protection).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(34,'The DPA contains liability caps, limitations and/or exclusions, the text of which is likely compliant with the GDPR and provides at least a reasonable measure of balance between the contracting parties (medium protection).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(35,'The DPA contains liability caps, limitations and/or exclusions which are balanced and clearly within the margin of appreciation of the parties, not depriving the contract of its essence (high protection).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(36,'No, the DPA can easily be terminated, leaving the service contract of the services that contain the processing activities intact, without a valid DPA.','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(37,'This is unclear, the wording of the contract is vague or faulty, or there is a reference which does not contain specific language on this topic; it could reasonably be questioned whether this clause has the effect of hollowing out Article 28 GDPR (reservation) low protection.','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(38,'The DPA’s termination clause is reasonably formulated and to be interpreted as logically following the main service agreement; it is unlikely to be interpreted as hollowing out Article 28 GDPR (medium protection).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(39,'The DPA’s termination clause is clearly worded and leaves no or little room for misinterpretation. The DPA logically follows the main contract. It is very likely compliant with the GDPR and does not hollow out Article 28 GDPR (high protection).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(40,'There are clear compliance issues (contra legem wording), serious prohibitive conditions or carveouts, or there are other issues that render the clause either impossible to be executed, ineffective, or otherwise useless to the CSP’s counterparty.','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(41,'The clause is enforceable and effective, but the conditions or exclusions make it unlikely to be used in reality or it makes ADR binding without any other options being available, effectively forcing e.g. expensive arbitration on the CSP’s counterparty (reservation) (low protection).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(42,'The clause is enforceable and effective, effective use may reasonably depend on the situation, while it remains possible to go to court (medium protection).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(43,'The clause is enforceable and effective and motivating for the CSPs counterparty to use the mechanisms offered, while in no way forcing such. There are satisfactory back-up mechanisms for the CSP’s counterparty, e.g. there is a right to request mediation but going to court instead or afterwards remains possible (high protection).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(44,'There are unreasonable punitive clauses, limitations and exceptions or otherwise clauses which make termination very difficult.','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(45,'Termination is possible, but only in limited circumstances e.g. breach of contract, or with a very early prior notice, or under conditions which are substantially aimed to protect the CSP (reservation) (low protection).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(46,'Termination is possible in most or all circumstances, notice periods are reasonable if any and the conditions are reasonably balanced, termination is also possible without notice under breach of contract, although grace periods may apply. (medium protection).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(47,'Termination is very easy and always possible. No notice period applies or it is very limited. Breach of contract justifies immediate termination with little grace periods, if any. All conditions are favourable to the CSP’s counterparty (high protection).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(48,'There is no protection. The CSP can terminate and/or suspend at will, with no reason or notice and there are no mechanisms to ease the transition.','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(49,'Termination and/or suspension is very easy for the CSP, many options being available with a low threshold, including options for termination/suspension without notice based on very low-threshold contractual shortcomings of the counterparty (reservation) (low protection).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(50,'Termination and/or suspension is possible in several circumstances, but there is a notice periods and/or other mechanisms to ease transition and this is reasonable. Termination/suspension without notice is only possible on the basis of reasonable conditions (medium protection).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(51,'Termination and/or suspension is possible in a reasonably limited number of circumstances. Notice periods and/or other mechanisms to ease transition are favourable to the CSP’s counterparty. Termination/suspension without notice is strictly limited (high protection).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(52,'Unilateral changes are possible, without the CSP having to give a reason, and with very little to no notice period, giving the CSP’s counterparty little to no time to find alternatives if the new terms are unsuitable.','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(53,'Unilateral changes are possible, without the CSP having to give a reason, and with a short notice period, giving the CSP’s counterparty some opportunity to find alternative solutions if the new terms of the contract are unsuitable (reservation) (low protection).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(54,'Unilateral changes are possible, with or without the CSP having to give a reason, but there is a reasonable notice period and potentially other mechanisms giving the CSP’s counterparty a fair opportunity to find alternative solutions if the new terms of the contract are unsuitable (medium protection).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(55,'Unilateral changes are not possible. The contract is fixed for its duration in its terms (high protection).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(56,'There is no option. All liability is excluded, even contra legem.','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(57,'There are theoretical options to recover damages but they are heavily limited and it is questionable that in reality the CSP’s counterparty will be able to obtain a reasonable measure of redress, e.g. because of far-reaching carve-outs or a very restrictive liability cap (reservation) (low protection).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(58,'There are options to recover damages, although limited in a reasonable way and according to industry practice. Redress is reasonably obtainable but may be limited in amount (medium protection).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(59,'There are reasonable and balanced options to recover damages. Limitations are either not present or favourable for the CSP’s counterparty (high protection).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(60,'Force majeure is interpreted so extensively that no liability can ever exist.','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(61,'Force majeure has a (very) extensive interpretation, posing a real risk of hollowing out any liability possibility, which will likely lead to discussion if certain events arise (reservation) (low protection).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(62,'Force majeure is described in a reasonable manner and does not principally hollow out liability (medium protection).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(63,'Force majeure is described clearly and precisely and is limited to classic force majeure scenarios (high protection).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(64,'No confidentiality is guaranteed.','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(65,'Basic references are available to confidentiality but faulty and/or incomprehensive, and/or enforcement problems to be expected (reservation) (low protection).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(66,'There is a clear and enforceable confidentiality obligation for both Parties (medium protection).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(67,'Confidentiality obligations are clear and enforceable and are fully comprehensive (high protection).','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL);
+/*!40000 ALTER TABLE `legal_answer` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `legal_assessment`
+--
+
+DROP TABLE IF EXISTS `legal_assessment`;
+/*!40101 SET @saved_cs_client     = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `legal_assessment` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `controlid` bigint(20) NOT NULL,
+  `answerid` bigint(20) NOT NULL,
+  `score` smallint(6) NOT NULL,
+  `created_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `last_modified_date` timestamp NULL DEFAULT NULL,
+  `deleted_date` timestamp NULL,
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=121 DEFAULT CHARSET=latin1;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Dumping data for table `legal_assessment`
+--
+
+LOCK TABLES `legal_assessment` WRITE;
+/*!40000 ALTER TABLE `legal_assessment` DISABLE KEYS */;
+INSERT INTO `legal_assessment` VALUES (1,1,1,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(2,1,2,0,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(3,2,1,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(4,2,2,0,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(5,3,1,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(6,3,2,0,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(7,3,3,-1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(8,4,1,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(9,4,2,0,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(10,4,3,-1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(11,5,4,0,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(12,5,5,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(13,5,6,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(14,5,7,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(15,6,1,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(16,6,2,0,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(17,7,8,0,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(18,7,9,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(19,7,10,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(20,7,11,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(21,8,12,0,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(22,8,9,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(23,8,10,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(24,8,11,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(25,9,12,0,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(26,9,9,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(27,9,10,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(28,9,11,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(29,10,12,0,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(30,10,13,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(31,10,14,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(32,10,11,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(33,11,12,0,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(34,11,15,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(35,11,16,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(36,11,11,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(37,12,12,0,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(38,12,17,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(39,12,16,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(40,12,11,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(41,13,12,0,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(42,13,17,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(43,13,16,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(44,13,11,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(45,14,12,0,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(46,14,18,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(47,14,19,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(48,14,11,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(49,15,12,0,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(50,15,20,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(51,15,21,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(52,15,11,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(53,16,12,0,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(54,16,22,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(55,16,21,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(56,16,11,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(57,17,12,0,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(58,17,23,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(59,17,21,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(60,17,11,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(61,18,12,0,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(62,18,24,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(63,18,25,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(64,18,11,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(65,19,12,0,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(66,19,26,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(67,19,27,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(68,19,11,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(69,20,12,0,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(70,20,28,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(71,20,27,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(72,20,29,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(73,21,12,0,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(74,21,30,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(75,21,31,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(76,21,11,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(77,22,32,0,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(78,22,33,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(79,22,34,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(80,22,35,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(81,23,36,0,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(82,23,37,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(83,23,38,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(84,23,39,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(85,24,40,0,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(86,24,41,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(87,24,42,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(88,24,43,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(89,25,44,0,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(90,25,45,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(91,25,46,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(92,25,47,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(93,26,48,0,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(94,26,49,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(95,26,50,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(96,26,51,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(97,27,52,0,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(98,27,53,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(99,27,54,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(100,27,55,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(101,28,56,0,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(102,28,57,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(103,28,58,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(104,28,59,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(105,29,60,0,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(106,29,61,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(107,29,62,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(108,29,63,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(109,30,64,0,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(110,30,65,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(111,30,66,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(112,30,67,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(113,31,1,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(114,31,2,0,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(115,32,1,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(116,32,2,0,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(117,33,1,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(118,33,2,0,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(119,34,1,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(120,34,2,0,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL);
+/*!40000 ALTER TABLE `legal_assessment` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `legal_control`
+--
+
+DROP TABLE IF EXISTS `legal_control`;
+/*!40101 SET @saved_cs_client     = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `legal_control` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `question` text NOT NULL,
+  `issimplecontrol` bit(1) NOT NULL,
+  `created_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `last_modified_date` timestamp NULL DEFAULT NULL,
+  `deleted_date` timestamp NULL,
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULT CHARSET=latin1;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Dumping data for table `legal_control`
+--
+
+LOCK TABLES `legal_control` WRITE;
+/*!40000 ALTER TABLE `legal_control` DISABLE KEYS */;
+INSERT INTO `legal_control` VALUES (1,'Is your organization a validly registered and incorporated entity, which is neither in liquidation nor in a state of bankruptcy?','','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(2,'Did your organization appoint and will it maintain a DPO in accordance with Articles 37-39 of the GDPR or an equivalent position e.g. a privacy officer or privacy team which can act as a data protection point of contact?','','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(3,'Did your organization appoint and will it maintain a representative in accordance with Article 27 of the GDPR?','','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(4,'In case data is transferred outside the EEA, do you have in place sufficient safeguards, as described in Articles 44-49 of the GDPR?','','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(5,'What is the level of protection offered to the CSP’s counterparty by the transfer mechanism offered by the CSP, taking into account available guidance on this point?','\0','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(6,'Do you provide a data processing agreement which is compliant with Article 28 of the GPDR?','','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(7,'How would you assess the description of subject-matter and duration of the processing, the nature and purpose of the processing, the type of personal data and categories of data subjects as required by Article 28(3) GDPR in the DPA under revision?','\0','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(8,'How would you assess the description in the DPA of the obligation for the CSP as a (sub-)processor to only act on the documented instructions of the CSP’s counterparty, in the light of Article 28(3), a) of the GDPR and the current official interpretation available?','\0','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(9,'How would you assess the description in the DPA of the obligation for the CSP to ensure that persons authorised to process the personal data have committed themselves to confidentiality or are under an appropriate statutory obligation of confidentiality?','\0','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(10,'How would you assess the description in the DPA of the obligation for the CSP to take all security measures pursuant to Article 32 GDPR, in the light of the obligation of Article 28(3), c) GDPR to include a clause detailing such measures in the DPA?','\0','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(11,'Taking into account all the contracts terms (or their absence) on this point, how do you assess the adequacy of the contractual obligation in the DPA to provide compliance with Article 28(2) GDPR, as referred to in Article 28(3), d) GDPR?','\0','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(12,'Taking into account all the contracts terms (or their absence) on this point, how do you assess the adequacy of the contractual obligation in the DPA to provide compliance with the requirement of pushing down the same data protection terms binding the CSP on any sub-processors engaged in the processing by the CSP, as described in Article 28(4) GDPR, as referred to in Article 28(3), d) GDPR?','\0','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(13,'Taking into account all the contracts terms (or their absence) on this point, how do you assess the adequacy of the contractual obligation in the DPA to provide compliance with Article 28(4) GDPR, as referred to in Article 28(3), d) GDPR, namely that there should be a clear statement that the CSP will always remain liable towards its counterparty if the CSPs sub-processor fails to fulfil its obligations?','\0','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(14,'Taking into account all the contracts terms (or their absence) on this point, including those relating to cost and conditions/modalities of such assistance, how do you assess the adequacy of the contractual obligation in the DPA to provide compliance with Article 28(3), e) GDPR?','\0','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(15,'Taking into account all the contracts terms (or their absence) on this point, including those relating to cost and conditions/modalities of such assistance, how do you assess the adequacy of the contractual obligation in the DPA for the CSP to provide assistance to its counterparty in the counterparty’s own obligation to ensure an adequate level of security of processing, as required by Article 28(3), f) GDPR?','\0','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(16,'Taking into account all the contracts terms (or their absence) on this point, including any conditions/modalities of such assistance, how do you assess the adequacy of the contractual obligation in the DPA for the CSP to provide support in fulfilling the notification obligations of Article 33 and 34 GDPR as required by Article 28(3), f) GDPR, specifically outside the own processor-specific obligation to notify the controller without undue delay after becoming aware of a data breach (Article 33(2) GDPR)?','\0','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(17,'Taking into account all the contracts terms (or their absence) on this point, including any conditions/modalities of such assistance, how do you assess the adequacy of the contractual obligation in the DPA for the CSP to provide support in fulfilling its counterparty’s obligation to carry out a data protection impact assessment under the conditions provide in Article 35 GDPR and, where applicable, of the prior consultation obligation contained in Article 36 GDPR, as required by Article 28(3), f) GDPR?','\0','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(18,'Taking into account all the contracts terms (or their absence) on this point, including any conditions/modalities, how do you assess the adequacy of the contractual obligation in the DPA for the CSP to, a the choice of the counterparty, delete or return all personal data to the counterparty at the end of the provision of services?','\0','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(19,'How do you assess the obligation in the DPA obliging the CSP to make available to its counterparty all information necessary to demonstrate compliance with the obligations laid down in Article 28 GDPR?','\0','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(20,'How do you assess the obligation in the DPA obliging the CSP submit itself to audits, including inspections carried out by the counterparty itself or by another auditor mandated by the counterparty, as required by Article 28(3), h) GDPR?','\0','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(21,'How do you assess the obligation in the DPA obliging the CSP to immediately inform the counterparty if it considers any of the counterparty’s instructions contrary to applicable data protection law as required by Article 28(3), second subparagraph GDPR?','\0','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(22,'How do you assess the liability situation for data protection related matters (liability towards data subjects, for fines, for related matters, full liability of the processor for the sub-processor) under the DPA, especially in the light of Article 82 GDPR and taking into account the impact of that Article on the principal freedom of contract of the Parties?','\0','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(23,'If there is a termination clause in the DPA, does it ensure protection of the CSP’s counterparty and compliance under article 28 GDPR?','\0','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(24,'Examining the content of the alternative dispute resolution clause, what level of protection does it offer to the CSP’s counterparty, taking into account that an alternative dispute resolution clause should be enforceable and not subject to limitations and/or conditions that are prohibitive or render it ineffective, nor should it be the only binding option, as, depending on the situation the CSP’s counterparty may prefer not to take the ADR route?','\0','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(25,'Taking into account the nature of the Cloud services (bespoke vs. generic) and all relevant contractual terms, how do you assess the level of ease offered to the CSP’s counterparty in terminating the contract in a situation where the CSP’s services are no longer wanted, also taking account of any consequences of termination?','\0','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(26,'Taking into account the nature of the Cloud services (bespoke vs. generic) and all relevant contractual terms, how do you assess the level of protection offered to the CSP’s counterparty when looking at the options available to the CSP to terminate or suspend the contract.','\0','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(27,'Taking into account the nature of the Cloud services (bespoke vs. generic) and all relevant contractual terms how do you assess the level of protection offered to the CSP’s counterparty from potentially disruptive unilateral changes of contract?','\0','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(28,'Taking into account all terms in the contractual documents, what is the level of protection offered to the CSP’s counterparty in terms of options to recover damages, taking into account the extent to which liability is limited?','\0','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(29,'Taking into account the contractual terms on force majeure, how do you assess the remaining level of protection for the CSP’s counterparty, taking into account that, while force majeure is a reasonable exception in itself, an overly extensive interpretation may create a backdoor for the CSP to unduly escape liability?','\0','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(30,'What is the level of protection offered by the text of the general confidentiality obligations resting on the parties, specifically on the CSP?','\0','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(31,'Did your organization obtain and does it maintain a certification under the ISO 27001 standard or equivalent, covering the service in question that is less than 3 years old in its current form and proof of which is available to the customer upon request?','','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(32,'Did your organization obtain and does it maintain at least one certification that meets all of the 27 security objectives of the Cloud Certification Schemes Metaframework as defined by ENISA, such as CSA attestation/certification – OCF level 2, TÜV Rheinland Certified Cloud Service certification or equivalent, which covers the service in question, is less than 3 years old in its current form and proof of which is available to the customer upon request?','','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(33,'Does your organization adhere to at least one self-regulatory instrument (code of conduct) setting reasonable industry standards for data portability and switching as intended by Article 6 of the Regulation on the free flow of data?','','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(34,'Does your organization adhere to at least one self-regulatory instrument (code of conduct) setting out data protection requirements, approved under Article 40 GDPR?','','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL);
+/*!40000 ALTER TABLE `legal_control` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `service`
+--
+
+DROP TABLE IF EXISTS `service`;
+/*!40101 SET @saved_cs_client     = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `service` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `servicename` varchar(70) NOT NULL,
+  `firstcontract` longblob,
+  `secondcontract` longblob,
+  `thirdcontract` longblob,
+  `serviceclassid` bigint(20) NOT NULL,
+  `created_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `last_modified_date` timestamp NULL DEFAULT NULL,
+  `deleted_date` timestamp NULL,
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=49 DEFAULT CHARSET=latin1;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Dumping data for table `service`
+--
+
+LOCK TABLES `service` WRITE;
+/*!40000 ALTER TABLE `service` DISABLE KEYS */;
+INSERT INTO `service` VALUES (1,'C1_Spain',NULL,NULL,NULL,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(2,'C1_USA',NULL,NULL,NULL,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(3,'C2_Europe',NULL,NULL,NULL,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(4,'C2_UnitedKingdom',NULL,NULL,NULL,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(5,'C4_Europe',NULL,NULL,NULL,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(6,'C4_USA',NULL,NULL,NULL,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(7,'C8_Germany',NULL,NULL,NULL,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(8,'C8_Spain',NULL,NULL,NULL,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(9,'Storage1_Spain',NULL,NULL,NULL,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(10,'Storage1_USA',NULL,NULL,NULL,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(11,'Storage4_Europe',NULL,NULL,NULL,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(12,'Storage3_USA',NULL,NULL,NULL,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(13,'t2.nano',NULL,NULL,NULL,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(14,'t2.medium',NULL,NULL,NULL,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(15,'m5.large',NULL,NULL,NULL,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(16,'m4.4xlarge',NULL,NULL,NULL,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(17,'m5.2xlarge',NULL,NULL,NULL,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(18,'c5.2xlarge',NULL,NULL,NULL,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(19,'c4.8xlarge',NULL,NULL,NULL,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(20,'g3.8xlarge',NULL,NULL,NULL,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(21,'p2.8xlarge',NULL,NULL,NULL,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(22,'r4.xlarge',NULL,NULL,NULL,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(23,'x1e.4xlarge',NULL,NULL,NULL,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(24,'StandardStorage1_Europe',NULL,NULL,NULL,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(25,'StandardStorage1_USA',NULL,NULL,NULL,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(26,'db.m3.medium',NULL,NULL,NULL,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(27,'db.r4.4xlarge',NULL,NULL,NULL,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(28,'db.dynamo.3',NULL,NULL,NULL,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(29,'db.dynamo.4',NULL,NULL,NULL,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(30,'A2v2',NULL,NULL,NULL,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(31,'A2v2_USA',NULL,NULL,NULL,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(32,'B8_USA',NULL,NULL,NULL,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(33,'B8_Germany',NULL,NULL,NULL,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(34,'A3_France',NULL,NULL,NULL,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(35,'DS13v2',NULL,NULL,NULL,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(36,'Storage_AZ_1',NULL,NULL,NULL,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(37,'Storage_AZ_2',NULL,NULL,NULL,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(38,'Storage_AZ_3',NULL,NULL,NULL,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(39,'db.mysql.AZ_1',NULL,NULL,NULL,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(40,'db.postgreSQL.AZ',NULL,NULL,NULL,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(41,'n1-standard-16',NULL,NULL,NULL,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(42,'n1-highmem-16',NULL,NULL,NULL,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(43,'Storage_G_1',NULL,NULL,NULL,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(44,'Storage_G_2',NULL,NULL,NULL,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(45,'db.postgreSQL.G',NULL,NULL,NULL,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(46,'db.mysql.G',NULL,NULL,NULL,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(47,'VM_1_CS',NULL,NULL,NULL,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(48,'m1.medium',NULL,NULL,NULL,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL);
+/*!40000 ALTER TABLE `service` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `service_attribute_type`
+--
+
+DROP TABLE IF EXISTS `service_attribute_type`;
+/*!40101 SET @saved_cs_client     = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `service_attribute_type` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `name` varchar(50) NOT NULL,
+  `nfrname` varchar(20) DEFAULT NULL,
+  `isenumeration` bit(1) NOT NULL,
+  `isform` bit(1) NOT NULL,
+  `iscommon` bit(1) NOT NULL,
+  `isfunctionalrequirement` bit(1) NOT NULL,
+  `parentid` bigint(20) DEFAULT NULL,
+  `childid` bigint(20) DEFAULT NULL,
+  `units` varchar(35) DEFAULT NULL,
+  `unitfactor` varchar(30) DEFAULT NULL,
+  `unitrule` varchar(4) DEFAULT NULL,
+  `evalrule` varchar(70) DEFAULT NULL,
+  `created_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `last_modified_date` timestamp NULL DEFAULT NULL,
+  `deleted_date` timestamp NULL,
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=latin1;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Dumping data for table `service_attribute_type`
+--
+
+LOCK TABLES `service_attribute_type` WRITE;
+/*!40000 ALTER TABLE `service_attribute_type` DISABLE KEYS */;
+INSERT INTO `service_attribute_type` VALUES (1,'Region','Region','','\0','','\0',NULL,2,NULL,NULL,'LIKE',NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(2,'Zone','Zone','','\0','','\0',1,NULL,NULL,NULL,'LIKE',NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(3,'Provider','Provider','','\0','','\0',NULL,NULL,NULL,NULL,'LIKE',NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(4,'Virtual CPU Cores',NULL,'\0','\0','\0','',NULL,NULL,NULL,NULL,'>=','variable > 0','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(5,'Frequency per Core',NULL,'\0','\0','\0','',NULL,NULL,'MHz','1','>=','variable > 0','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(6,'Memory',NULL,'\0','\0','\0','',NULL,NULL,'MB,GB,TB','1048576,1024,1','>=','variable > 0','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(7,'Instance Storage',NULL,'\0','\0','\0','',NULL,NULL,'MB,GB,TB','1048576,1024,1','>=','variable > 0','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(8,'Optimized for',NULL,'','\0','\0','',NULL,NULL,NULL,NULL,'LIKE',NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(9,'Public IP',NULL,'','\0','\0','',NULL,NULL,NULL,NULL,'LIKE',NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(10,'Underpinning Technology',NULL,'\0','\0','\0','',NULL,NULL,NULL,NULL,'LIKE',NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(11,'Database Type',NULL,'','\0','\0','',NULL,12,NULL,NULL,'LIKE',NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(12,'Database Technology',NULL,'','\0','\0','',11,NULL,NULL,NULL,'LIKE',NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(13,'Data Transfer IN',NULL,'\0','\0','\0','',NULL,NULL,'MB,GB,TB','1048576,1024,1','>=','variable > 0','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(14,'Data Transfer OUT',NULL,'\0','\0','\0','',NULL,NULL,'MB,GB,TB','1048576,1024,1','>=','variable > 0','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(15,'Database Storage Capacity',NULL,'\0','\0','\0','',NULL,NULL,'MB,GB,TB','1048576,1024,1','>=','variable > 0','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(16,'Storage Type',NULL,'','\0','\0','',NULL,NULL,NULL,NULL,'LIKE',NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(17,'Storage Subtype',NULL,'','\0','\0','',NULL,NULL,NULL,NULL,'LIKE',NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(18,'Storage Capacity',NULL,'\0','\0','\0','',NULL,NULL,'MB,GB,TB','1048576,1024,1','>=','variable > 0','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(19,'Storage Data Redundancy',NULL,'','\0','\0','',NULL,NULL,NULL,NULL,'LIKE',NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(20,'Availability','Availability','\0','\0','\0','\0',NULL,NULL,'percentage','1','>=','variable >= 0 && variable <= 100','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(21,'Response time: Virtual Machine Performance','Performance','\0','\0','\0','\0',NULL,NULL,'nanoseconds,milliseconds,seconds','1000000000,1000,1','<=','variable > 0','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(22,'Transaction Unit (DTU): Database Performance','Performance','\0','\0','\0','\0',NULL,NULL,'nanoseconds,milliseconds,seconds','1000000000,1000,1','<=','variable > 0','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(23,'Request - Response time: Storage Performance','Performance','\0','\0','\0','\0',NULL,NULL,'nanoseconds,milliseconds,seconds','1000000000,1000,1','<=','variable > 0','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(24,'Legal Level/Accreditations','Legal Level','','','\0','\0',NULL,NULL,NULL,NULL,'>=','variable >= 1 && variable <= 3','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(25,'Cost/Currency','Cost/Currency','\0','\0','\0','\0',NULL,NULL,'euro,pound,dollar','1,1,1','<=','variable > 0','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL);
+/*!40000 ALTER TABLE `service_attribute_type` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `service_attribute_value`
+--
+
+DROP TABLE IF EXISTS `service_attribute_value`;
+/*!40101 SET @saved_cs_client     = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `service_attribute_value` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `serviceattributevalue` varchar(50) DEFAULT NULL,
+  `unitvalue` varchar(15) DEFAULT NULL,
+  `checklistvalue` varchar(40) DEFAULT NULL,
+  `serviceid` bigint(20) NOT NULL,
+  `serviceattributetypeid` bigint(20) NOT NULL,
+  `created_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `last_modified_date` timestamp NULL DEFAULT NULL,
+  `deleted_date` timestamp NULL,
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=632 DEFAULT CHARSET=latin1;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Dumping data for table `service_attribute_value`
+--
+
+LOCK TABLES `service_attribute_value` WRITE;
+/*!40000 ALTER TABLE `service_attribute_value` DISABLE KEYS */;
+INSERT INTO `service_attribute_value` VALUES (1,'00EU',NULL,NULL,1,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(2,'SPEU',NULL,NULL,1,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(3,'ARSY',NULL,NULL,1,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(4,'1',NULL,NULL,1,4,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(5,'1500',NULL,NULL,1,5,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(6,'1','GB',NULL,1,6,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(7,'40','GB',NULL,1,7,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(8,NULL,NULL,NULL,1,8,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(9,NULL,NULL,NULL,1,9,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(10,'VmWare',NULL,NULL,1,10,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(11,'99.5','percentage',NULL,1,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(12,'5','milliseconds',NULL,1,21,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(13,NULL,NULL,NULL,1,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(14,'15','euro',NULL,1,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(15,'00NA',NULL,NULL,2,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(16,'USNA',NULL,NULL,2,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(17,'ARSY',NULL,NULL,2,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(18,'1',NULL,NULL,2,4,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(19,'1500',NULL,NULL,2,5,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(20,'1','GB',NULL,2,6,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(21,'40','GB',NULL,2,7,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(22,NULL,NULL,NULL,2,8,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(23,NULL,NULL,NULL,2,9,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(24,'VmWare',NULL,NULL,2,10,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(25,'99.5','percentage',NULL,2,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(26,'5','milliseconds',NULL,2,21,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(27,NULL,NULL,NULL,2,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(28,'15','euro',NULL,2,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(29,'00EU',NULL,NULL,3,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(30,'DEEU',NULL,NULL,3,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(31,'ARSY',NULL,NULL,3,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(32,'2',NULL,NULL,3,4,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(33,'1500',NULL,NULL,3,5,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(34,'4','GB',NULL,3,6,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(35,'60','GB',NULL,3,7,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(36,NULL,NULL,NULL,3,8,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(37,NULL,NULL,NULL,3,9,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(38,'VmWare',NULL,NULL,3,10,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(39,'99.6','percentage',NULL,3,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(40,'3','milliseconds',NULL,3,21,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(41,NULL,NULL,NULL,3,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(42,'40','euro',NULL,3,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(43,'00EU',NULL,NULL,4,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(44,'UKEU',NULL,NULL,4,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(45,'ARSY',NULL,NULL,4,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(46,'2',NULL,NULL,4,4,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(47,'1500',NULL,NULL,4,5,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(48,'4','GB',NULL,4,6,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(49,'60','GB',NULL,4,7,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(50,NULL,NULL,NULL,4,8,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(51,NULL,NULL,NULL,4,9,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(52,'VmWare',NULL,NULL,4,10,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(53,'99.6','percentage',NULL,4,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(54,'3','milliseconds',NULL,4,21,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(55,NULL,NULL,NULL,4,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(56,'40','euro',NULL,4,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(57,'00EU',NULL,NULL,5,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(58,NULL,NULL,NULL,5,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(59,'ARSY',NULL,NULL,5,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(60,'4',NULL,NULL,5,4,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(61,'1500',NULL,NULL,5,5,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(62,'8','GB',NULL,5,6,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(63,'100','GB',NULL,5,7,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(64,NULL,NULL,NULL,5,8,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(65,'IPV4',NULL,NULL,5,9,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(66,'VmWare',NULL,NULL,5,10,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(67,'99.8','percentage',NULL,5,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(68,'2','milliseconds',NULL,5,21,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(69,NULL,NULL,NULL,5,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(70,'80','euro',NULL,5,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(71,'00NA',NULL,NULL,6,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(72,'USNA',NULL,NULL,6,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(73,'ARSY',NULL,NULL,6,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(74,'4',NULL,NULL,6,4,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(75,'1500',NULL,NULL,6,5,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(76,'8','GB',NULL,6,6,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(77,'100','GB',NULL,6,7,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(78,NULL,NULL,NULL,6,8,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(79,NULL,NULL,NULL,6,9,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(80,'VmWare',NULL,NULL,6,10,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(81,'99.8','percentage',NULL,6,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(82,'3','milliseconds',NULL,6,21,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(83,NULL,NULL,NULL,6,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(84,'80','euro',NULL,6,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(85,'00EU',NULL,NULL,7,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(86,'DEEU',NULL,NULL,7,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(87,'ARSY',NULL,NULL,7,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(88,'8',NULL,NULL,7,4,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(89,'1500',NULL,NULL,7,5,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(90,'16','GB',NULL,7,6,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(91,'200','GB',NULL,7,7,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(92,NULL,NULL,NULL,7,8,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(93,'IPV4',NULL,NULL,7,9,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(94,'VmWare',NULL,NULL,7,10,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(95,'99.9','percentage',NULL,7,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(96,'2','milliseconds',NULL,7,21,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(97,NULL,NULL,NULL,7,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(98,'150','euro',NULL,7,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(99,'00EU',NULL,NULL,8,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(100,'SPEU',NULL,NULL,8,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(101,'ARSY',NULL,NULL,8,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(102,'8',NULL,NULL,8,4,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(103,'1500',NULL,NULL,8,5,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(104,'16','GB',NULL,8,6,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(105,'200','GB',NULL,8,7,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(106,NULL,NULL,NULL,8,8,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(107,'IPV4',NULL,NULL,8,9,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(108,'VmWare',NULL,NULL,8,10,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(109,'99.8','percentage',NULL,8,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(110,'2','milliseconds',NULL,8,21,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(111,NULL,NULL,NULL,8,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(112,'150','euro',NULL,8,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(113,'00EU',NULL,NULL,9,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(114,'SPEU',NULL,NULL,9,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(115,'ARSY',NULL,NULL,9,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(116,'GENE',NULL,NULL,9,16,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(117,'BLOK',NULL,NULL,9,17,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(118,'40','GB',NULL,9,18,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(119,'ZONS',NULL,NULL,9,19,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(120,'99.5','percentage',NULL,9,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(121,'5','milliseconds',NULL,9,23,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(122,NULL,NULL,NULL,9,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(123,'6','euro',NULL,9,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(124,'00NA',NULL,NULL,10,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(125,'USNA',NULL,NULL,10,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(126,'ARSY',NULL,NULL,10,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(127,'GENE',NULL,NULL,10,16,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(128,'BLOK',NULL,NULL,10,17,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(129,'40','GB',NULL,10,18,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(130,'LOCS',NULL,NULL,10,19,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(131,'99.5','percentage',NULL,10,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(132,'5','milliseconds',NULL,10,23,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(133,NULL,NULL,NULL,10,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(134,'6','euro',NULL,10,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(135,'00EU',NULL,NULL,11,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(136,NULL,NULL,NULL,11,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(137,'ARSY',NULL,NULL,11,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(138,'GENE',NULL,NULL,11,16,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(139,'BLOK',NULL,NULL,11,17,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(140,'100','GB',NULL,11,18,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(141,'ZONS',NULL,NULL,11,19,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(142,'99.8','percentage',NULL,11,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(143,'3','milliseconds',NULL,11,23,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(144,NULL,NULL,NULL,11,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(145,'15','euro',NULL,11,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(146,'00NA',NULL,NULL,12,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(147,'USNA',NULL,NULL,12,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(148,'ARSY',NULL,NULL,12,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(149,'GENE',NULL,NULL,12,16,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(150,'BLOK',NULL,NULL,12,17,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(151,'200','GB',NULL,12,18,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(152,'ZONS',NULL,NULL,12,19,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(153,'99.9','percentage',NULL,12,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(154,'2','milliseconds',NULL,12,23,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(155,NULL,NULL,NULL,12,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(156,'30','euro',NULL,12,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(157,'00EU',NULL,NULL,13,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(158,'IEEU',NULL,NULL,13,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(159,'AMAZ',NULL,NULL,13,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(160,'1',NULL,NULL,13,4,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(161,'1500',NULL,NULL,13,5,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(162,'0.5','GB',NULL,13,6,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(163,'40','GB',NULL,13,7,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(164,'GEPU',NULL,NULL,13,8,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(165,'IPV4',NULL,NULL,13,9,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(166,NULL,NULL,NULL,13,10,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(167,'98','percentage',NULL,13,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(168,'3','seconds',NULL,13,21,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(169,NULL,NULL,NULL,13,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(170,'4.53','dollar',NULL,13,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(171,'00NA',NULL,NULL,14,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(172,'USNA',NULL,NULL,14,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(173,'AMAZ',NULL,NULL,14,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(174,'2',NULL,NULL,14,4,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(175,'1500',NULL,NULL,14,5,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(176,'4','GB',NULL,14,6,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(177,'60','GB',NULL,14,7,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(178,'GEPU',NULL,NULL,14,8,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(179,'IPV4',NULL,NULL,14,9,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(180,NULL,NULL,NULL,14,10,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(181,'98.2','percentage',NULL,14,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(182,'2','seconds',NULL,14,21,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(183,NULL,NULL,NULL,14,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(184,'39.75','dollar',NULL,14,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(185,'00NA',NULL,NULL,15,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(186,'CANA',NULL,NULL,15,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(187,'ARSY',NULL,NULL,15,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(188,'2',NULL,NULL,15,4,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(189,'1500',NULL,NULL,15,5,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(190,'8','GB',NULL,15,6,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(191,'100','GB',NULL,15,7,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(192,'GEPU',NULL,NULL,15,8,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(193,'IPV4',NULL,NULL,15,9,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(194,NULL,NULL,NULL,15,10,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(195,'98.5','percentage',NULL,15,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(196,'1','seconds',NULL,15,21,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(197,NULL,NULL,NULL,15,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(198,'77','dollar',NULL,15,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(199,'00EU',NULL,NULL,16,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(200,'SPEU',NULL,NULL,16,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(201,'AMAZ',NULL,NULL,16,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(202,'16',NULL,NULL,16,4,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(203,'1500',NULL,NULL,16,5,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(204,'64','GB',NULL,16,6,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(205,'120','GB',NULL,16,7,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(206,'GEPU',NULL,NULL,16,8,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(207,NULL,NULL,NULL,16,9,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(208,NULL,NULL,NULL,16,10,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(209,'99.8','percentage',NULL,16,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(210,'2','nanoseconds',NULL,16,21,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(211,NULL,NULL,NULL,16,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(212,'640','dollar',NULL,16,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(213,'00NA',NULL,NULL,17,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(214,'USNA',NULL,NULL,17,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(215,'AMAZ',NULL,NULL,17,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(216,'8',NULL,NULL,17,4,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(217,'1500',NULL,NULL,17,5,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(218,'32','GB',NULL,17,6,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(219,'100','GB',NULL,17,7,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(220,'GEPU',NULL,NULL,17,8,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(221,NULL,NULL,NULL,17,9,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(222,NULL,NULL,NULL,17,10,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(223,'99.2','percentage',NULL,17,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(224,'3','milliseconds',NULL,17,21,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(225,NULL,NULL,NULL,17,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(226,'323','dollar',NULL,17,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(227,'00NA',NULL,NULL,18,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(228,'CANA',NULL,NULL,18,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(229,'AMAZ',NULL,NULL,18,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(230,'8',NULL,NULL,18,4,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(231,'1500',NULL,NULL,18,5,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(232,'16','GB',NULL,18,6,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(233,'80','GB',NULL,18,7,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(234,'COOP',NULL,NULL,18,8,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(235,'IPV4',NULL,NULL,18,9,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(236,NULL,NULL,NULL,18,10,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(237,'99.4','percentage',NULL,18,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(238,'5','milliseconds',NULL,18,21,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(239,NULL,NULL,NULL,18,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(240,'268','dollar',NULL,18,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(241,'00EU',NULL,NULL,19,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(242,'IEEU',NULL,NULL,19,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(243,'AMAZ',NULL,NULL,19,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(244,'36',NULL,NULL,19,4,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(245,'1500',NULL,NULL,19,5,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(246,'60','GB',NULL,19,6,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(247,'200','GB',NULL,19,7,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(248,'COOP',NULL,NULL,19,8,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(249,'IPV4',NULL,NULL,19,9,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(250,NULL,NULL,NULL,19,10,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(251,'99.8','percentage',NULL,19,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(252,'2','milliseconds',NULL,19,21,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(253,NULL,NULL,NULL,19,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(254,'1304','euro',NULL,19,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(255,'00NA',NULL,NULL,20,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(256,'USNA',NULL,NULL,20,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(257,'AMAZ',NULL,NULL,20,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(258,'32',NULL,NULL,20,4,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(259,'1500',NULL,NULL,20,5,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(260,'244','GB',NULL,20,6,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(261,'220','GB',NULL,20,7,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(262,'GPUI',NULL,NULL,20,8,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(263,'IPV4',NULL,NULL,20,9,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(264,NULL,NULL,NULL,20,10,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(265,'99.8','percentage',NULL,20,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(266,'2','milliseconds',NULL,20,21,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(267,NULL,NULL,NULL,20,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(268,'2209','dollar',NULL,20,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(269,'00EU',NULL,NULL,21,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(270,'UKEU',NULL,NULL,21,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(271,'AMAZ',NULL,NULL,21,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(272,'32',NULL,NULL,21,4,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(273,'1500',NULL,NULL,21,5,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(274,'488','GB',NULL,21,6,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(275,'250','GB',NULL,21,7,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(276,'GPUI',NULL,NULL,21,8,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(277,'IPV4',NULL,NULL,21,9,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(278,NULL,NULL,NULL,21,10,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(279,'99.9','percentage',NULL,21,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(280,'2','milliseconds',NULL,21,21,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(281,NULL,NULL,NULL,21,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(282,'5600','dollar',NULL,21,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(283,'00NA',NULL,NULL,22,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(284,'USNA',NULL,NULL,22,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(285,'AMAZ',NULL,NULL,22,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(286,'4',NULL,NULL,22,4,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(287,'1500',NULL,NULL,22,5,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(288,'30.5','GB',NULL,22,6,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(289,'70','GB',NULL,22,7,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(290,'MEOP',NULL,NULL,22,8,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(291,'IPV4',NULL,NULL,22,9,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(292,NULL,NULL,NULL,22,10,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(293,'98.5','percentage',NULL,22,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(294,'2','seconds',NULL,22,21,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(295,NULL,NULL,NULL,22,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(296,'214','euro',NULL,22,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(297,'00EU',NULL,NULL,23,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(298,'DEEU',NULL,NULL,23,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(299,'AMAZ',NULL,NULL,23,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(300,'16',NULL,NULL,23,4,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(301,'1500',NULL,NULL,23,5,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(302,'488','GB',NULL,23,6,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(303,'80','GB',NULL,23,7,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(304,'MEOP',NULL,NULL,23,8,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(305,'IPV4',NULL,NULL,23,9,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(306,NULL,NULL,NULL,23,10,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(307,'99','percentage',NULL,23,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(308,'2','milliseconds',NULL,23,21,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(309,NULL,NULL,NULL,23,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(310,'3376','euro',NULL,23,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(311,'00EU',NULL,NULL,24,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(312,'DEEU',NULL,NULL,24,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(313,'AMAZ',NULL,NULL,24,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(314,'GENE',NULL,NULL,24,16,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(315,'OBJT',NULL,NULL,24,17,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(316,'50','TB',NULL,24,18,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(317,'ZONS',NULL,NULL,24,19,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(318,'95','percentage',NULL,24,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(319,'3','seconds',NULL,24,23,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(320,NULL,NULL,NULL,24,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(321,'25','euro',NULL,24,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(322,'00NA',NULL,NULL,25,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(323,'USNA',NULL,NULL,25,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(324,'AMAZ',NULL,NULL,25,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(325,'GENE',NULL,NULL,25,16,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(326,'OBJT',NULL,NULL,25,17,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(327,'50','TB',NULL,25,18,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(328,'ZONS',NULL,NULL,25,19,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(329,'95','percentage',NULL,25,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(330,'2','seconds',NULL,25,23,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(331,NULL,NULL,NULL,25,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(332,'26','euro',NULL,25,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(333,'00EU',NULL,NULL,26,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(334,'IEEU',NULL,NULL,26,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(335,'AMAZ',NULL,NULL,26,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(336,'1',NULL,NULL,26,4,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(337,'00RE',NULL,NULL,26,11,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(338,'MYRE',NULL,NULL,26,12,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(339,'200','GB',NULL,26,13,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(340,'200','GB',NULL,26,14,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(341,'3.75','GB',NULL,26,15,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(342,'95','percentage',NULL,26,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(343,'30','milliseconds',NULL,26,22,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(344,NULL,NULL,NULL,26,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(345,'73','dollar',NULL,26,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(346,'00NA',NULL,NULL,27,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(347,'USNA',NULL,NULL,27,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(348,'AMAZ',NULL,NULL,27,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(349,'16',NULL,NULL,27,4,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(350,'00RE',NULL,NULL,27,11,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(351,'MYRE',NULL,NULL,27,12,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(352,'250','GB',NULL,27,13,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(353,'250','GB',NULL,27,14,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(354,'122','GB',NULL,27,15,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(355,'99','percentage',NULL,27,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(356,'2','milliseconds',NULL,27,22,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(357,NULL,NULL,NULL,27,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(358,'1787','dollar',NULL,27,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(359,'00EU',NULL,NULL,28,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(360,'DEEU',NULL,NULL,28,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(361,'AMAZ',NULL,NULL,28,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(362,'2',NULL,NULL,28,4,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(363,'00NR',NULL,NULL,28,11,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(364,'AMNR',NULL,NULL,28,12,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(365,'35','GB',NULL,28,13,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(366,'35','GB',NULL,28,14,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(367,'100','GB',NULL,28,15,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(368,'99.6','percentage',NULL,28,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(369,'3','nanoseconds',NULL,28,22,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(370,NULL,NULL,NULL,28,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(371,'35','dollar',NULL,28,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(372,'00NA',NULL,NULL,29,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(373,'USNA',NULL,NULL,29,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(374,'AMAZ',NULL,NULL,29,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(375,'2',NULL,NULL,29,4,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(376,'00NR',NULL,NULL,29,11,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(377,'AMNR',NULL,NULL,29,12,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(378,'35','GB',NULL,29,13,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(379,'35','GB',NULL,29,14,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(380,'100','GB',NULL,29,15,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(381,'99.6','percentage',NULL,29,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(382,'3','nanoseconds',NULL,29,22,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(383,NULL,NULL,NULL,29,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(384,'25','dollar',NULL,29,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(385,'00EU',NULL,NULL,30,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(386,'IEEU',NULL,NULL,30,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(387,'AZUR',NULL,NULL,30,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(388,'2',NULL,NULL,30,4,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(389,'1500',NULL,NULL,30,5,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(390,'4','GB',NULL,30,6,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(391,'20','GB',NULL,30,7,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(392,NULL,NULL,NULL,30,8,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(393,'IPV4',NULL,NULL,30,9,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(394,NULL,NULL,NULL,30,10,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(395,'95','percentage',NULL,30,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(396,'5','milliseconds',NULL,30,21,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(397,NULL,NULL,NULL,30,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(398,'93.60','dollar',NULL,30,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(399,'00NA',NULL,NULL,31,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(400,'USNA',NULL,NULL,31,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(401,'AZUR',NULL,NULL,31,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(402,'2',NULL,NULL,31,4,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(403,'1500',NULL,NULL,31,5,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(404,'4','GB',NULL,31,6,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(405,'20','GB',NULL,31,7,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(406,NULL,NULL,NULL,31,8,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(407,'IPV4',NULL,NULL,31,9,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(408,NULL,NULL,NULL,31,10,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(409,'95','percentage',NULL,31,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(410,'5','milliseconds',NULL,31,21,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(411,NULL,NULL,NULL,31,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(412,'67','dollar',NULL,31,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(413,'00NA',NULL,NULL,32,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(414,NULL,NULL,NULL,32,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(415,'AZUR',NULL,NULL,32,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(416,'8',NULL,NULL,32,4,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(417,'1500',NULL,NULL,32,5,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(418,'32','GB',NULL,32,6,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(419,'64','GB',NULL,32,7,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(420,NULL,NULL,NULL,32,8,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(421,'IPV4',NULL,NULL,32,9,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(422,NULL,NULL,NULL,32,10,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(423,'98','percentage',NULL,32,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(424,'2','milliseconds',NULL,32,21,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(425,NULL,NULL,NULL,32,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(426,'242','dollar',NULL,32,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(427,'00EU',NULL,NULL,33,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(428,'DEEU',NULL,NULL,33,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(429,'AZUR',NULL,NULL,33,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(430,'8',NULL,NULL,33,4,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(431,'1500',NULL,NULL,33,5,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(432,'32','GB',NULL,33,6,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(433,'64','GB',NULL,33,7,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(434,NULL,NULL,NULL,33,8,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(435,NULL,NULL,NULL,33,9,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(436,NULL,NULL,NULL,33,10,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(437,'98','percentage',NULL,33,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(438,'2','milliseconds',NULL,33,21,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(439,NULL,NULL,NULL,33,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(440,'170','dollar',NULL,33,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(441,'00EU',NULL,NULL,34,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(442,'FREU',NULL,NULL,34,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(443,'AZUR',NULL,NULL,34,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(444,'4',NULL,NULL,34,4,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(445,'1500',NULL,NULL,34,5,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(446,'7','GB',NULL,34,6,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(447,'120','GB',NULL,34,7,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(448,NULL,NULL,NULL,34,8,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(449,'IPV4',NULL,NULL,34,9,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(450,NULL,NULL,NULL,34,10,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(451,'96','percentage',NULL,34,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(452,'3','milliseconds',NULL,34,21,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(453,NULL,NULL,NULL,34,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(454,'193','dollar',NULL,34,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(455,'00EU',NULL,NULL,35,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(456,NULL,NULL,NULL,35,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(457,'AZUR',NULL,NULL,35,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(458,'8',NULL,NULL,35,4,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(459,'1500',NULL,NULL,35,5,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(460,'56','GB',NULL,35,6,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(461,'112','GB',NULL,35,7,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(462,NULL,NULL,NULL,35,8,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(463,NULL,NULL,NULL,35,9,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(464,NULL,NULL,NULL,35,10,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(465,'98','percentage',NULL,35,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(466,'3','milliseconds',NULL,35,21,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(467,NULL,NULL,NULL,35,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(468,'541','dollar',NULL,35,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(469,'00NA',NULL,NULL,36,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(470,'USNA',NULL,NULL,36,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(471,'AZUR',NULL,NULL,36,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(472,'GENE',NULL,NULL,36,16,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(473,'BLOK',NULL,NULL,36,17,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(474,'2000','GB',NULL,36,18,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(475,'LOCS',NULL,NULL,36,19,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(476,'96','percentage',NULL,36,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(477,'4','milliseconds',NULL,36,23,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(478,NULL,NULL,NULL,36,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(479,'48','dollar',NULL,36,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(480,'00EU',NULL,NULL,37,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(481,'IEEU',NULL,NULL,37,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(482,'AZUR',NULL,NULL,37,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(483,'GENE',NULL,NULL,37,16,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(484,'FILE',NULL,NULL,37,17,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(485,'2000','GB',NULL,37,18,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(486,'LOCS',NULL,NULL,37,19,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(487,'98','percentage',NULL,37,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(488,'3','milliseconds',NULL,37,23,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(489,NULL,NULL,NULL,37,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(490,'120','dollar',NULL,37,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(491,'00AS',NULL,NULL,38,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(492,'JPAS',NULL,NULL,38,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(493,'AZUR',NULL,NULL,38,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(494,'GENE',NULL,NULL,38,16,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(495,'BLOK',NULL,NULL,38,17,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(496,'2000','GB',NULL,38,18,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(497,'REAS',NULL,NULL,38,19,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(498,'98','percentage',NULL,38,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(499,'2','milliseconds',NULL,38,23,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(500,NULL,NULL,NULL,38,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(501,'221','dollar',NULL,38,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(502,'00EU',NULL,NULL,39,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(503,NULL,NULL,NULL,39,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(504,'AZUR',NULL,NULL,39,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(505,'2',NULL,NULL,39,4,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(506,'00RE',NULL,NULL,39,11,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(507,'MYRE',NULL,NULL,39,12,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(508,'25','GB',NULL,39,13,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(509,'25','GB',NULL,39,14,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(510,'100','GB',NULL,39,15,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(511,'96','percentage',NULL,39,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(512,'3','milliseconds',NULL,39,22,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(513,NULL,NULL,NULL,39,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(514,'184','dollar',NULL,39,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(515,'00EU',NULL,NULL,40,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(516,NULL,NULL,NULL,40,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(517,'AZUR',NULL,NULL,40,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(518,'8',NULL,NULL,40,4,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(519,'00RE',NULL,NULL,40,11,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(520,'PORE',NULL,NULL,40,12,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(521,'35','GB',NULL,40,13,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(522,'35','GB',NULL,40,14,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(523,'500','GB',NULL,40,15,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(524,'98','percentage',NULL,40,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(525,'3','milliseconds',NULL,40,22,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(526,NULL,NULL,NULL,40,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(527,'618','dollar',NULL,40,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(528,'00EU',NULL,NULL,41,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(529,'DEEU',NULL,NULL,41,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(530,'GOOG',NULL,NULL,41,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(531,'16',NULL,NULL,41,4,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(532,'1500',NULL,NULL,41,5,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(533,'60','GB',NULL,41,6,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(534,'300','GB',NULL,41,7,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(535,NULL,NULL,NULL,41,8,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(536,'IPV4',NULL,NULL,41,9,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(537,NULL,NULL,NULL,41,10,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(538,'96','percentage',NULL,41,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(539,'4','milliseconds',NULL,41,21,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(540,NULL,NULL,NULL,41,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(541,'500','dollar',NULL,41,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(542,'00NA',NULL,NULL,42,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(543,'USNA',NULL,NULL,42,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(544,'GOOG',NULL,NULL,42,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(545,'16',NULL,NULL,42,4,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(546,'1500',NULL,NULL,42,5,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(547,'104','GB',NULL,42,6,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(548,'300','GB',NULL,42,7,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(549,'MEOP',NULL,NULL,42,8,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(550,NULL,NULL,NULL,42,9,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(551,NULL,NULL,NULL,42,10,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(552,'98','percentage',NULL,42,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(553,'4','milliseconds',NULL,42,21,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(554,NULL,NULL,NULL,42,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(555,'552','dollar',NULL,42,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(556,'00EU',NULL,NULL,43,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(557,'IEEU',NULL,NULL,43,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(558,'GOOG',NULL,NULL,43,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(559,'GENE',NULL,NULL,43,16,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(560,'FILE',NULL,NULL,43,17,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(561,'500','GB',NULL,43,18,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(562,'GEOS',NULL,NULL,43,19,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(563,'99','percentage',NULL,43,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(564,'3','milliseconds',NULL,43,23,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(565,NULL,NULL,NULL,43,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(566,'13','dollar',NULL,43,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(567,'00NA',NULL,NULL,44,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(568,'USNA',NULL,NULL,44,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(569,'GOOG',NULL,NULL,44,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(570,'GENE',NULL,NULL,44,16,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(571,'OBJT',NULL,NULL,44,17,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(572,'1','TB',NULL,44,18,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(573,'ZONS',NULL,NULL,44,19,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(574,'99.9','percentage',NULL,44,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(575,'3','milliseconds',NULL,44,23,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(576,NULL,NULL,NULL,44,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(577,'28','dollar',NULL,44,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(578,'00EU',NULL,NULL,45,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(579,'IEEU',NULL,NULL,45,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(580,'GOOG',NULL,NULL,45,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(581,'4',NULL,NULL,45,4,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(582,'00RE',NULL,NULL,45,11,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(583,'PORE',NULL,NULL,45,12,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(584,'50','GB',NULL,45,13,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(585,'50','GB',NULL,45,14,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(586,'50','GB',NULL,45,15,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(587,'98','percentage',NULL,45,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(588,'3','milliseconds',NULL,45,22,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(589,NULL,NULL,NULL,45,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(590,'169','dollar',NULL,45,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(591,'00NA',NULL,NULL,46,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(592,'USNA',NULL,NULL,46,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(593,'GOOG',NULL,NULL,46,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(594,'8',NULL,NULL,46,4,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(595,'00RE',NULL,NULL,46,11,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(596,'MYRE',NULL,NULL,46,12,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(597,'50','GB',NULL,46,13,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(598,'50','GB',NULL,46,14,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(599,'500','GB',NULL,46,15,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(600,'99','percentage',NULL,46,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(601,'4','milliseconds',NULL,46,22,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(602,NULL,NULL,NULL,46,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(603,'388','dollar',NULL,46,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(604,'00EU',NULL,NULL,47,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(605,'ZUEU',NULL,NULL,47,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(606,'CLSI',NULL,NULL,47,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(607,'2',NULL,NULL,47,4,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(608,'5200',NULL,NULL,47,5,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(609,'4','GB',NULL,47,6,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(610,'256','GB',NULL,47,7,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(611,NULL,NULL,NULL,47,8,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(612,'IPV4',NULL,NULL,47,9,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(613,NULL,NULL,NULL,47,10,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(614,'98','percentage',NULL,47,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(615,'100','milliseconds',NULL,47,21,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(616,NULL,NULL,NULL,47,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(617,'186','euro',NULL,47,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(618,'00NA',NULL,NULL,48,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(619,'USNA',NULL,NULL,48,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(620,'AMAZ',NULL,NULL,48,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(621,'1',NULL,NULL,48,4,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(622,NULL,NULL,NULL,48,5,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(623,'3.7','GB',NULL,48,6,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(624,'410','GB',NULL,48,7,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(625,NULL,NULL,NULL,48,8,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(626,'IPV4',NULL,NULL,48,9,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(627,NULL,NULL,NULL,48,10,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(628,'98','percentage',NULL,48,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(629,'100','milliseconds',NULL,48,21,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(630,NULL,NULL,NULL,48,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(631,'200','dollar',NULL,48,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL);
+/*!40000 ALTER TABLE `service_attribute_value` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `service_class`
+--
+
+DROP TABLE IF EXISTS `service_class`;
+/*!40101 SET @saved_cs_client     = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `service_class` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `serviceclassname` varchar(20) NOT NULL,
+  `created_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `last_modified_date` timestamp NULL DEFAULT NULL,
+  `deleted_date` timestamp NULL,
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Dumping data for table `service_class`
+--
+
+LOCK TABLES `service_class` WRITE;
+/*!40000 ALTER TABLE `service_class` DISABLE KEYS */;
+INSERT INTO `service_class` VALUES (1,'Database','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(2,'Storage','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(3,'Virtual Machine','2019-05-21 11:17:52','2019-05-21 11:17:52',NULL);
+/*!40000 ALTER TABLE `service_class` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `service_class_attribute`
+--
+
+DROP TABLE IF EXISTS `service_class_attribute`;
+/*!40101 SET @saved_cs_client     = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `service_class_attribute` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `weight` int(11) NOT NULL,
+  `ismandatory` bit(1) NOT NULL,
+  `serviceclassid` bigint(20) NOT NULL,
+  `serviceattributetypeid` bigint(20) NOT NULL,
+  `created_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `last_modified_date` timestamp NULL DEFAULT NULL,
+  `deleted_date` timestamp NULL,
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=33 DEFAULT CHARSET=latin1;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Dumping data for table `service_class_attribute`
+--
+
+LOCK TABLES `service_class_attribute` WRITE;
+/*!40000 ALTER TABLE `service_class_attribute` DISABLE KEYS */;
+INSERT INTO `service_class_attribute` VALUES (1,1,'',0,1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(2,2,'\0',0,2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(3,3,'',0,3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(4,4,'',1,11,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(5,5,'',1,12,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(6,6,'',1,13,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(7,7,'',1,14,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(8,8,'',1,4,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(9,9,'',1,15,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(10,10,'',1,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(11,11,'\0',1,22,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(12,12,'\0',1,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(13,13,'\0',1,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(14,4,'',2,16,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(15,5,'',2,17,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(16,6,'',2,18,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(17,7,'',2,19,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(18,8,'',2,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(19,9,'\0',2,23,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(20,10,'\0',2,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(21,11,'\0',2,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(22,4,'',3,4,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(23,5,'\0',3,5,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(24,6,'',3,6,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(25,7,'',3,7,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(26,8,'\0',3,8,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(27,9,'\0',3,9,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(28,10,'\0',3,10,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(29,11,'',3,20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(30,12,'\0',3,21,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(31,13,'\0',3,24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(32,14,'\0',3,25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL);
+/*!40000 ALTER TABLE `service_class_attribute` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `service_incidence`
+--
+
+DROP TABLE IF EXISTS `service_incidence`;
+/*!40101 SET @saved_cs_client     = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `service_incidence` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `timestamp` bigint(20) NOT NULL,
+  `detail` varchar(60) NOT NULL,
+  `realmetricvalue` varchar(60) DEFAULT NULL,
+  `serviceid` bigint(20) NOT NULL,
+  `created_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `last_modified_date` timestamp NULL DEFAULT NULL,
+  `deleted_date` timestamp NULL,
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Dumping data for table `service_incidence`
+--
+
+LOCK TABLES `service_incidence` WRITE;
+/*!40000 ALTER TABLE `service_incidence` DISABLE KEYS */;
+INSERT INTO `service_incidence` VALUES (1,1542202871512,'NFR Violation',NULL,6,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(2,1542202871512,'NFR Violation',NULL,8,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(3,1542202871512,'NFR Violation',NULL,8,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(4,1542202871512,'NFR Violation',NULL,8,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(5,1557492252000,'NFR Violation',NULL,30,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(6,1557492252000,'NFR Violation',NULL,30,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL);
+/*!40000 ALTER TABLE `service_incidence` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `service_legal_assessment`
+--
+
+DROP TABLE IF EXISTS `service_legal_assessment`;
+/*!40101 SET @saved_cs_client     = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `service_legal_assessment` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `serviceid` bigint(20) NOT NULL,
+  `controlid` bigint(20) NOT NULL,
+  `score` smallint(6) NOT NULL,
+  `justification` varchar(150) DEFAULT NULL,
+  `created_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `last_modified_date` timestamp NULL DEFAULT NULL,
+  `deleted_date` timestamp NULL,
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1633 DEFAULT CHARSET=latin1;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Dumping data for table `service_legal_assessment`
+--
+
+LOCK TABLES `service_legal_assessment` WRITE;
+/*!40000 ALTER TABLE `service_legal_assessment` DISABLE KEYS */;
+INSERT INTO `service_legal_assessment` VALUES (1,1,1,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(2,1,2,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(3,1,3,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(4,1,4,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(5,1,5,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(6,1,6,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(7,1,7,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(8,1,8,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(9,1,9,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(10,1,10,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(11,1,11,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(12,1,12,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(13,1,13,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(14,1,14,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(15,1,15,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(16,1,16,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(17,1,17,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(18,1,18,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(19,1,19,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(20,1,20,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(21,1,21,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(22,1,22,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(23,1,23,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(24,1,24,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(25,1,25,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(26,1,26,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(27,1,27,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(28,1,28,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(29,1,29,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(30,1,30,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(31,1,31,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(32,1,32,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(33,1,33,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(34,1,34,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(35,2,1,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(36,2,2,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(37,2,3,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(38,2,4,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(39,2,5,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(40,2,6,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(41,2,7,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(42,2,8,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(43,2,9,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(44,2,10,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(45,2,11,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(46,2,12,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(47,2,13,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(48,2,14,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(49,2,15,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(50,2,16,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(51,2,17,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(52,2,18,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(53,2,19,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(54,2,20,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(55,2,21,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(56,2,22,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(57,2,23,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(58,2,24,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(59,2,25,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(60,2,26,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(61,2,27,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(62,2,28,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(63,2,29,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(64,2,30,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(65,2,31,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(66,2,32,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(67,2,33,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(68,2,34,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(69,3,1,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(70,3,2,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(71,3,3,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(72,3,4,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(73,3,5,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(74,3,6,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(75,3,7,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(76,3,8,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(77,3,9,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(78,3,10,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(79,3,11,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(80,3,12,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(81,3,13,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(82,3,14,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(83,3,15,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(84,3,16,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(85,3,17,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(86,3,18,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(87,3,19,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(88,3,20,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(89,3,21,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(90,3,22,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(91,3,23,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(92,3,24,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(93,3,25,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(94,3,26,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(95,3,27,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(96,3,28,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(97,3,29,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(98,3,30,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(99,3,31,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(100,3,32,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(101,3,33,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(102,3,34,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(103,4,1,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(104,4,2,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(105,4,3,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(106,4,4,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(107,4,5,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(108,4,6,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(109,4,7,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(110,4,8,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(111,4,9,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(112,4,10,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(113,4,11,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(114,4,12,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(115,4,13,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(116,4,14,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(117,4,15,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(118,4,16,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(119,4,17,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(120,4,18,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(121,4,19,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(122,4,20,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(123,4,21,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(124,4,22,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(125,4,23,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(126,4,24,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(127,4,25,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(128,4,26,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(129,4,27,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(130,4,28,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(131,4,29,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(132,4,30,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(133,4,31,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(134,4,32,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(135,4,33,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(136,4,34,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(137,5,1,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(138,5,2,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(139,5,3,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(140,5,4,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(141,5,5,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(142,5,6,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(143,5,7,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(144,5,8,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(145,5,9,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(146,5,10,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(147,5,11,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(148,5,12,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(149,5,13,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(150,5,14,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(151,5,15,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(152,5,16,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(153,5,17,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(154,5,18,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(155,5,19,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(156,5,20,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(157,5,21,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(158,5,22,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(159,5,23,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(160,5,24,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(161,5,25,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(162,5,26,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(163,5,27,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(164,5,28,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(165,5,29,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(166,5,30,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(167,5,31,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(168,5,32,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(169,5,33,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(170,5,34,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(171,6,1,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(172,6,2,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(173,6,3,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(174,6,4,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(175,6,5,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(176,6,6,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(177,6,7,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(178,6,8,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(179,6,9,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(180,6,10,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(181,6,11,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(182,6,12,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(183,6,13,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(184,6,14,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(185,6,15,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(186,6,16,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(187,6,17,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(188,6,18,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(189,6,19,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(190,6,20,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(191,6,21,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(192,6,22,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(193,6,23,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(194,6,24,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(195,6,25,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(196,6,26,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(197,6,27,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(198,6,28,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(199,6,29,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(200,6,30,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(201,6,31,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(202,6,32,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(203,6,33,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(204,6,34,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(205,7,1,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(206,7,2,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(207,7,3,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(208,7,4,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(209,7,5,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(210,7,6,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(211,7,7,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(212,7,8,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(213,7,9,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(214,7,10,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(215,7,11,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(216,7,12,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(217,7,13,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(218,7,14,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(219,7,15,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(220,7,16,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(221,7,17,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(222,7,18,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(223,7,19,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(224,7,20,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(225,7,21,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(226,7,22,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(227,7,23,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(228,7,24,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(229,7,25,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(230,7,26,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(231,7,27,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(232,7,28,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(233,7,29,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(234,7,30,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(235,7,31,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(236,7,32,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(237,7,33,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(238,7,34,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(239,8,1,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(240,8,2,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(241,8,3,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(242,8,4,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(243,8,5,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(244,8,6,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(245,8,7,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(246,8,8,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(247,8,9,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(248,8,10,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(249,8,11,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(250,8,12,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(251,8,13,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(252,8,14,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(253,8,15,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(254,8,16,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(255,8,17,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(256,8,18,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(257,8,19,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(258,8,20,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(259,8,21,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(260,8,22,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(261,8,23,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(262,8,24,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(263,8,25,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(264,8,26,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(265,8,27,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(266,8,28,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(267,8,29,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(268,8,30,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(269,8,31,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(270,8,32,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(271,8,33,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(272,8,34,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(273,9,1,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(274,9,2,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(275,9,3,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(276,9,4,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(277,9,5,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(278,9,6,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(279,9,7,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(280,9,8,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(281,9,9,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(282,9,10,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(283,9,11,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(284,9,12,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(285,9,13,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(286,9,14,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(287,9,15,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(288,9,16,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(289,9,17,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(290,9,18,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(291,9,19,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(292,9,20,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(293,9,21,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(294,9,22,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(295,9,23,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(296,9,24,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(297,9,25,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(298,9,26,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(299,9,27,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(300,9,28,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(301,9,29,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(302,9,30,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(303,9,31,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(304,9,32,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(305,9,33,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(306,9,34,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(307,10,1,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(308,10,2,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(309,10,3,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(310,10,4,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(311,10,5,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(312,10,6,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(313,10,7,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(314,10,8,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(315,10,9,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(316,10,10,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(317,10,11,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(318,10,12,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(319,10,13,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(320,10,14,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(321,10,15,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(322,10,16,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(323,10,17,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(324,10,18,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(325,10,19,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(326,10,20,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(327,10,21,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(328,10,22,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(329,10,23,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(330,10,24,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(331,10,25,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(332,10,26,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(333,10,27,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(334,10,28,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(335,10,29,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(336,10,30,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(337,10,31,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(338,10,32,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(339,10,33,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(340,10,34,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(341,11,1,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(342,11,2,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(343,11,3,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(344,11,4,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(345,11,5,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(346,11,6,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(347,11,7,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(348,11,8,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(349,11,9,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(350,11,10,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(351,11,11,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(352,11,12,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(353,11,13,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(354,11,14,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(355,11,15,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(356,11,16,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(357,11,17,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(358,11,18,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(359,11,19,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(360,11,20,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(361,11,21,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(362,11,22,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(363,11,23,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(364,11,24,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(365,11,25,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(366,11,26,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(367,11,27,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(368,11,28,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(369,11,29,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(370,11,30,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(371,11,31,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(372,11,32,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(373,11,33,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(374,11,34,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(375,12,1,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(376,12,2,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(377,12,3,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(378,12,4,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(379,12,5,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(380,12,6,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(381,12,7,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(382,12,8,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(383,12,9,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(384,12,10,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(385,12,11,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(386,12,12,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(387,12,13,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(388,12,14,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(389,12,15,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(390,12,16,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(391,12,17,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(392,12,18,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(393,12,19,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(394,12,20,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(395,12,21,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(396,12,22,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(397,12,23,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(398,12,24,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(399,12,25,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(400,12,26,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(401,12,27,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(402,12,28,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(403,12,29,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(404,12,30,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(405,12,31,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(406,12,32,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(407,12,33,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(408,12,34,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(409,13,1,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(410,13,2,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(411,13,3,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(412,13,4,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(413,13,5,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(414,13,6,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(415,13,7,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(416,13,8,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(417,13,9,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(418,13,10,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(419,13,11,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(420,13,12,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(421,13,13,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(422,13,14,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(423,13,15,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(424,13,16,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(425,13,17,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(426,13,18,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(427,13,19,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(428,13,20,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(429,13,21,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(430,13,22,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(431,13,23,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(432,13,24,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(433,13,25,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(434,13,26,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(435,13,27,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(436,13,28,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(437,13,29,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(438,13,30,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(439,13,31,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(440,13,32,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(441,13,33,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(442,13,34,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(443,14,1,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(444,14,2,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(445,14,3,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(446,14,4,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(447,14,5,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(448,14,6,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(449,14,7,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(450,14,8,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(451,14,9,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(452,14,10,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(453,14,11,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(454,14,12,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(455,14,13,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(456,14,14,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(457,14,15,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(458,14,16,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(459,14,17,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(460,14,18,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(461,14,19,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(462,14,20,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(463,14,21,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(464,14,22,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(465,14,23,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(466,14,24,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(467,14,25,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(468,14,26,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(469,14,27,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(470,14,28,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(471,14,29,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(472,14,30,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(473,14,31,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(474,14,32,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(475,14,33,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(476,14,34,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(477,15,1,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(478,15,2,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(479,15,3,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(480,15,4,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(481,15,5,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(482,15,6,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(483,15,7,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(484,15,8,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(485,15,9,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(486,15,10,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(487,15,11,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(488,15,12,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(489,15,13,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(490,15,14,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(491,15,15,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(492,15,16,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(493,15,17,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(494,15,18,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(495,15,19,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(496,15,20,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(497,15,21,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(498,15,22,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(499,15,23,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(500,15,24,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(501,15,25,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(502,15,26,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(503,15,27,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(504,15,28,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(505,15,29,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(506,15,30,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(507,15,31,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(508,15,32,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(509,15,33,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(510,15,34,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(511,16,1,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(512,16,2,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(513,16,3,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(514,16,4,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(515,16,5,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(516,16,6,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(517,16,7,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(518,16,8,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(519,16,9,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(520,16,10,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(521,16,11,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(522,16,12,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(523,16,13,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(524,16,14,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(525,16,15,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(526,16,16,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(527,16,17,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(528,16,18,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(529,16,19,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(530,16,20,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(531,16,21,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(532,16,22,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(533,16,23,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(534,16,24,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(535,16,25,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(536,16,26,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(537,16,27,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(538,16,28,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(539,16,29,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(540,16,30,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(541,16,31,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(542,16,32,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(543,16,33,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(544,16,34,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(545,17,1,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(546,17,2,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(547,17,3,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(548,17,4,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(549,17,5,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(550,17,6,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(551,17,7,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(552,17,8,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(553,17,9,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(554,17,10,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(555,17,11,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(556,17,12,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(557,17,13,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(558,17,14,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(559,17,15,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(560,17,16,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(561,17,17,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(562,17,18,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(563,17,19,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(564,17,20,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(565,17,21,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(566,17,22,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(567,17,23,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(568,17,24,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(569,17,25,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(570,17,26,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(571,17,27,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(572,17,28,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(573,17,29,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(574,17,30,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(575,17,31,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(576,17,32,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(577,17,33,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(578,17,34,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(579,18,1,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(580,18,2,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(581,18,3,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(582,18,4,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(583,18,5,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(584,18,6,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(585,18,7,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(586,18,8,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(587,18,9,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(588,18,10,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(589,18,11,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(590,18,12,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(591,18,13,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(592,18,14,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(593,18,15,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(594,18,16,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(595,18,17,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(596,18,18,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(597,18,19,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(598,18,20,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(599,18,21,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(600,18,22,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(601,18,23,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(602,18,24,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(603,18,25,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(604,18,26,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(605,18,27,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(606,18,28,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(607,18,29,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(608,18,30,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(609,18,31,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(610,18,32,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(611,18,33,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(612,18,34,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(613,19,1,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(614,19,2,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(615,19,3,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(616,19,4,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(617,19,5,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(618,19,6,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(619,19,7,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(620,19,8,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(621,19,9,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(622,19,10,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(623,19,11,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(624,19,12,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(625,19,13,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(626,19,14,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(627,19,15,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(628,19,16,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(629,19,17,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(630,19,18,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(631,19,19,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(632,19,20,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(633,19,21,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(634,19,22,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(635,19,23,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(636,19,24,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(637,19,25,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(638,19,26,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(639,19,27,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(640,19,28,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(641,19,29,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(642,19,30,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(643,19,31,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(644,19,32,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(645,19,33,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(646,19,34,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(647,20,1,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(648,20,2,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(649,20,3,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(650,20,4,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(651,20,5,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(652,20,6,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(653,20,7,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(654,20,8,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(655,20,9,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(656,20,10,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(657,20,11,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(658,20,12,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(659,20,13,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(660,20,14,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(661,20,15,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(662,20,16,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(663,20,17,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(664,20,18,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(665,20,19,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(666,20,20,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(667,20,21,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(668,20,22,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(669,20,23,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(670,20,24,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(671,20,25,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(672,20,26,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(673,20,27,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(674,20,28,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(675,20,29,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(676,20,30,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(677,20,31,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(678,20,32,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(679,20,33,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(680,20,34,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(681,21,1,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(682,21,2,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(683,21,3,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(684,21,4,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(685,21,5,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(686,21,6,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(687,21,7,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(688,21,8,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(689,21,9,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(690,21,10,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(691,21,11,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(692,21,12,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(693,21,13,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(694,21,14,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(695,21,15,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(696,21,16,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(697,21,17,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(698,21,18,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(699,21,19,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(700,21,20,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(701,21,21,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(702,21,22,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(703,21,23,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(704,21,24,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(705,21,25,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(706,21,26,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(707,21,27,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(708,21,28,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(709,21,29,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(710,21,30,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(711,21,31,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(712,21,32,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(713,21,33,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(714,21,34,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(715,22,1,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(716,22,2,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(717,22,3,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(718,22,4,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(719,22,5,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(720,22,6,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(721,22,7,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(722,22,8,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(723,22,9,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(724,22,10,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(725,22,11,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(726,22,12,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(727,22,13,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(728,22,14,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(729,22,15,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(730,22,16,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(731,22,17,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(732,22,18,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(733,22,19,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(734,22,20,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(735,22,21,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(736,22,22,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(737,22,23,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(738,22,24,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(739,22,25,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(740,22,26,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(741,22,27,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(742,22,28,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(743,22,29,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(744,22,30,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(745,22,31,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(746,22,32,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(747,22,33,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(748,22,34,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(749,23,1,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(750,23,2,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(751,23,3,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(752,23,4,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(753,23,5,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(754,23,6,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(755,23,7,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(756,23,8,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(757,23,9,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(758,23,10,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(759,23,11,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(760,23,12,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(761,23,13,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(762,23,14,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(763,23,15,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(764,23,16,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(765,23,17,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(766,23,18,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(767,23,19,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(768,23,20,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(769,23,21,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(770,23,22,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(771,23,23,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(772,23,24,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(773,23,25,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(774,23,26,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(775,23,27,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(776,23,28,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(777,23,29,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(778,23,30,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(779,23,31,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(780,23,32,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(781,23,33,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(782,23,34,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(783,24,1,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(784,24,2,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(785,24,3,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(786,24,4,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(787,24,5,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(788,24,6,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(789,24,7,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(790,24,8,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(791,24,9,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(792,24,10,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(793,24,11,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(794,24,12,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(795,24,13,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(796,24,14,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(797,24,15,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(798,24,16,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(799,24,17,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(800,24,18,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(801,24,19,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(802,24,20,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(803,24,21,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(804,24,22,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(805,24,23,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(806,24,24,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(807,24,25,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(808,24,26,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(809,24,27,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(810,24,28,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(811,24,29,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(812,24,30,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(813,24,31,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(814,24,32,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(815,24,33,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(816,24,34,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(817,25,1,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(818,25,2,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(819,25,3,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(820,25,4,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(821,25,5,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(822,25,6,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(823,25,7,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(824,25,8,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(825,25,9,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(826,25,10,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(827,25,11,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(828,25,12,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(829,25,13,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(830,25,14,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(831,25,15,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(832,25,16,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(833,25,17,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(834,25,18,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(835,25,19,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(836,25,20,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(837,25,21,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(838,25,22,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(839,25,23,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(840,25,24,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(841,25,25,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(842,25,26,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(843,25,27,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(844,25,28,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(845,25,29,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(846,25,30,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(847,25,31,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(848,25,32,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(849,25,33,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(850,25,34,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(851,26,1,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(852,26,2,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(853,26,3,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(854,26,4,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(855,26,5,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(856,26,6,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(857,26,7,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(858,26,8,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(859,26,9,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(860,26,10,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(861,26,11,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(862,26,12,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(863,26,13,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(864,26,14,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(865,26,15,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(866,26,16,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(867,26,17,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(868,26,18,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(869,26,19,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(870,26,20,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(871,26,21,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(872,26,22,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(873,26,23,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(874,26,24,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(875,26,25,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(876,26,26,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(877,26,27,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(878,26,28,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(879,26,29,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(880,26,30,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(881,26,31,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(882,26,32,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(883,26,33,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(884,26,34,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(885,27,1,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(886,27,2,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(887,27,3,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(888,27,4,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(889,27,5,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(890,27,6,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(891,27,7,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(892,27,8,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(893,27,9,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(894,27,10,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(895,27,11,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(896,27,12,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(897,27,13,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(898,27,14,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(899,27,15,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(900,27,16,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(901,27,17,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(902,27,18,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(903,27,19,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(904,27,20,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(905,27,21,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(906,27,22,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(907,27,23,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(908,27,24,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(909,27,25,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(910,27,26,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(911,27,27,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(912,27,28,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(913,27,29,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(914,27,30,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(915,27,31,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(916,27,32,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(917,27,33,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(918,27,34,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(919,28,1,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(920,28,2,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(921,28,3,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(922,28,4,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(923,28,5,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(924,28,6,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(925,28,7,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(926,28,8,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(927,28,9,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(928,28,10,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(929,28,11,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(930,28,12,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(931,28,13,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(932,28,14,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(933,28,15,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(934,28,16,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(935,28,17,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(936,28,18,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(937,28,19,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(938,28,20,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(939,28,21,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(940,28,22,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(941,28,23,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(942,28,24,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(943,28,25,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(944,28,26,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(945,28,27,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(946,28,28,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(947,28,29,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(948,28,30,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(949,28,31,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(950,28,32,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(951,28,33,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(952,28,34,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(953,29,1,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(954,29,2,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(955,29,3,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(956,29,4,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(957,29,5,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(958,29,6,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(959,29,7,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(960,29,8,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(961,29,9,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(962,29,10,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(963,29,11,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(964,29,12,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(965,29,13,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(966,29,14,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(967,29,15,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(968,29,16,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(969,29,17,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(970,29,18,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(971,29,19,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(972,29,20,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(973,29,21,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(974,29,22,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(975,29,23,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(976,29,24,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(977,29,25,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(978,29,26,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(979,29,27,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(980,29,28,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(981,29,29,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(982,29,30,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(983,29,31,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(984,29,32,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(985,29,33,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(986,29,34,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(987,30,1,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(988,30,2,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(989,30,3,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(990,30,4,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(991,30,5,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(992,30,6,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(993,30,7,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(994,30,8,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(995,30,9,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(996,30,10,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(997,30,11,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(998,30,12,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(999,30,13,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1000,30,14,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1001,30,15,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1002,30,16,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1003,30,17,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1004,30,18,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1005,30,19,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1006,30,20,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1007,30,21,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1008,30,22,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1009,30,23,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1010,30,24,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1011,30,25,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1012,30,26,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1013,30,27,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1014,30,28,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1015,30,29,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1016,30,30,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1017,30,31,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1018,30,32,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1019,30,33,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1020,30,34,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1021,31,1,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1022,31,2,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1023,31,3,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1024,31,4,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1025,31,5,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1026,31,6,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1027,31,7,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1028,31,8,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1029,31,9,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1030,31,10,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1031,31,11,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1032,31,12,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1033,31,13,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1034,31,14,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1035,31,15,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1036,31,16,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1037,31,17,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1038,31,18,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1039,31,19,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1040,31,20,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1041,31,21,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1042,31,22,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1043,31,23,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1044,31,24,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1045,31,25,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1046,31,26,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1047,31,27,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1048,31,28,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1049,31,29,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1050,31,30,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1051,31,31,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1052,31,32,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1053,31,33,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1054,31,34,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1055,32,1,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1056,32,2,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1057,32,3,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1058,32,4,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1059,32,5,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1060,32,6,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1061,32,7,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1062,32,8,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1063,32,9,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1064,32,10,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1065,32,11,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1066,32,12,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1067,32,13,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1068,32,14,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1069,32,15,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1070,32,16,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1071,32,17,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1072,32,18,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1073,32,19,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1074,32,20,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1075,32,21,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1076,32,22,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1077,32,23,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1078,32,24,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1079,32,25,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1080,32,26,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1081,32,27,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1082,32,28,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1083,32,29,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1084,32,30,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1085,32,31,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1086,32,32,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1087,32,33,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1088,32,34,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1089,33,1,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1090,33,2,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1091,33,3,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1092,33,4,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1093,33,5,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1094,33,6,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1095,33,7,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1096,33,8,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1097,33,9,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1098,33,10,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1099,33,11,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1100,33,12,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1101,33,13,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1102,33,14,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1103,33,15,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1104,33,16,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1105,33,17,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1106,33,18,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1107,33,19,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1108,33,20,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1109,33,21,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1110,33,22,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1111,33,23,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1112,33,24,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1113,33,25,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1114,33,26,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1115,33,27,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1116,33,28,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1117,33,29,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1118,33,30,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1119,33,31,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1120,33,32,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1121,33,33,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1122,33,34,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1123,34,1,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1124,34,2,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1125,34,3,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1126,34,4,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1127,34,5,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1128,34,6,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1129,34,7,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1130,34,8,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1131,34,9,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1132,34,10,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1133,34,11,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1134,34,12,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1135,34,13,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1136,34,14,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1137,34,15,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1138,34,16,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1139,34,17,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1140,34,18,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1141,34,19,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1142,34,20,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1143,34,21,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1144,34,22,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1145,34,23,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1146,34,24,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1147,34,25,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1148,34,26,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1149,34,27,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1150,34,28,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1151,34,29,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1152,34,30,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1153,34,31,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1154,34,32,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1155,34,33,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1156,34,34,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1157,35,1,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1158,35,2,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1159,35,3,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1160,35,4,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1161,35,5,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1162,35,6,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1163,35,7,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1164,35,8,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1165,35,9,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1166,35,10,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1167,35,11,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1168,35,12,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1169,35,13,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1170,35,14,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1171,35,15,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1172,35,16,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1173,35,17,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1174,35,18,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1175,35,19,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1176,35,20,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1177,35,21,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1178,35,22,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1179,35,23,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1180,35,24,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1181,35,25,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1182,35,26,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1183,35,27,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1184,35,28,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1185,35,29,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1186,35,30,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1187,35,31,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1188,35,32,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1189,35,33,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1190,35,34,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1191,36,1,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1192,36,2,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1193,36,3,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1194,36,4,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1195,36,5,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1196,36,6,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1197,36,7,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1198,36,8,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1199,36,9,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1200,36,10,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1201,36,11,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1202,36,12,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1203,36,13,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1204,36,14,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1205,36,15,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1206,36,16,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1207,36,17,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1208,36,18,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1209,36,19,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1210,36,20,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1211,36,21,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1212,36,22,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1213,36,23,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1214,36,24,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1215,36,25,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1216,36,26,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1217,36,27,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1218,36,28,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1219,36,29,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1220,36,30,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1221,36,31,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1222,36,32,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1223,36,33,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1224,36,34,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1225,37,1,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1226,37,2,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1227,37,3,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1228,37,4,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1229,37,5,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1230,37,6,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1231,37,7,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1232,37,8,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1233,37,9,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1234,37,10,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1235,37,11,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1236,37,12,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1237,37,13,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1238,37,14,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1239,37,15,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1240,37,16,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1241,37,17,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1242,37,18,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1243,37,19,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1244,37,20,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1245,37,21,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1246,37,22,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1247,37,23,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1248,37,24,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1249,37,25,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1250,37,26,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1251,37,27,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1252,37,28,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1253,37,29,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1254,37,30,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1255,37,31,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1256,37,32,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1257,37,33,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1258,37,34,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1259,38,1,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1260,38,2,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1261,38,3,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1262,38,4,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1263,38,5,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1264,38,6,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1265,38,7,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1266,38,8,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1267,38,9,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1268,38,10,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1269,38,11,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1270,38,12,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1271,38,13,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1272,38,14,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1273,38,15,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1274,38,16,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1275,38,17,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1276,38,18,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1277,38,19,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1278,38,20,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1279,38,21,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1280,38,22,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1281,38,23,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1282,38,24,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1283,38,25,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1284,38,26,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1285,38,27,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1286,38,28,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1287,38,29,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1288,38,30,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1289,38,31,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1290,38,32,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1291,38,33,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1292,38,34,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1293,39,1,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1294,39,2,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1295,39,3,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1296,39,4,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1297,39,5,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1298,39,6,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1299,39,7,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1300,39,8,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1301,39,9,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1302,39,10,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1303,39,11,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1304,39,12,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1305,39,13,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1306,39,14,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1307,39,15,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1308,39,16,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1309,39,17,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1310,39,18,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1311,39,19,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1312,39,20,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1313,39,21,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1314,39,22,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1315,39,23,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1316,39,24,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1317,39,25,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1318,39,26,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1319,39,27,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1320,39,28,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1321,39,29,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1322,39,30,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1323,39,31,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1324,39,32,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1325,39,33,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1326,39,34,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1327,40,1,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1328,40,2,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1329,40,3,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1330,40,4,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1331,40,5,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1332,40,6,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1333,40,7,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1334,40,8,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1335,40,9,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1336,40,10,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1337,40,11,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1338,40,12,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1339,40,13,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1340,40,14,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1341,40,15,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1342,40,16,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1343,40,17,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1344,40,18,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1345,40,19,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1346,40,20,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1347,40,21,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1348,40,22,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1349,40,23,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1350,40,24,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1351,40,25,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1352,40,26,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1353,40,27,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1354,40,28,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1355,40,29,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1356,40,30,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1357,40,31,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1358,40,32,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1359,40,33,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1360,40,34,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1361,41,1,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1362,41,2,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1363,41,3,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1364,41,4,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1365,41,5,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1366,41,6,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1367,41,7,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1368,41,8,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1369,41,9,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1370,41,10,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1371,41,11,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1372,41,12,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1373,41,13,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1374,41,14,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1375,41,15,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1376,41,16,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1377,41,17,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1378,41,18,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1379,41,19,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1380,41,20,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1381,41,21,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1382,41,22,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1383,41,23,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1384,41,24,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1385,41,25,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1386,41,26,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1387,41,27,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1388,41,28,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1389,41,29,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1390,41,30,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1391,41,31,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1392,41,32,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1393,41,33,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1394,41,34,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1395,42,1,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1396,42,2,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1397,42,3,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1398,42,4,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1399,42,5,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1400,42,6,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1401,42,7,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1402,42,8,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1403,42,9,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1404,42,10,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1405,42,11,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1406,42,12,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1407,42,13,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1408,42,14,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1409,42,15,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1410,42,16,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1411,42,17,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1412,42,18,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1413,42,19,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1414,42,20,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1415,42,21,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1416,42,22,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1417,42,23,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1418,42,24,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1419,42,25,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1420,42,26,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1421,42,27,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1422,42,28,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1423,42,29,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1424,42,30,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1425,42,31,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1426,42,32,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1427,42,33,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1428,42,34,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1429,43,1,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1430,43,2,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1431,43,3,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1432,43,4,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1433,43,5,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1434,43,6,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1435,43,7,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1436,43,8,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1437,43,9,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1438,43,10,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1439,43,11,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1440,43,12,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1441,43,13,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1442,43,14,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1443,43,15,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1444,43,16,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1445,43,17,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1446,43,18,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1447,43,19,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1448,43,20,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1449,43,21,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1450,43,22,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1451,43,23,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1452,43,24,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1453,43,25,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1454,43,26,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1455,43,27,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1456,43,28,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1457,43,29,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1458,43,30,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1459,43,31,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1460,43,32,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1461,43,33,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1462,43,34,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1463,44,1,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1464,44,2,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1465,44,3,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1466,44,4,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1467,44,5,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1468,44,6,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1469,44,7,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1470,44,8,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1471,44,9,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1472,44,10,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1473,44,11,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1474,44,12,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1475,44,13,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1476,44,14,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1477,44,15,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1478,44,16,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1479,44,17,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1480,44,18,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1481,44,19,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1482,44,20,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1483,44,21,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1484,44,22,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1485,44,23,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1486,44,24,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1487,44,25,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1488,44,26,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1489,44,27,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1490,44,28,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1491,44,29,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1492,44,30,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1493,44,31,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1494,44,32,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1495,44,33,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1496,44,34,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1497,45,1,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1498,45,2,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1499,45,3,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1500,45,4,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1501,45,5,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1502,45,6,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1503,45,7,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1504,45,8,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1505,45,9,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1506,45,10,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1507,45,11,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1508,45,12,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1509,45,13,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1510,45,14,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1511,45,15,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1512,45,16,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1513,45,17,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1514,45,18,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1515,45,19,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1516,45,20,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1517,45,21,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1518,45,22,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1519,45,23,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1520,45,24,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1521,45,25,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1522,45,26,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1523,45,27,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1524,45,28,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1525,45,29,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1526,45,30,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1527,45,31,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1528,45,32,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1529,45,33,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1530,45,34,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1531,46,1,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1532,46,2,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1533,46,3,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1534,46,4,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1535,46,5,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1536,46,6,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1537,46,7,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1538,46,8,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1539,46,9,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1540,46,10,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1541,46,11,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1542,46,12,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1543,46,13,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1544,46,14,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1545,46,15,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1546,46,16,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1547,46,17,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1548,46,18,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1549,46,19,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1550,46,20,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1551,46,21,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1552,46,22,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1553,46,23,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1554,46,24,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1555,46,25,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1556,46,26,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1557,46,27,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1558,46,28,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1559,46,29,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1560,46,30,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1561,46,31,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1562,46,32,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1563,46,33,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1564,46,34,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1565,47,1,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1566,47,2,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1567,47,3,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1568,47,4,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1569,47,5,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1570,47,6,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1571,47,7,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1572,47,8,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1573,47,9,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1574,47,10,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1575,47,11,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1576,47,12,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1577,47,13,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1578,47,14,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1579,47,15,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1580,47,16,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1581,47,17,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1582,47,18,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1583,47,19,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1584,47,20,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1585,47,21,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1586,47,22,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1587,47,23,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1588,47,24,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1589,47,25,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1590,47,26,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1591,47,27,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1592,47,28,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1593,47,29,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1594,47,30,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1595,47,31,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1596,47,32,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1597,47,33,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1598,47,34,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1599,48,1,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1600,48,2,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1601,48,3,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1602,48,4,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1603,48,5,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1604,48,6,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1605,48,7,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1606,48,8,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1607,48,9,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1608,48,10,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1609,48,11,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1610,48,12,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1611,48,13,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1612,48,14,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1613,48,15,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1614,48,16,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1615,48,17,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1616,48,18,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1617,48,19,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1618,48,20,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1619,48,21,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1620,48,22,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1621,48,23,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1622,48,24,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1623,48,25,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1624,48,26,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1625,48,27,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1626,48,28,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1627,48,29,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1628,48,30,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1629,48,31,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1630,48,32,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1631,48,33,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(1632,48,34,0,NULL,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL);
+/*!40000 ALTER TABLE `service_legal_assessment` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `service_legal_management`
+--
+
+DROP TABLE IF EXISTS `service_legal_management`;
+/*!40101 SET @saved_cs_client     = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `service_legal_management` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `nocontractalert` bit(1) NOT NULL,
+  `modifiedcontractalert` bit(1) NOT NULL,
+  `formalert` bit(1) NOT NULL,
+  `serviceid` bigint(20) NOT NULL,
+  `created_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `last_modified_date` timestamp NULL DEFAULT NULL,
+  `deleted_date` timestamp NULL,
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=49 DEFAULT CHARSET=latin1;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Dumping data for table `service_legal_management`
+--
+
+LOCK TABLES `service_legal_management` WRITE;
+/*!40000 ALTER TABLE `service_legal_management` DISABLE KEYS */;
+INSERT INTO `service_legal_management` VALUES (1,'','\0','\0',1,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(2,'','\0','\0',2,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(3,'','\0','\0',3,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(4,'','\0','\0',4,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(5,'','\0','\0',5,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(6,'','\0','\0',6,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(7,'','\0','\0',7,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(8,'','\0','\0',8,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(9,'','\0','\0',9,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(10,'','\0','\0',10,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(11,'','\0','\0',11,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(12,'','\0','\0',12,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(13,'','\0','\0',13,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(14,'','\0','\0',14,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(15,'','\0','\0',15,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(16,'','\0','\0',16,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(17,'','\0','\0',17,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(18,'','\0','\0',18,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(19,'','\0','\0',19,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(20,'','\0','\0',20,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(21,'','\0','\0',21,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(22,'','\0','\0',22,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(23,'','\0','\0',23,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(24,'','\0','\0',24,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(25,'','\0','\0',25,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(26,'','\0','\0',26,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(27,'','\0','\0',27,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(28,'','\0','\0',28,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(29,'','\0','\0',29,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(30,'','\0','\0',30,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(31,'','\0','\0',31,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(32,'','\0','\0',32,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(33,'','\0','\0',33,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(34,'','\0','\0',34,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(35,'','\0','\0',35,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(36,'','\0','\0',36,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(37,'','\0','\0',37,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(38,'','\0','\0',38,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(39,'','\0','\0',39,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(40,'','\0','\0',40,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(41,'','\0','\0',41,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(42,'','\0','\0',42,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(43,'','\0','\0',43,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(44,'','\0','\0',44,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(45,'','\0','\0',45,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(46,'','\0','\0',46,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(47,'','\0','\0',47,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL),(48,'','\0','\0',48,'2019-05-21 11:17:52','2019-05-21 11:17:52',NULL);
+/*!40000 ALTER TABLE `service_legal_management` ENABLE KEYS */;
+UNLOCK TABLES;
+/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
+
+/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
+/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
+/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
+/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
+/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
+/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
+/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
+
+-- Dump completed on 2019-05-21 13:18:08
diff --git a/ACSmI/Discovery/eu.decideh2020.int.acsmi.frontend.server.src.dvp/src/main/docker/.dockerignore b/ACSmI/Discovery/eu.decideh2020.int.acsmi.frontend.server.src.dvp/src/main/docker/.dockerignore
new file mode 100644
index 0000000000000000000000000000000000000000..d3064226ba3aa9312002c53467a04ecccec42ef5
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.int.acsmi.frontend.server.src.dvp/src/main/docker/.dockerignore
@@ -0,0 +1,3 @@
+node_modules/
+node/
+bower_components/
\ No newline at end of file
diff --git a/ACSmI/Discovery/eu.decideh2020.int.acsmi.frontend.server.src.dvp/src/main/docker/.gitignore b/ACSmI/Discovery/eu.decideh2020.int.acsmi.frontend.server.src.dvp/src/main/docker/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..59a4e66eaea0a4fdb51672d97673ad79089ec530
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.int.acsmi.frontend.server.src.dvp/src/main/docker/.gitignore
@@ -0,0 +1 @@
+/sources
\ No newline at end of file
diff --git a/ACSmI/Discovery/eu.decideh2020.int.acsmi.frontend.server.src.dvp/src/main/docker/Dockerfile b/ACSmI/Discovery/eu.decideh2020.int.acsmi.frontend.server.src.dvp/src/main/docker/Dockerfile
index 9d522f6e27911f96f28aac438156d436d9f6dea6..738cd34d6df10b9c4b2e37f826b45303e45ab4be 100644
--- a/ACSmI/Discovery/eu.decideh2020.int.acsmi.frontend.server.src.dvp/src/main/docker/Dockerfile
+++ b/ACSmI/Discovery/eu.decideh2020.int.acsmi.frontend.server.src.dvp/src/main/docker/Dockerfile
@@ -1,11 +1,32 @@
-FROM localhost:5000/eu.decideh2020.int.springboot.server.repo
-
-ENV MYSQL_DOMAIN mysql
-ENV REGISTRY_DOMAIN registry
-
-WORKDIR /
-
-# Install Maven
-COPY maven-init.sh /maven-init.sh
-RUN chmod +x /maven-init.sh
-RUN sh ./maven-init.sh
+FROM decideh2020/jhipster.repo as builder
+
+ARG GIT_CREDENTIALS
+ARG ARTIFACTORY_USE
+ARG ARTIFACTORY_USER
+ARG ARTIFACTORY_PASSWORD
+ARG ARTIFACTORY_MAVEN_REPO
+ARG ACSMI_FRONTEND_GIT_REF
+ARG VERSION
+
+COPY . /
+
+RUN \
+	chmod 750 /*.sh 
+
+RUN \
+	. /configartifactorymaven.sh && \
+	python /processSourcesJson.py && \
+	rm -rf /sources
+
+FROM openjdk:8-jdk-alpine
+
+COPY --from=builder /app.war .
+
+ENV SPRING_OUTPUT_ANSI_ENABLED=ALWAYS \
+    JHIPSTER_SLEEP=0 \
+    JAVA_OPTS=""
+
+EXPOSE 8761 
+CMD echo "The application will start in ${JHIPSTER_SLEEP}s..." && \
+    sleep ${JHIPSTER_SLEEP} && \
+    java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar /app.war
\ No newline at end of file
diff --git a/ACSmI/Discovery/eu.decideh2020.int.acsmi.frontend.server.src.dvp/src/main/docker/config.sh b/ACSmI/Discovery/eu.decideh2020.int.acsmi.frontend.server.src.dvp/src/main/docker/config.sh
new file mode 100644
index 0000000000000000000000000000000000000000..da719fbc3b9f081a578745d2efe4d194c5cd7069
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.int.acsmi.frontend.server.src.dvp/src/main/docker/config.sh
@@ -0,0 +1,23 @@
+#!/bin/bash
+sourcespath=$1
+project=$2
+echo "sourcespath $sourcespath"
+echo "project $project"
+application=$sourcespath/$project/src/main/resources/config/application-prod.yml
+if [ -f $application ]; then
+   echo "File $applicationdev exists."
+   sed -i "s/localhost:3306/acsmi.mysql:3306/g" $application
+   sed -i "s/localhost:8761/jhipster.registry:8761/g" $application
+else
+   echo "File $applicationdev does not exist."
+fi
+
+bootstrap=$sourcespath/$project/src/main/resources/config/bootstrap-prod.yml
+if [ -f $bootstrap ]; then
+   echo "File $bootstrap exists."
+   sed -i "s/localhost:8761/jhipster.registry:8761/g" $bootstrap
+else
+   echo "File $bootstrap does not exist."
+fi
+
+#rm -rf ${xpref}
\ No newline at end of file
diff --git a/ACSmI/Discovery/eu.decideh2020.int.acsmi.frontend.server.src.dvp/src/main/docker/configartifactorymaven.sh b/ACSmI/Discovery/eu.decideh2020.int.acsmi.frontend.server.src.dvp/src/main/docker/configartifactorymaven.sh
new file mode 100644
index 0000000000000000000000000000000000000000..1fe2d19e9e517411406ad9d1d44766503a1bec7d
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.int.acsmi.frontend.server.src.dvp/src/main/docker/configartifactorymaven.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+if [ "$ARTIFACTORY_USE" != "Y" ]
+then
+  echo "Without Artifactory"
+else
+
+  echo "With Artifactory"
+  cp /settings.xml /usr/share/maven/conf/.
+  mkdir /root/.m2
+  cp /settings-security.xml /root/.m2/.
+  export MAVEN_USER="$ARTIFACTORY_USER"
+  export MASTER_PASSWORD="$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1)"
+  export MAVEN_MASTER_PASSWORD="$(mvn --encrypt-master-password $MASTER_PASSWORD)"
+
+  sed -i "s@\${.*}@$MAVEN_MASTER_PASSWORD@g" /root/.m2/settings-security.xml
+  export MAVEN_PASSWORD="$(mvn --encrypt-password $ARTIFACTORY_PASSWORD)"
+
+fi
+
+#rm -rf /root/.m2/repository/ #to test that it works
diff --git a/ACSmI/Discovery/eu.decideh2020.int.acsmi.frontend.server.src.dvp/src/main/docker/maven-init.sh b/ACSmI/Discovery/eu.decideh2020.int.acsmi.frontend.server.src.dvp/src/main/docker/maven-init.sh
deleted file mode 100644
index ff58d100889a03e950e29fe053a545da6a021ab9..0000000000000000000000000000000000000000
--- a/ACSmI/Discovery/eu.decideh2020.int.acsmi.frontend.server.src.dvp/src/main/docker/maven-init.sh
+++ /dev/null
@@ -1,26 +0,0 @@
-#repo=/WP5/ACSmI_discovery/eu.decideh2020.acsmi.backend.services.server
-repo=/WP5/ACSmI_discovery/eu.decideh2020.acsmi.frontend.server
-#repo=/WP5/ACSmI_discovery/eu.decideh2020.acsmi.registry
-echo "repo $repo"
-
-applicationdev=${repo}/src/main/resources/config/application-dev.yml
-if [ -f $applicationdev ]; then
-   echo "File $applicationdev exists."
-   sed -i "s/localhost:3306/$MYSQL_DOMAIN:3306/g" $applicationdev
-   sed -i "s/localhost:8761/$REGISTRY_DOMAIN:8761/g" $applicationdev
-else
-   echo "File $applicationdev does not exist."
-fi
-
-bootstrap=${repo}/src/main/resources/config/bootstrap.yml
-if [ -f $bootstrap ]; then
-   echo "File $bootstrap exists."
-   sed -i "s/localhost:8761/$REGISTRY_DOMAIN:8761/g" $bootstrap
-else
-   echo "File $bootstrap does not exist."
-fi
-
-mvn package -Dmaven.test.skip=true -f ${repo}/pom.xml
-cp ${repo}/target/*.war app.war
-
-#rm -rf ${xpref}
\ No newline at end of file
diff --git a/ACSmI/Discovery/eu.decideh2020.int.acsmi.frontend.server.src.dvp/src/main/docker/moveappwar.sh b/ACSmI/Discovery/eu.decideh2020.int.acsmi.frontend.server.src.dvp/src/main/docker/moveappwar.sh
new file mode 100644
index 0000000000000000000000000000000000000000..07ef1909223c63502219db61c47130b3e7ddfc75
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.int.acsmi.frontend.server.src.dvp/src/main/docker/moveappwar.sh
@@ -0,0 +1,6 @@
+#!/bin/bash
+sourcespath=$1
+project=$2
+echo "sourcespath $sourcespath"
+echo "project $project"
+cp $sourcespath/$project/target/*.war /app.war || true
diff --git a/ACSmI/Discovery/eu.decideh2020.int.acsmi.frontend.server.src.dvp/src/main/docker/processSource.sh b/ACSmI/Discovery/eu.decideh2020.int.acsmi.frontend.server.src.dvp/src/main/docker/processSource.sh
new file mode 100644
index 0000000000000000000000000000000000000000..2ed9b80bb6427bb8713a47e55bb71f456cc508fd
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.int.acsmi.frontend.server.src.dvp/src/main/docker/processSource.sh
@@ -0,0 +1,58 @@
+#!/bin/bash -e
+
+if [ $# -lt 5 ]; then
+    echo "Arguments required: dockerRepoUrl projectPath gitRef mavenParams"
+fi
+
+dockerRepoUrl=$1
+projectPath=$2
+gitRef=$3
+gitCredentials=$4
+mavenParams=$5
+repofix=$dockerRepoUrl
+
+[ -d /sources ] || mkdir -p /sources
+
+#phase 1 clone repo if necesary
+repo_dir=`echo $dockerRepoUrl | sed 's%^.*/\([^/]*\)\.git$%\1%g'`
+echo "Git repository: $dockerRepoUrl"
+echo "repository dir: $repo_dir"
+if [ "$VERSION" != "local" ] && [ ! -d /sources/$repo_dir/.git ]; then
+	echo "Enter to clone repo..."
+	rm -rf /sources/$repo_dir/* > /dev/null 2>&1 || true
+	if [[ ! -z "$gitCredentials" ]]; then
+		repofix=${repofix/https:\/\//https:\/\/$gitCredentials@}
+	fi
+	git clone "$repofix" /sources/$repo_dir
+	echo "repository cloned"
+else
+	echo "repository found in local folder: $repo_dir"
+fi
+
+#phase 2 checkout right version
+if [ "$VERSION" != "local" ] && [ ! -z "$gitRef" ]; then
+	echo "checking out: $gitRef"
+	git -C /sources/$repo_dir checkout $gitRef --force
+fi
+
+#phase 3 config 
+/config.sh /sources/$repo_dir $projectPath
+
+#phase 4 mvn 
+#NOTE jhipster bower instalation requires a file /root/.bowerrc to be run as root
+if [[ ! -z "$mavenParams" ]]; then
+	echo "copying jhipster resouces"
+	cp -r /bower_components  /sources/$repo_dir/$projectPath/src/main/webapp/ || true
+	cp -r /node_modules /sources/$repo_dir/$projectPath/. || true
+	cp -r /node /sources/$repo_dir/$projectPath/. || true
+	echo "maven execution: -f sources/$repo_dir/$projectPath/pom.xml  $mavenParams"
+	mvn  -f /sources/$repo_dir/$projectPath/pom.xml $mavenParams || true
+	#because jhister
+	echo "saving jhister resources" 
+	cp -r /sources/$repo_dir/$projectPath/src/main/webapp/bower_components / || true
+	cp -r /sources/$repo_dir/$projectPath/node_modules / || true
+	cp -r /sources/$repo_dir/$projectPath/node / || true
+fi
+
+#phase 5 move app war 
+/moveappwar.sh /sources/$repo_dir $projectPath
diff --git a/ACSmI/Discovery/eu.decideh2020.int.acsmi.frontend.server.src.dvp/src/main/docker/processSourcesJson.py b/ACSmI/Discovery/eu.decideh2020.int.acsmi.frontend.server.src.dvp/src/main/docker/processSourcesJson.py
new file mode 100644
index 0000000000000000000000000000000000000000..674930941ff948eaf85a0ec23dec4d79686f6f3c
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.int.acsmi.frontend.server.src.dvp/src/main/docker/processSourcesJson.py
@@ -0,0 +1,9 @@
+import json
+import subprocess
+import os
+
+with open('/sources.json', 'r') as handle:
+    parsed = json.load(handle)
+    for source in parsed['sources']:
+        subprocess.check_call(['/processSource.sh',source['source']['repo'],source['source']['path'],os.getenv(source['source']['git_ref'],''),os.getenv(source['source']['git_credentials'],''),source['source']['maven']])
+
diff --git a/ACSmI/Discovery/eu.decideh2020.int.acsmi.frontend.server.src.dvp/src/main/docker/root/.bowerrc b/ACSmI/Discovery/eu.decideh2020.int.acsmi.frontend.server.src.dvp/src/main/docker/root/.bowerrc
new file mode 100644
index 0000000000000000000000000000000000000000..71ed2b173356f933345913d2ca9099f850b268ae
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.int.acsmi.frontend.server.src.dvp/src/main/docker/root/.bowerrc
@@ -0,0 +1 @@
+{"allow_root":true,"registry":"https://registry.bower.io"}
diff --git a/ACSmI/Discovery/eu.decideh2020.int.acsmi.frontend.server.src.dvp/src/main/docker/root/.m2/settings-security.xml b/ACSmI/Discovery/eu.decideh2020.int.acsmi.frontend.server.src.dvp/src/main/docker/root/.m2/settings-security.xml
new file mode 100644
index 0000000000000000000000000000000000000000..663d9c91ac87740dfecdba5f1da1c113d9379c6f
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.int.acsmi.frontend.server.src.dvp/src/main/docker/root/.m2/settings-security.xml
@@ -0,0 +1,3 @@
+<settingsSecurity>
+<master>${env.MAVEN_MASTER_PASSWORD}</master>
+</settingsSecurity>
\ No newline at end of file
diff --git a/ACSmI/Discovery/eu.decideh2020.int.acsmi.frontend.server.src.dvp/src/main/docker/settings-security.xml b/ACSmI/Discovery/eu.decideh2020.int.acsmi.frontend.server.src.dvp/src/main/docker/settings-security.xml
new file mode 100644
index 0000000000000000000000000000000000000000..663d9c91ac87740dfecdba5f1da1c113d9379c6f
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.int.acsmi.frontend.server.src.dvp/src/main/docker/settings-security.xml
@@ -0,0 +1,3 @@
+<settingsSecurity>
+<master>${env.MAVEN_MASTER_PASSWORD}</master>
+</settingsSecurity>
\ No newline at end of file
diff --git a/ACSmI/Discovery/eu.decideh2020.int.acsmi.frontend.server.src.dvp/src/main/docker/settings.xml b/ACSmI/Discovery/eu.decideh2020.int.acsmi.frontend.server.src.dvp/src/main/docker/settings.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0a4df6f659d664ce3eb0e4c6cfdfb8c5ccef3ee7
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.int.acsmi.frontend.server.src.dvp/src/main/docker/settings.xml
@@ -0,0 +1,306 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+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.
+-->
+
+<!--
+ | This is the configuration file for Maven. It can be specified at two levels:
+ |
+ |  1. User Level. This settings.xml file provides configuration for a single user,
+ |                 and is normally provided in ${user.home}/.m2/settings.xml.
+ |
+ |                 NOTE: This location can be overridden with the CLI option:
+ |
+ |                 -s /path/to/user/settings.xml
+ |
+ |  2. Global Level. This settings.xml file provides configuration for all Maven
+ |                 users on a machine (assuming they're all using the same Maven
+ |                 installation). It's normally provided in
+ |                 ${maven.conf}/settings.xml.
+ |
+ |                 NOTE: This location can be overridden with the CLI option:
+ |
+ |                 -gs /path/to/global/settings.xml
+ |
+ | The sections in this sample file are intended to give you a running start at
+ | getting the most out of your Maven installation. Where appropriate, the default
+ | values (values used when the setting is not specified) are provided.
+ |
+ |-->
+<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
+          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
+  <!-- localRepository
+   | The path to the local repository maven will use to store artifacts.
+   |
+   | Default: ${user.home}/.m2/repository
+  <localRepository>/path/to/local/repo</localRepository>
+  -->
+
+  <!-- interactiveMode
+   | This will determine whether maven prompts you when it needs input. If set to false,
+   | maven will use a sensible default value, perhaps based on some other setting, for
+   | the parameter in question.
+   |
+   | Default: true
+  <interactiveMode>true</interactiveMode>
+  -->
+
+  <!-- offline
+   | Determines whether maven should attempt to connect to the network when executing a build.
+   | This will have an effect on artifact downloads, artifact deployment, and others.
+   |
+   | Default: false
+  <offline>false</offline>
+  -->
+
+  <!-- pluginGroups
+   | This is a list of additional group identifiers that will be searched when resolving plugins by their prefix, i.e.
+   | when invoking a command line like "mvn prefix:goal". Maven will automatically add the group identifiers
+   | "org.apache.maven.plugins" and "org.codehaus.mojo" if these are not already contained in the list.
+   |-->
+  <pluginGroups>
+    <!-- pluginGroup
+     | Specifies a further group identifier to use for plugin lookup.
+    <pluginGroup>com.your.plugins</pluginGroup>
+    -->
+  </pluginGroups>
+
+  <!-- proxies
+   | This is a list of proxies which can be used on this machine to connect to the network.
+   | Unless otherwise specified (by system property or command-line switch), the first proxy
+   | specification in this list marked as active will be used.
+   |-->
+  <proxies>
+    <!-- proxy
+     | Specification for one proxy, to be used in connecting to the network.
+     |
+    <proxy>
+      <id>optional</id>
+      <active>true</active>
+      <protocol>http</protocol>
+      <username>proxyuser</username>
+      <password>proxypass</password>
+      <host>proxy.host.net</host>
+      <port>80</port>
+      <nonProxyHosts>local.net|some.host.com</nonProxyHosts>
+    </proxy>
+    -->
+  </proxies>
+
+  <!-- servers
+   | This is a list of authentication profiles, keyed by the server-id used within the system.
+   | Authentication profiles can be used whenever maven must make a connection to a remote server.
+   |-->
+  <servers>
+    <server>
+      <username>${env.MAVEN_USER}</username>
+      <password>${env.MAVEN_PASSWORD}</password>
+      <id>central</id>
+    </server>
+    <server>
+      <username>${env.MAVEN_USER}</username>
+      <password>${env.MAVEN_PASSWORD}</password>
+      <id>snapshots</id>
+    </server>
+  
+    <!-- server
+     | Specifies the authentication information to use when connecting to a particular server, identified by
+     | a unique name within the system (referred to by the 'id' attribute below).
+     |
+     | NOTE: You should either specify username/password OR privateKey/passphrase, since these pairings are
+     |       used together.
+     |
+    <server>
+      <id>deploymentRepo</id>
+      <username>repouser</username>
+      <password>repopwd</password>
+    </server>
+    -->
+
+    <!-- Another sample, using keys to authenticate.
+    <server>
+      <id>siteServer</id>
+      <privateKey>/path/to/private/key</privateKey>
+      <passphrase>optional; leave empty if not used.</passphrase>
+    </server>
+    -->
+  </servers>
+
+  <!-- mirrors
+   | This is a list of mirrors to be used in downloading artifacts from remote repositories.
+   |
+   | It works like this: a POM may declare a repository to use in resolving certain artifacts.
+   | However, this repository may have problems with heavy traffic at times, so people have mirrored
+   | it to several places.
+   |
+   | That repository definition will have a unique id, so we can create a mirror reference for that
+   | repository, to be used as an alternate download site. The mirror site will be the preferred
+   | server for that repository.
+   |-->
+  <mirrors>
+    <!-- mirror
+     | Specifies a repository mirror site to use instead of a given repository. The repository that
+     | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
+     | for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
+     |
+    <mirror>
+      <id>mirrorId</id>
+      <mirrorOf>repositoryId</mirrorOf>
+      <name>Human Readable Name for this Mirror.</name>
+      <url>http://my.repository.com/repo/path</url>
+    </mirror>
+     -->
+  </mirrors>
+
+  <!-- profiles
+   | This is a list of profiles which can be activated in a variety of ways, and which can modify
+   | the build process. Profiles provided in the settings.xml are intended to provide local machine-
+   | specific paths and repository locations which allow the build to work in the local environment.
+   |
+   | For example, if you have an integration testing plugin - like cactus - that needs to know where
+   | your Tomcat instance is installed, you can provide a variable here such that the variable is
+   | dereferenced during the build process to configure the cactus plugin.
+   |
+   | As noted above, profiles can be activated in a variety of ways. One way - the activeProfiles
+   | section of this document (settings.xml) - will be discussed later. Another way essentially
+   | relies on the detection of a system property, either matching a particular value for the property,
+   | or merely testing its existence. Profiles can also be activated by JDK version prefix, where a
+   | value of '1.4' might activate a profile when the build is executed on a JDK version of '1.4.2_07'.
+   | Finally, the list of active profiles can be specified directly from the command line.
+   |
+   | NOTE: For profiles defined in the settings.xml, you are restricted to specifying only artifact
+   |       repositories, plugin repositories, and free-form properties to be used as configuration
+   |       variables for plugins in the POM.
+   |
+   |-->
+  <profiles>
+    <profile>
+      <repositories>
+        <repository>
+          <snapshots>
+            <enabled>false</enabled>
+          </snapshots>
+          <id>central</id>
+          <name>${env.ARTIFACTORY_MAVEN_REPO}</name>
+          <url>https://artifact.tecnalia.com:443/${env.ARTIFACTORY_MAVEN_REPO}</url>
+        </repository>
+        <repository>
+          <snapshots />
+          <id>snapshots</id>
+          <name>${env.ARTIFACTORY_MAVEN_REPO}</name>
+          <url>https://artifact.tecnalia.com:443/${env.ARTIFACTORY_MAVEN_REPO}</url>
+        </repository>
+      </repositories>
+      <pluginRepositories>
+        <pluginRepository>
+          <snapshots>
+            <enabled>false</enabled>
+          </snapshots>
+          <id>central</id>
+          <name>${env.ARTIFACTORY_MAVEN_REPO}</name>
+          <url>https://artifact.tecnalia.com:443/${env.ARTIFACTORY_MAVEN_REPO}</url>
+        </pluginRepository>
+        <pluginRepository>
+          <snapshots />
+          <id>snapshots</id>
+          <name>${env.ARTIFACTORY_MAVEN_REPO}</name>
+          <url>https://artifact.tecnalia.com:443/${env.ARTIFACTORY_MAVEN_REPO}</url>
+        </pluginRepository>
+      </pluginRepositories>
+      <id>artifactory</id>
+    </profile>
+    <!-- profile
+     | Specifies a set of introductions to the build process, to be activated using one or more of the
+     | mechanisms described above. For inheritance purposes, and to activate profiles via <activatedProfiles/>
+     | or the command line, profiles have to have an ID that is unique.
+     |
+     | An encouraged best practice for profile identification is to use a consistent naming convention
+     | for profiles, such as 'env-dev', 'env-test', 'env-production', 'user-jdcasey', 'user-brett', etc.
+     | This will make it more intuitive to understand what the set of introduced profiles is attempting
+     | to accomplish, particularly when you only have a list of profile id's for debug.
+     |
+     | This profile example uses the JDK version to trigger activation, and provides a JDK-specific repo.
+    <profile>
+      <id>jdk-1.4</id>
+
+      <activation>
+        <jdk>1.4</jdk>
+      </activation>
+
+      <repositories>
+        <repository>
+          <id>jdk14</id>
+          <name>Repository for JDK 1.4 builds</name>
+          <url>http://www.myhost.com/maven/jdk14</url>
+          <layout>default</layout>
+          <snapshotPolicy>always</snapshotPolicy>
+        </repository>
+      </repositories>
+    </profile>
+    -->
+
+    <!--
+     | Here is another profile, activated by the system property 'target-env' with a value of 'dev',
+     | which provides a specific path to the Tomcat instance. To use this, your plugin configuration
+     | might hypothetically look like:
+     |
+     | ...
+     | <plugin>
+     |   <groupId>org.myco.myplugins</groupId>
+     |   <artifactId>myplugin</artifactId>
+     |
+     |   <configuration>
+     |     <tomcatLocation>${tomcatPath}</tomcatLocation>
+     |   </configuration>
+     | </plugin>
+     | ...
+     |
+     | NOTE: If you just wanted to inject this configuration whenever someone set 'target-env' to
+     |       anything, you could just leave off the <value/> inside the activation-property.
+     |
+    <profile>
+      <id>env-dev</id>
+
+      <activation>
+        <property>
+          <name>target-env</name>
+          <value>dev</value>
+        </property>
+      </activation>
+
+      <properties>
+        <tomcatPath>/path/to/tomcat/instance</tomcatPath>
+      </properties>
+    </profile>
+    -->
+  </profiles>
+
+  <activeProfiles>
+    <activeProfile>artifactory</activeProfile>
+  </activeProfiles>
+  <!-- activeProfiles
+   | List of profiles that are active for all builds.
+   |
+  <activeProfiles>
+    <activeProfile>alwaysActiveProfile</activeProfile>
+    <activeProfile>anotherAlwaysActiveProfile</activeProfile>
+  </activeProfiles>
+  -->
+</settings>
diff --git a/ACSmI/Discovery/eu.decideh2020.int.acsmi.frontend.server.src.dvp/src/main/docker/sources.json b/ACSmI/Discovery/eu.decideh2020.int.acsmi.frontend.server.src.dvp/src/main/docker/sources.json
new file mode 100644
index 0000000000000000000000000000000000000000..2d614b27a39997e9bd119f30005388366118ad4a
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.int.acsmi.frontend.server.src.dvp/src/main/docker/sources.json
@@ -0,0 +1,13 @@
+{
+	"sources": [
+		{
+			"source": {
+				"repo": "https://git.code.tecnalia.com/DECIDE_Public/DECIDE_Components.git",
+				"path": "ACSmI/Discovery/eu.decideh2020.acsmi.frontend.server",
+				"git_ref": "ACSMI_FRONTEND_GIT_REF",
+				"git_credentials": "GIT_CREDENTIALS",
+				"maven": "package -Pprod -Dmaven.test.skip=true -DskipTests"
+			}
+		}
+	]
+} 
\ No newline at end of file
diff --git a/ACSmI/Discovery/eu.decideh2020.int.acsmi.registry.server.src.dvp/src/main/docker/.dockerignore b/ACSmI/Discovery/eu.decideh2020.int.acsmi.registry.server.src.dvp/src/main/docker/.dockerignore
new file mode 100644
index 0000000000000000000000000000000000000000..d3064226ba3aa9312002c53467a04ecccec42ef5
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.int.acsmi.registry.server.src.dvp/src/main/docker/.dockerignore
@@ -0,0 +1,3 @@
+node_modules/
+node/
+bower_components/
\ No newline at end of file
diff --git a/ACSmI/Discovery/eu.decideh2020.int.acsmi.registry.server.src.dvp/src/main/docker/.gitignore b/ACSmI/Discovery/eu.decideh2020.int.acsmi.registry.server.src.dvp/src/main/docker/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..59a4e66eaea0a4fdb51672d97673ad79089ec530
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.int.acsmi.registry.server.src.dvp/src/main/docker/.gitignore
@@ -0,0 +1 @@
+/sources
\ No newline at end of file
diff --git a/ACSmI/Discovery/eu.decideh2020.int.acsmi.registry.server.src.dvp/src/main/docker/Dockerfile b/ACSmI/Discovery/eu.decideh2020.int.acsmi.registry.server.src.dvp/src/main/docker/Dockerfile
index 9d522f6e27911f96f28aac438156d436d9f6dea6..fd3c45fe81a9e765134b3b25c0799a19c5fafa1c 100644
--- a/ACSmI/Discovery/eu.decideh2020.int.acsmi.registry.server.src.dvp/src/main/docker/Dockerfile
+++ b/ACSmI/Discovery/eu.decideh2020.int.acsmi.registry.server.src.dvp/src/main/docker/Dockerfile
@@ -1,11 +1,32 @@
-FROM localhost:5000/eu.decideh2020.int.springboot.server.repo
-
-ENV MYSQL_DOMAIN mysql
-ENV REGISTRY_DOMAIN registry
-
-WORKDIR /
-
-# Install Maven
-COPY maven-init.sh /maven-init.sh
-RUN chmod +x /maven-init.sh
-RUN sh ./maven-init.sh
+FROM decideh2020/jhipster.repo as builder
+
+ARG GIT_CREDENTIALS
+ARG ARTIFACTORY_USE
+ARG ARTIFACTORY_USER
+ARG ARTIFACTORY_PASSWORD
+ARG ARTIFACTORY_MAVEN_REPO
+ARG ACSMI_REGISTRY_GIT_REF
+ARG VERSION
+
+COPY . /
+
+RUN \
+	chmod 750 /*.sh 
+
+RUN \
+	. /configartifactorymaven.sh && \
+	python /processSourcesJson.py && \
+	rm -rf /sources
+
+FROM openjdk:8-jdk-alpine
+
+COPY --from=builder /app.war .
+
+ENV SPRING_OUTPUT_ANSI_ENABLED=ALWAYS \
+    JHIPSTER_SLEEP=0 \
+    JAVA_OPTS=""
+
+EXPOSE 8761 
+CMD echo "The application will start in ${JHIPSTER_SLEEP}s..." && \
+    sleep ${JHIPSTER_SLEEP} && \
+    java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar /app.war
\ No newline at end of file
diff --git a/ACSmI/Discovery/eu.decideh2020.int.acsmi.registry.server.src.dvp/src/main/docker/config.sh b/ACSmI/Discovery/eu.decideh2020.int.acsmi.registry.server.src.dvp/src/main/docker/config.sh
new file mode 100644
index 0000000000000000000000000000000000000000..ef2fc15d60a60b05ce9c715fa12dd54cf55b4584
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.int.acsmi.registry.server.src.dvp/src/main/docker/config.sh
@@ -0,0 +1,23 @@
+#!/bin/bash
+sourcespath=$1
+project=$2
+echo "sourcespath $sourcespath"
+echo "project $project"
+application=$sourcespath/$project/src/main/resources/config/application-prod.yml
+if [ -f $application ]; then
+   echo "File $applicationdev exists."
+   sed -i "s/localhost:3306/acsmi.mysql:3306/g" $application
+   sed -i "s/localhost:8761/acsmi.registry:8761/g" $application
+else
+   echo "File $applicationdev does not exist."
+fi
+
+bootstrap=$sourcespath/$project/src/main/resources/config/bootstrap-prod.yml
+if [ -f $bootstrap ]; then
+   echo "File $bootstrap exists."
+   sed -i "s/localhost:8761/acsmi.registry:8761/g" $bootstrap
+else
+   echo "File $bootstrap does not exist."
+fi
+
+#rm -rf ${xpref}
\ No newline at end of file
diff --git a/ACSmI/Discovery/eu.decideh2020.int.acsmi.registry.server.src.dvp/src/main/docker/configartifactorymaven.sh b/ACSmI/Discovery/eu.decideh2020.int.acsmi.registry.server.src.dvp/src/main/docker/configartifactorymaven.sh
new file mode 100644
index 0000000000000000000000000000000000000000..1fe2d19e9e517411406ad9d1d44766503a1bec7d
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.int.acsmi.registry.server.src.dvp/src/main/docker/configartifactorymaven.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+if [ "$ARTIFACTORY_USE" != "Y" ]
+then
+  echo "Without Artifactory"
+else
+
+  echo "With Artifactory"
+  cp /settings.xml /usr/share/maven/conf/.
+  mkdir /root/.m2
+  cp /settings-security.xml /root/.m2/.
+  export MAVEN_USER="$ARTIFACTORY_USER"
+  export MASTER_PASSWORD="$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1)"
+  export MAVEN_MASTER_PASSWORD="$(mvn --encrypt-master-password $MASTER_PASSWORD)"
+
+  sed -i "s@\${.*}@$MAVEN_MASTER_PASSWORD@g" /root/.m2/settings-security.xml
+  export MAVEN_PASSWORD="$(mvn --encrypt-password $ARTIFACTORY_PASSWORD)"
+
+fi
+
+#rm -rf /root/.m2/repository/ #to test that it works
diff --git a/ACSmI/Discovery/eu.decideh2020.int.acsmi.registry.server.src.dvp/src/main/docker/maven-init.sh b/ACSmI/Discovery/eu.decideh2020.int.acsmi.registry.server.src.dvp/src/main/docker/maven-init.sh
deleted file mode 100644
index 57ca29d95f7335cf0a1184d6bf67d1166d41f568..0000000000000000000000000000000000000000
--- a/ACSmI/Discovery/eu.decideh2020.int.acsmi.registry.server.src.dvp/src/main/docker/maven-init.sh
+++ /dev/null
@@ -1,26 +0,0 @@
-#repo=/WP5/ACSmI_discovery/eu.decideh2020.acsmi.backend.services.server
-#repo=/WP5/ACSmI_discovery/eu.decideh2020.acsmi.frontend.server
-repo=/WP5/ACSmI_discovery/eu.decideh2020.acsmi.registry
-echo "repo $repo"
-
-applicationdev=${repo}/src/main/resources/config/application-dev.yml
-if [ -f $applicationdev ]; then
-   echo "File $applicationdev exists."
-   sed -i "s/localhost:3306/$MYSQL_DOMAIN:3306/g" $applicationdev
-   sed -i "s/localhost:8761/$REGISTRY_DOMAIN:8761/g" $applicationdev
-else
-   echo "File $applicationdev does not exist."
-fi
-
-bootstrap=${repo}/src/main/resources/config/bootstrap.yml
-if [ -f $bootstrap ]; then
-   echo "File $bootstrap exists."
-   sed -i "s/localhost:8761/$REGISTRY_DOMAIN:8761/g" $bootstrap
-else
-   echo "File $bootstrap does not exist."
-fi
-
-mvn package -Dmaven.test.skip=true -f ${repo}/pom.xml
-cp ${repo}/target/*.war app.war
-
-#rm -rf ${xpref}
\ No newline at end of file
diff --git a/ACSmI/Discovery/eu.decideh2020.int.acsmi.registry.server.src.dvp/src/main/docker/moveappwar.sh b/ACSmI/Discovery/eu.decideh2020.int.acsmi.registry.server.src.dvp/src/main/docker/moveappwar.sh
new file mode 100644
index 0000000000000000000000000000000000000000..07ef1909223c63502219db61c47130b3e7ddfc75
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.int.acsmi.registry.server.src.dvp/src/main/docker/moveappwar.sh
@@ -0,0 +1,6 @@
+#!/bin/bash
+sourcespath=$1
+project=$2
+echo "sourcespath $sourcespath"
+echo "project $project"
+cp $sourcespath/$project/target/*.war /app.war || true
diff --git a/ACSmI/Discovery/eu.decideh2020.int.acsmi.registry.server.src.dvp/src/main/docker/processSource.sh b/ACSmI/Discovery/eu.decideh2020.int.acsmi.registry.server.src.dvp/src/main/docker/processSource.sh
new file mode 100644
index 0000000000000000000000000000000000000000..2ed9b80bb6427bb8713a47e55bb71f456cc508fd
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.int.acsmi.registry.server.src.dvp/src/main/docker/processSource.sh
@@ -0,0 +1,58 @@
+#!/bin/bash -e
+
+if [ $# -lt 5 ]; then
+    echo "Arguments required: dockerRepoUrl projectPath gitRef mavenParams"
+fi
+
+dockerRepoUrl=$1
+projectPath=$2
+gitRef=$3
+gitCredentials=$4
+mavenParams=$5
+repofix=$dockerRepoUrl
+
+[ -d /sources ] || mkdir -p /sources
+
+#phase 1 clone repo if necesary
+repo_dir=`echo $dockerRepoUrl | sed 's%^.*/\([^/]*\)\.git$%\1%g'`
+echo "Git repository: $dockerRepoUrl"
+echo "repository dir: $repo_dir"
+if [ "$VERSION" != "local" ] && [ ! -d /sources/$repo_dir/.git ]; then
+	echo "Enter to clone repo..."
+	rm -rf /sources/$repo_dir/* > /dev/null 2>&1 || true
+	if [[ ! -z "$gitCredentials" ]]; then
+		repofix=${repofix/https:\/\//https:\/\/$gitCredentials@}
+	fi
+	git clone "$repofix" /sources/$repo_dir
+	echo "repository cloned"
+else
+	echo "repository found in local folder: $repo_dir"
+fi
+
+#phase 2 checkout right version
+if [ "$VERSION" != "local" ] && [ ! -z "$gitRef" ]; then
+	echo "checking out: $gitRef"
+	git -C /sources/$repo_dir checkout $gitRef --force
+fi
+
+#phase 3 config 
+/config.sh /sources/$repo_dir $projectPath
+
+#phase 4 mvn 
+#NOTE jhipster bower instalation requires a file /root/.bowerrc to be run as root
+if [[ ! -z "$mavenParams" ]]; then
+	echo "copying jhipster resouces"
+	cp -r /bower_components  /sources/$repo_dir/$projectPath/src/main/webapp/ || true
+	cp -r /node_modules /sources/$repo_dir/$projectPath/. || true
+	cp -r /node /sources/$repo_dir/$projectPath/. || true
+	echo "maven execution: -f sources/$repo_dir/$projectPath/pom.xml  $mavenParams"
+	mvn  -f /sources/$repo_dir/$projectPath/pom.xml $mavenParams || true
+	#because jhister
+	echo "saving jhister resources" 
+	cp -r /sources/$repo_dir/$projectPath/src/main/webapp/bower_components / || true
+	cp -r /sources/$repo_dir/$projectPath/node_modules / || true
+	cp -r /sources/$repo_dir/$projectPath/node / || true
+fi
+
+#phase 5 move app war 
+/moveappwar.sh /sources/$repo_dir $projectPath
diff --git a/ACSmI/Discovery/eu.decideh2020.int.acsmi.registry.server.src.dvp/src/main/docker/processSourcesJson.py b/ACSmI/Discovery/eu.decideh2020.int.acsmi.registry.server.src.dvp/src/main/docker/processSourcesJson.py
new file mode 100644
index 0000000000000000000000000000000000000000..674930941ff948eaf85a0ec23dec4d79686f6f3c
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.int.acsmi.registry.server.src.dvp/src/main/docker/processSourcesJson.py
@@ -0,0 +1,9 @@
+import json
+import subprocess
+import os
+
+with open('/sources.json', 'r') as handle:
+    parsed = json.load(handle)
+    for source in parsed['sources']:
+        subprocess.check_call(['/processSource.sh',source['source']['repo'],source['source']['path'],os.getenv(source['source']['git_ref'],''),os.getenv(source['source']['git_credentials'],''),source['source']['maven']])
+
diff --git a/ACSmI/Discovery/eu.decideh2020.int.acsmi.registry.server.src.dvp/src/main/docker/root/.bowerrc b/ACSmI/Discovery/eu.decideh2020.int.acsmi.registry.server.src.dvp/src/main/docker/root/.bowerrc
new file mode 100644
index 0000000000000000000000000000000000000000..71ed2b173356f933345913d2ca9099f850b268ae
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.int.acsmi.registry.server.src.dvp/src/main/docker/root/.bowerrc
@@ -0,0 +1 @@
+{"allow_root":true,"registry":"https://registry.bower.io"}
diff --git a/ACSmI/Discovery/eu.decideh2020.int.acsmi.registry.server.src.dvp/src/main/docker/root/.m2/settings-security.xml b/ACSmI/Discovery/eu.decideh2020.int.acsmi.registry.server.src.dvp/src/main/docker/root/.m2/settings-security.xml
new file mode 100644
index 0000000000000000000000000000000000000000..663d9c91ac87740dfecdba5f1da1c113d9379c6f
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.int.acsmi.registry.server.src.dvp/src/main/docker/root/.m2/settings-security.xml
@@ -0,0 +1,3 @@
+<settingsSecurity>
+<master>${env.MAVEN_MASTER_PASSWORD}</master>
+</settingsSecurity>
\ No newline at end of file
diff --git a/ACSmI/Discovery/eu.decideh2020.int.acsmi.registry.server.src.dvp/src/main/docker/settings-security.xml b/ACSmI/Discovery/eu.decideh2020.int.acsmi.registry.server.src.dvp/src/main/docker/settings-security.xml
new file mode 100644
index 0000000000000000000000000000000000000000..663d9c91ac87740dfecdba5f1da1c113d9379c6f
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.int.acsmi.registry.server.src.dvp/src/main/docker/settings-security.xml
@@ -0,0 +1,3 @@
+<settingsSecurity>
+<master>${env.MAVEN_MASTER_PASSWORD}</master>
+</settingsSecurity>
\ No newline at end of file
diff --git a/ACSmI/Discovery/eu.decideh2020.int.acsmi.registry.server.src.dvp/src/main/docker/settings.xml b/ACSmI/Discovery/eu.decideh2020.int.acsmi.registry.server.src.dvp/src/main/docker/settings.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0a4df6f659d664ce3eb0e4c6cfdfb8c5ccef3ee7
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.int.acsmi.registry.server.src.dvp/src/main/docker/settings.xml
@@ -0,0 +1,306 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+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.
+-->
+
+<!--
+ | This is the configuration file for Maven. It can be specified at two levels:
+ |
+ |  1. User Level. This settings.xml file provides configuration for a single user,
+ |                 and is normally provided in ${user.home}/.m2/settings.xml.
+ |
+ |                 NOTE: This location can be overridden with the CLI option:
+ |
+ |                 -s /path/to/user/settings.xml
+ |
+ |  2. Global Level. This settings.xml file provides configuration for all Maven
+ |                 users on a machine (assuming they're all using the same Maven
+ |                 installation). It's normally provided in
+ |                 ${maven.conf}/settings.xml.
+ |
+ |                 NOTE: This location can be overridden with the CLI option:
+ |
+ |                 -gs /path/to/global/settings.xml
+ |
+ | The sections in this sample file are intended to give you a running start at
+ | getting the most out of your Maven installation. Where appropriate, the default
+ | values (values used when the setting is not specified) are provided.
+ |
+ |-->
+<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
+          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
+  <!-- localRepository
+   | The path to the local repository maven will use to store artifacts.
+   |
+   | Default: ${user.home}/.m2/repository
+  <localRepository>/path/to/local/repo</localRepository>
+  -->
+
+  <!-- interactiveMode
+   | This will determine whether maven prompts you when it needs input. If set to false,
+   | maven will use a sensible default value, perhaps based on some other setting, for
+   | the parameter in question.
+   |
+   | Default: true
+  <interactiveMode>true</interactiveMode>
+  -->
+
+  <!-- offline
+   | Determines whether maven should attempt to connect to the network when executing a build.
+   | This will have an effect on artifact downloads, artifact deployment, and others.
+   |
+   | Default: false
+  <offline>false</offline>
+  -->
+
+  <!-- pluginGroups
+   | This is a list of additional group identifiers that will be searched when resolving plugins by their prefix, i.e.
+   | when invoking a command line like "mvn prefix:goal". Maven will automatically add the group identifiers
+   | "org.apache.maven.plugins" and "org.codehaus.mojo" if these are not already contained in the list.
+   |-->
+  <pluginGroups>
+    <!-- pluginGroup
+     | Specifies a further group identifier to use for plugin lookup.
+    <pluginGroup>com.your.plugins</pluginGroup>
+    -->
+  </pluginGroups>
+
+  <!-- proxies
+   | This is a list of proxies which can be used on this machine to connect to the network.
+   | Unless otherwise specified (by system property or command-line switch), the first proxy
+   | specification in this list marked as active will be used.
+   |-->
+  <proxies>
+    <!-- proxy
+     | Specification for one proxy, to be used in connecting to the network.
+     |
+    <proxy>
+      <id>optional</id>
+      <active>true</active>
+      <protocol>http</protocol>
+      <username>proxyuser</username>
+      <password>proxypass</password>
+      <host>proxy.host.net</host>
+      <port>80</port>
+      <nonProxyHosts>local.net|some.host.com</nonProxyHosts>
+    </proxy>
+    -->
+  </proxies>
+
+  <!-- servers
+   | This is a list of authentication profiles, keyed by the server-id used within the system.
+   | Authentication profiles can be used whenever maven must make a connection to a remote server.
+   |-->
+  <servers>
+    <server>
+      <username>${env.MAVEN_USER}</username>
+      <password>${env.MAVEN_PASSWORD}</password>
+      <id>central</id>
+    </server>
+    <server>
+      <username>${env.MAVEN_USER}</username>
+      <password>${env.MAVEN_PASSWORD}</password>
+      <id>snapshots</id>
+    </server>
+  
+    <!-- server
+     | Specifies the authentication information to use when connecting to a particular server, identified by
+     | a unique name within the system (referred to by the 'id' attribute below).
+     |
+     | NOTE: You should either specify username/password OR privateKey/passphrase, since these pairings are
+     |       used together.
+     |
+    <server>
+      <id>deploymentRepo</id>
+      <username>repouser</username>
+      <password>repopwd</password>
+    </server>
+    -->
+
+    <!-- Another sample, using keys to authenticate.
+    <server>
+      <id>siteServer</id>
+      <privateKey>/path/to/private/key</privateKey>
+      <passphrase>optional; leave empty if not used.</passphrase>
+    </server>
+    -->
+  </servers>
+
+  <!-- mirrors
+   | This is a list of mirrors to be used in downloading artifacts from remote repositories.
+   |
+   | It works like this: a POM may declare a repository to use in resolving certain artifacts.
+   | However, this repository may have problems with heavy traffic at times, so people have mirrored
+   | it to several places.
+   |
+   | That repository definition will have a unique id, so we can create a mirror reference for that
+   | repository, to be used as an alternate download site. The mirror site will be the preferred
+   | server for that repository.
+   |-->
+  <mirrors>
+    <!-- mirror
+     | Specifies a repository mirror site to use instead of a given repository. The repository that
+     | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
+     | for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
+     |
+    <mirror>
+      <id>mirrorId</id>
+      <mirrorOf>repositoryId</mirrorOf>
+      <name>Human Readable Name for this Mirror.</name>
+      <url>http://my.repository.com/repo/path</url>
+    </mirror>
+     -->
+  </mirrors>
+
+  <!-- profiles
+   | This is a list of profiles which can be activated in a variety of ways, and which can modify
+   | the build process. Profiles provided in the settings.xml are intended to provide local machine-
+   | specific paths and repository locations which allow the build to work in the local environment.
+   |
+   | For example, if you have an integration testing plugin - like cactus - that needs to know where
+   | your Tomcat instance is installed, you can provide a variable here such that the variable is
+   | dereferenced during the build process to configure the cactus plugin.
+   |
+   | As noted above, profiles can be activated in a variety of ways. One way - the activeProfiles
+   | section of this document (settings.xml) - will be discussed later. Another way essentially
+   | relies on the detection of a system property, either matching a particular value for the property,
+   | or merely testing its existence. Profiles can also be activated by JDK version prefix, where a
+   | value of '1.4' might activate a profile when the build is executed on a JDK version of '1.4.2_07'.
+   | Finally, the list of active profiles can be specified directly from the command line.
+   |
+   | NOTE: For profiles defined in the settings.xml, you are restricted to specifying only artifact
+   |       repositories, plugin repositories, and free-form properties to be used as configuration
+   |       variables for plugins in the POM.
+   |
+   |-->
+  <profiles>
+    <profile>
+      <repositories>
+        <repository>
+          <snapshots>
+            <enabled>false</enabled>
+          </snapshots>
+          <id>central</id>
+          <name>${env.ARTIFACTORY_MAVEN_REPO}</name>
+          <url>https://artifact.tecnalia.com:443/${env.ARTIFACTORY_MAVEN_REPO}</url>
+        </repository>
+        <repository>
+          <snapshots />
+          <id>snapshots</id>
+          <name>${env.ARTIFACTORY_MAVEN_REPO}</name>
+          <url>https://artifact.tecnalia.com:443/${env.ARTIFACTORY_MAVEN_REPO}</url>
+        </repository>
+      </repositories>
+      <pluginRepositories>
+        <pluginRepository>
+          <snapshots>
+            <enabled>false</enabled>
+          </snapshots>
+          <id>central</id>
+          <name>${env.ARTIFACTORY_MAVEN_REPO}</name>
+          <url>https://artifact.tecnalia.com:443/${env.ARTIFACTORY_MAVEN_REPO}</url>
+        </pluginRepository>
+        <pluginRepository>
+          <snapshots />
+          <id>snapshots</id>
+          <name>${env.ARTIFACTORY_MAVEN_REPO}</name>
+          <url>https://artifact.tecnalia.com:443/${env.ARTIFACTORY_MAVEN_REPO}</url>
+        </pluginRepository>
+      </pluginRepositories>
+      <id>artifactory</id>
+    </profile>
+    <!-- profile
+     | Specifies a set of introductions to the build process, to be activated using one or more of the
+     | mechanisms described above. For inheritance purposes, and to activate profiles via <activatedProfiles/>
+     | or the command line, profiles have to have an ID that is unique.
+     |
+     | An encouraged best practice for profile identification is to use a consistent naming convention
+     | for profiles, such as 'env-dev', 'env-test', 'env-production', 'user-jdcasey', 'user-brett', etc.
+     | This will make it more intuitive to understand what the set of introduced profiles is attempting
+     | to accomplish, particularly when you only have a list of profile id's for debug.
+     |
+     | This profile example uses the JDK version to trigger activation, and provides a JDK-specific repo.
+    <profile>
+      <id>jdk-1.4</id>
+
+      <activation>
+        <jdk>1.4</jdk>
+      </activation>
+
+      <repositories>
+        <repository>
+          <id>jdk14</id>
+          <name>Repository for JDK 1.4 builds</name>
+          <url>http://www.myhost.com/maven/jdk14</url>
+          <layout>default</layout>
+          <snapshotPolicy>always</snapshotPolicy>
+        </repository>
+      </repositories>
+    </profile>
+    -->
+
+    <!--
+     | Here is another profile, activated by the system property 'target-env' with a value of 'dev',
+     | which provides a specific path to the Tomcat instance. To use this, your plugin configuration
+     | might hypothetically look like:
+     |
+     | ...
+     | <plugin>
+     |   <groupId>org.myco.myplugins</groupId>
+     |   <artifactId>myplugin</artifactId>
+     |
+     |   <configuration>
+     |     <tomcatLocation>${tomcatPath}</tomcatLocation>
+     |   </configuration>
+     | </plugin>
+     | ...
+     |
+     | NOTE: If you just wanted to inject this configuration whenever someone set 'target-env' to
+     |       anything, you could just leave off the <value/> inside the activation-property.
+     |
+    <profile>
+      <id>env-dev</id>
+
+      <activation>
+        <property>
+          <name>target-env</name>
+          <value>dev</value>
+        </property>
+      </activation>
+
+      <properties>
+        <tomcatPath>/path/to/tomcat/instance</tomcatPath>
+      </properties>
+    </profile>
+    -->
+  </profiles>
+
+  <activeProfiles>
+    <activeProfile>artifactory</activeProfile>
+  </activeProfiles>
+  <!-- activeProfiles
+   | List of profiles that are active for all builds.
+   |
+  <activeProfiles>
+    <activeProfile>alwaysActiveProfile</activeProfile>
+    <activeProfile>anotherAlwaysActiveProfile</activeProfile>
+  </activeProfiles>
+  -->
+</settings>
diff --git a/ACSmI/Discovery/eu.decideh2020.int.acsmi.registry.server.src.dvp/src/main/docker/sources.json b/ACSmI/Discovery/eu.decideh2020.int.acsmi.registry.server.src.dvp/src/main/docker/sources.json
new file mode 100644
index 0000000000000000000000000000000000000000..694df0d5e6196e9556b44057594678ee290cfd54
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.int.acsmi.registry.server.src.dvp/src/main/docker/sources.json
@@ -0,0 +1,13 @@
+{
+	"sources": [
+		{
+			"source": {
+				"repo": "https://git.code.tecnalia.com/DECIDE_Public/DECIDE_Components.git",
+				"path": "ACSmI/Discovery/eu.decideh2020.acsmi.registry",
+				"git_ref": "ACSMI_REGISTRY_GIT_REF",
+				"git_credentials": "GIT_CREDENTIALS",
+				"maven": "package -Pprod -Dmaven.test.skip=true -DskipTests"
+			}
+		}
+	]
+} 
\ No newline at end of file
diff --git a/ACSmI/Discovery/eu.decideh2020.springboot.server.repo.src.dvp/src/main/docker/.dockerignore b/ACSmI/Discovery/eu.decideh2020.springboot.server.repo.src.dvp/src/main/docker/.dockerignore
new file mode 100644
index 0000000000000000000000000000000000000000..d3064226ba3aa9312002c53467a04ecccec42ef5
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.springboot.server.repo.src.dvp/src/main/docker/.dockerignore
@@ -0,0 +1,3 @@
+node_modules/
+node/
+bower_components/
\ No newline at end of file
diff --git a/ACSmI/Discovery/eu.decideh2020.springboot.server.repo.src.dvp/src/main/docker/.gitignore b/ACSmI/Discovery/eu.decideh2020.springboot.server.repo.src.dvp/src/main/docker/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..59a4e66eaea0a4fdb51672d97673ad79089ec530
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.springboot.server.repo.src.dvp/src/main/docker/.gitignore
@@ -0,0 +1 @@
+/sources
\ No newline at end of file
diff --git a/ACSmI/Discovery/eu.decideh2020.springboot.server.repo.src.dvp/src/main/docker/Dockerfile b/ACSmI/Discovery/eu.decideh2020.springboot.server.repo.src.dvp/src/main/docker/Dockerfile
index 5dbd94e3a153168b0e6003589cb31b589dfd06ee..24558c1fa9fbee876639ea6ae69aba1dacac139f 100644
--- a/ACSmI/Discovery/eu.decideh2020.springboot.server.repo.src.dvp/src/main/docker/Dockerfile
+++ b/ACSmI/Discovery/eu.decideh2020.springboot.server.repo.src.dvp/src/main/docker/Dockerfile
@@ -1,23 +1,22 @@
-FROM maven:3.5.3-jdk-8 as builder
-
-#COPY sources /sources
-#COPY sources-appmanager /sources-appmanager
-#COPY .m2 /root/.m2
-#
-ARG GIT_CREDENTIALS
-ARG APPMANAGER_VERSION
-
-ENV SPRING_OUTPUT_ANSI_ENABLED=ALWAYS \
-    JHIPSTER_SLEEP=0 \
-    JAVA_OPTS=""
-
-COPY downloadsources.sh /downloadsources.sh
-COPY maveninstall.sh /maveninstall.sh
-RUN chmod +x /downloadsources.sh && \
-    sh ./downloadsources.sh && \
-    chmod +x /maveninstall.sh && \
-    sh ./maveninstall.sh 
-
-CMD echo "The application will start in ${JHIPSTER_SLEEP}s..." && \
-    sleep ${JHIPSTER_SLEEP} && \
-    java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar /app.war
+FROM maven:3.5.4 
+
+ARG GIT_CREDENTIALS
+ARG ARTIFACTORY_USE
+ARG ARTIFACTORY_USER
+ARG ARTIFACTORY_PASSWORD
+ARG ARTIFACTORY_MAVEN_REPO
+ARG ACSMI_FRONTEND_GIT_REF
+ARG ACSMI_BACKEND_GIT_REF
+ARG ACSMI_REGISTRY_GIT_REF
+ARG VERSION
+
+COPY . /
+
+RUN \
+	chmod 750 /*.sh 
+
+RUN \
+	. /configartifactorymaven.sh && \
+	python /processSourcesJson.py && \
+	rm -rf /sources
+	
\ No newline at end of file
diff --git a/ACSmI/Discovery/eu.decideh2020.springboot.server.repo.src.dvp/src/main/docker/configartifactorymaven.sh b/ACSmI/Discovery/eu.decideh2020.springboot.server.repo.src.dvp/src/main/docker/configartifactorymaven.sh
new file mode 100644
index 0000000000000000000000000000000000000000..1fe2d19e9e517411406ad9d1d44766503a1bec7d
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.springboot.server.repo.src.dvp/src/main/docker/configartifactorymaven.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+if [ "$ARTIFACTORY_USE" != "Y" ]
+then
+  echo "Without Artifactory"
+else
+
+  echo "With Artifactory"
+  cp /settings.xml /usr/share/maven/conf/.
+  mkdir /root/.m2
+  cp /settings-security.xml /root/.m2/.
+  export MAVEN_USER="$ARTIFACTORY_USER"
+  export MASTER_PASSWORD="$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1)"
+  export MAVEN_MASTER_PASSWORD="$(mvn --encrypt-master-password $MASTER_PASSWORD)"
+
+  sed -i "s@\${.*}@$MAVEN_MASTER_PASSWORD@g" /root/.m2/settings-security.xml
+  export MAVEN_PASSWORD="$(mvn --encrypt-password $ARTIFACTORY_PASSWORD)"
+
+fi
+
+#rm -rf /root/.m2/repository/ #to test that it works
diff --git a/ACSmI/Discovery/eu.decideh2020.springboot.server.repo.src.dvp/src/main/docker/downloadsources.sh b/ACSmI/Discovery/eu.decideh2020.springboot.server.repo.src.dvp/src/main/docker/downloadsources.sh
deleted file mode 100644
index 91fd355936ea8ffaa86b1fdc507b79af7d076996..0000000000000000000000000000000000000000
--- a/ACSmI/Discovery/eu.decideh2020.springboot.server.repo.src.dvp/src/main/docker/downloadsources.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-cd /
-git clone https://$GIT_CREDENTIALS@git.code.tecnalia.com/decide/WP5.git
diff --git a/ACSmI/Discovery/eu.decideh2020.springboot.server.repo.src.dvp/src/main/docker/maven-init.sh b/ACSmI/Discovery/eu.decideh2020.springboot.server.repo.src.dvp/src/main/docker/maven-init.sh
deleted file mode 100644
index f73a48f2a6fc14dcbbbce6e1111fd9d210e2f16b..0000000000000000000000000000000000000000
--- a/ACSmI/Discovery/eu.decideh2020.springboot.server.repo.src.dvp/src/main/docker/maven-init.sh
+++ /dev/null
@@ -1,54 +0,0 @@
-apk add --no-cache curl tar bash
-mkdir -p /usr/share/maven 
-curl -fsSL http://apache.osuosl.org/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz | tar -xzC /usr/share/maven --strip-components=1 && ln -s /usr/share/maven/bin/mvn /usr/bin/mvn
-
-# esto cambia un poco porque lo que buscamos es bajarnos las dependencias
-# tenemos que entrar en todos los directorios con pom y construirlos
-
-cd /citadel.discovery/eu.citadelh2020.discovery.backend.services.server
-mvn install -Dmaven.test.skip=true
-cd /citadel.discovery/eu.citadelh2020.discovery.registry
-mvn install -Dmaven.test.skip=true
-cd /citadel.discovery/eu.citadelh2020.discovery.frontend.server
-mvn install -Dmaven.test.skip=true
-cd /citadel.assessment/eu.citadelh2020.assessmentanalysis.frontend.server
-mvn install -Dmaven.test.skip=true
-cd /citadel.assessment/eu.citadelh2020.assessmentrating.frontend.server
-mvn install -Dmaven.test.skip=true
-
-bowerjson=/citadel.discovery/eu.citadelh2020.discovery.frontend.server/bower.json
-if [ -f $bowerjson ]; then
-   echo "File $applicationdev exists."
-   apk add --no-cache nodejs
-   npm install -g bower
-   cd /citadel.discovery/eu.citadelh2020.discovery.frontend.server
-   bower install  --allow-root
-   cd /
-else
-   echo "File $bowerjson does not exist."
-fi
-
-bowerjson=/citadel.assessment/eu.citadelh2020.assessmentanalysis.frontend.server/bower.json
-if [ -f $bowerjson ]; then
-   echo "File $applicationdev exists."
-   apk add --no-cache nodejs
-   npm install -g bower
-   cd /citadel.assessment/eu.citadelh2020.assessmentanalysis.frontend.server
-   bower install  --allow-root
-   cd /
-else
-   echo "File $bowerjson does not exist."
-fi
-
-bowerjson=/citadel.assessment/eu.citadelh2020.assessmentrating.frontend.server/bower.json
-if [ -f $bowerjson ]; then
-   echo "File $applicationdev exists."
-   apk add --no-cache nodejs
-   npm install -g bower
-   cd /citadel.assessment/eu.citadelh2020.assessmentrating.frontend.server
-   bower install  --allow-root
-   cd /
-else
-   echo "File $bowerjson does not exist."
-fi
-
diff --git a/ACSmI/Discovery/eu.decideh2020.springboot.server.repo.src.dvp/src/main/docker/maveninstall.sh b/ACSmI/Discovery/eu.decideh2020.springboot.server.repo.src.dvp/src/main/docker/maveninstall.sh
deleted file mode 100644
index 971a2afe30ffcf4f63df841b681d1b7f48b9aa08..0000000000000000000000000000000000000000
--- a/ACSmI/Discovery/eu.decideh2020.springboot.server.repo.src.dvp/src/main/docker/maveninstall.sh
+++ /dev/null
@@ -1,20 +0,0 @@
-cd /WP5/ACSmI_discovery/eu.decideh2020.acsmi.backend.services.server
-mvn install -Dmaven.test.skip=true
-cd /WP5/ACSmI_discovery/eu.decideh2020.acsmi.frontend.server
-mvn install -Dmaven.test.skip=true
-cd /WP5/ACSmI_discovery/eu.decideh2020.acsmi.registry
-mvn install -Dmaven.test.skip=true
-
-bowerjson=/WP5/ACSmI_discovery/eu.decideh2020.acsmi.frontend.server/bower.json
-if [ -f $bowerjson ]; then
-   echo "File $applicationdev exists."
-   apt-get update
-   curl -sL https://deb.nodesource.com/setup_6.x | bash -
-   apt-get install -y nodejs
-   npm install -g bower
-   cd /WP5/ACSmI_discovery/eu.decideh2020.acsmi.frontend.server
-   bower install  --allow-root
-   cd /
-else
-   echo "File $bowerjson does not exist."
-fi
diff --git a/ACSmI/Discovery/eu.decideh2020.springboot.server.repo.src.dvp/src/main/docker/processSource.sh b/ACSmI/Discovery/eu.decideh2020.springboot.server.repo.src.dvp/src/main/docker/processSource.sh
new file mode 100644
index 0000000000000000000000000000000000000000..9f2e1450b2c23f9b8e987113236644e39a0c5b56
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.springboot.server.repo.src.dvp/src/main/docker/processSource.sh
@@ -0,0 +1,52 @@
+#!/bin/bash -e
+
+if [ $# -lt 5 ]; then
+    echo "Arguments required: dockerRepoUrl projectPath gitRef mavenParams"
+fi
+
+dockerRepoUrl=$1
+projectPath=$2
+gitRef=$3
+gitCredentials=$4
+mavenParams=$5
+repofix=$dockerRepoUrl
+
+[ -d /sources ] || mkdir -p /sources
+
+#phase 1 clone repo if necesary
+repo_dir=`echo $dockerRepoUrl | sed 's%^.*/\([^/]*\)\.git$%\1%g'`
+echo "Git repository: $dockerRepoUrl"
+echo "repository dir: $repo_dir"
+if [ "$VERSION" != "local" ] && [ ! -d /sources/$repo_dir/.git ]; then
+	echo "Enter to clone repo..."
+	rm -rf /sources/$repo_dir/* > /dev/null 2>&1 || true
+	if [[ ! -z "$gitCredentials" ]]; then
+		repofix=${repofix/https:\/\//https:\/\/$gitCredentials@}
+	fi
+	git clone "$repofix" /sources/$repo_dir
+	echo "repository cloned"
+else
+	echo "repository found in local folder: $repo_dir"
+fi
+
+#phase 2 checkout right version
+if [ "$VERSION" != "local" ] && [ ! -z "$gitRef" ]; then
+	echo "checking out: $gitRef"
+	git -C /sources/$repo_dir checkout $gitRef --force
+fi
+
+#phase 3 mvn 
+#NOTE jhipster bower instalation requires a file /root/.bowerrc to be run as root
+if [[ ! -z "$mavenParams" ]]; then
+	echo "copying jhipster resouces"
+	cp -r /bower_components  /sources/$repo_dir/$projectPath/src/main/webapp/ || true
+	cp -r /node_modules /sources/$repo_dir/$projectPath/. || true
+	cp -r /node /sources/$repo_dir/$projectPath/. || true
+	echo "maven execution: -f sources/$repo_dir/$projectPath/pom.xml  $mavenParams"
+	mvn  -f /sources/$repo_dir/$projectPath/pom.xml $mavenParams || true
+	#because jhister
+	echo "saving jhister resources" 
+	cp -r /sources/$repo_dir/$projectPath/src/main/webapp/bower_components / || true
+	cp -r /sources/$repo_dir/$projectPath/node_modules / || true
+	cp -r /sources/$repo_dir/$projectPath/node / || true
+fi
diff --git a/ACSmI/Discovery/eu.decideh2020.springboot.server.repo.src.dvp/src/main/docker/processSourcesJson.py b/ACSmI/Discovery/eu.decideh2020.springboot.server.repo.src.dvp/src/main/docker/processSourcesJson.py
new file mode 100644
index 0000000000000000000000000000000000000000..674930941ff948eaf85a0ec23dec4d79686f6f3c
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.springboot.server.repo.src.dvp/src/main/docker/processSourcesJson.py
@@ -0,0 +1,9 @@
+import json
+import subprocess
+import os
+
+with open('/sources.json', 'r') as handle:
+    parsed = json.load(handle)
+    for source in parsed['sources']:
+        subprocess.check_call(['/processSource.sh',source['source']['repo'],source['source']['path'],os.getenv(source['source']['git_ref'],''),os.getenv(source['source']['git_credentials'],''),source['source']['maven']])
+
diff --git a/ACSmI/Discovery/eu.decideh2020.springboot.server.repo.src.dvp/src/main/docker/root/.bowerrc b/ACSmI/Discovery/eu.decideh2020.springboot.server.repo.src.dvp/src/main/docker/root/.bowerrc
new file mode 100644
index 0000000000000000000000000000000000000000..71ed2b173356f933345913d2ca9099f850b268ae
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.springboot.server.repo.src.dvp/src/main/docker/root/.bowerrc
@@ -0,0 +1 @@
+{"allow_root":true,"registry":"https://registry.bower.io"}
diff --git a/ACSmI/Discovery/eu.decideh2020.springboot.server.repo.src.dvp/src/main/docker/root/.m2/settings-security.xml b/ACSmI/Discovery/eu.decideh2020.springboot.server.repo.src.dvp/src/main/docker/root/.m2/settings-security.xml
new file mode 100644
index 0000000000000000000000000000000000000000..663d9c91ac87740dfecdba5f1da1c113d9379c6f
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.springboot.server.repo.src.dvp/src/main/docker/root/.m2/settings-security.xml
@@ -0,0 +1,3 @@
+<settingsSecurity>
+<master>${env.MAVEN_MASTER_PASSWORD}</master>
+</settingsSecurity>
\ No newline at end of file
diff --git a/ACSmI/Discovery/eu.decideh2020.springboot.server.repo.src.dvp/src/main/docker/settings-security.xml b/ACSmI/Discovery/eu.decideh2020.springboot.server.repo.src.dvp/src/main/docker/settings-security.xml
new file mode 100644
index 0000000000000000000000000000000000000000..663d9c91ac87740dfecdba5f1da1c113d9379c6f
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.springboot.server.repo.src.dvp/src/main/docker/settings-security.xml
@@ -0,0 +1,3 @@
+<settingsSecurity>
+<master>${env.MAVEN_MASTER_PASSWORD}</master>
+</settingsSecurity>
\ No newline at end of file
diff --git a/ACSmI/Discovery/eu.decideh2020.springboot.server.repo.src.dvp/src/main/docker/settings.xml b/ACSmI/Discovery/eu.decideh2020.springboot.server.repo.src.dvp/src/main/docker/settings.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0a4df6f659d664ce3eb0e4c6cfdfb8c5ccef3ee7
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.springboot.server.repo.src.dvp/src/main/docker/settings.xml
@@ -0,0 +1,306 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+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.
+-->
+
+<!--
+ | This is the configuration file for Maven. It can be specified at two levels:
+ |
+ |  1. User Level. This settings.xml file provides configuration for a single user,
+ |                 and is normally provided in ${user.home}/.m2/settings.xml.
+ |
+ |                 NOTE: This location can be overridden with the CLI option:
+ |
+ |                 -s /path/to/user/settings.xml
+ |
+ |  2. Global Level. This settings.xml file provides configuration for all Maven
+ |                 users on a machine (assuming they're all using the same Maven
+ |                 installation). It's normally provided in
+ |                 ${maven.conf}/settings.xml.
+ |
+ |                 NOTE: This location can be overridden with the CLI option:
+ |
+ |                 -gs /path/to/global/settings.xml
+ |
+ | The sections in this sample file are intended to give you a running start at
+ | getting the most out of your Maven installation. Where appropriate, the default
+ | values (values used when the setting is not specified) are provided.
+ |
+ |-->
+<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
+          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
+  <!-- localRepository
+   | The path to the local repository maven will use to store artifacts.
+   |
+   | Default: ${user.home}/.m2/repository
+  <localRepository>/path/to/local/repo</localRepository>
+  -->
+
+  <!-- interactiveMode
+   | This will determine whether maven prompts you when it needs input. If set to false,
+   | maven will use a sensible default value, perhaps based on some other setting, for
+   | the parameter in question.
+   |
+   | Default: true
+  <interactiveMode>true</interactiveMode>
+  -->
+
+  <!-- offline
+   | Determines whether maven should attempt to connect to the network when executing a build.
+   | This will have an effect on artifact downloads, artifact deployment, and others.
+   |
+   | Default: false
+  <offline>false</offline>
+  -->
+
+  <!-- pluginGroups
+   | This is a list of additional group identifiers that will be searched when resolving plugins by their prefix, i.e.
+   | when invoking a command line like "mvn prefix:goal". Maven will automatically add the group identifiers
+   | "org.apache.maven.plugins" and "org.codehaus.mojo" if these are not already contained in the list.
+   |-->
+  <pluginGroups>
+    <!-- pluginGroup
+     | Specifies a further group identifier to use for plugin lookup.
+    <pluginGroup>com.your.plugins</pluginGroup>
+    -->
+  </pluginGroups>
+
+  <!-- proxies
+   | This is a list of proxies which can be used on this machine to connect to the network.
+   | Unless otherwise specified (by system property or command-line switch), the first proxy
+   | specification in this list marked as active will be used.
+   |-->
+  <proxies>
+    <!-- proxy
+     | Specification for one proxy, to be used in connecting to the network.
+     |
+    <proxy>
+      <id>optional</id>
+      <active>true</active>
+      <protocol>http</protocol>
+      <username>proxyuser</username>
+      <password>proxypass</password>
+      <host>proxy.host.net</host>
+      <port>80</port>
+      <nonProxyHosts>local.net|some.host.com</nonProxyHosts>
+    </proxy>
+    -->
+  </proxies>
+
+  <!-- servers
+   | This is a list of authentication profiles, keyed by the server-id used within the system.
+   | Authentication profiles can be used whenever maven must make a connection to a remote server.
+   |-->
+  <servers>
+    <server>
+      <username>${env.MAVEN_USER}</username>
+      <password>${env.MAVEN_PASSWORD}</password>
+      <id>central</id>
+    </server>
+    <server>
+      <username>${env.MAVEN_USER}</username>
+      <password>${env.MAVEN_PASSWORD}</password>
+      <id>snapshots</id>
+    </server>
+  
+    <!-- server
+     | Specifies the authentication information to use when connecting to a particular server, identified by
+     | a unique name within the system (referred to by the 'id' attribute below).
+     |
+     | NOTE: You should either specify username/password OR privateKey/passphrase, since these pairings are
+     |       used together.
+     |
+    <server>
+      <id>deploymentRepo</id>
+      <username>repouser</username>
+      <password>repopwd</password>
+    </server>
+    -->
+
+    <!-- Another sample, using keys to authenticate.
+    <server>
+      <id>siteServer</id>
+      <privateKey>/path/to/private/key</privateKey>
+      <passphrase>optional; leave empty if not used.</passphrase>
+    </server>
+    -->
+  </servers>
+
+  <!-- mirrors
+   | This is a list of mirrors to be used in downloading artifacts from remote repositories.
+   |
+   | It works like this: a POM may declare a repository to use in resolving certain artifacts.
+   | However, this repository may have problems with heavy traffic at times, so people have mirrored
+   | it to several places.
+   |
+   | That repository definition will have a unique id, so we can create a mirror reference for that
+   | repository, to be used as an alternate download site. The mirror site will be the preferred
+   | server for that repository.
+   |-->
+  <mirrors>
+    <!-- mirror
+     | Specifies a repository mirror site to use instead of a given repository. The repository that
+     | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
+     | for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
+     |
+    <mirror>
+      <id>mirrorId</id>
+      <mirrorOf>repositoryId</mirrorOf>
+      <name>Human Readable Name for this Mirror.</name>
+      <url>http://my.repository.com/repo/path</url>
+    </mirror>
+     -->
+  </mirrors>
+
+  <!-- profiles
+   | This is a list of profiles which can be activated in a variety of ways, and which can modify
+   | the build process. Profiles provided in the settings.xml are intended to provide local machine-
+   | specific paths and repository locations which allow the build to work in the local environment.
+   |
+   | For example, if you have an integration testing plugin - like cactus - that needs to know where
+   | your Tomcat instance is installed, you can provide a variable here such that the variable is
+   | dereferenced during the build process to configure the cactus plugin.
+   |
+   | As noted above, profiles can be activated in a variety of ways. One way - the activeProfiles
+   | section of this document (settings.xml) - will be discussed later. Another way essentially
+   | relies on the detection of a system property, either matching a particular value for the property,
+   | or merely testing its existence. Profiles can also be activated by JDK version prefix, where a
+   | value of '1.4' might activate a profile when the build is executed on a JDK version of '1.4.2_07'.
+   | Finally, the list of active profiles can be specified directly from the command line.
+   |
+   | NOTE: For profiles defined in the settings.xml, you are restricted to specifying only artifact
+   |       repositories, plugin repositories, and free-form properties to be used as configuration
+   |       variables for plugins in the POM.
+   |
+   |-->
+  <profiles>
+    <profile>
+      <repositories>
+        <repository>
+          <snapshots>
+            <enabled>false</enabled>
+          </snapshots>
+          <id>central</id>
+          <name>${env.ARTIFACTORY_MAVEN_REPO}</name>
+          <url>https://artifact.tecnalia.com:443/${env.ARTIFACTORY_MAVEN_REPO}</url>
+        </repository>
+        <repository>
+          <snapshots />
+          <id>snapshots</id>
+          <name>${env.ARTIFACTORY_MAVEN_REPO}</name>
+          <url>https://artifact.tecnalia.com:443/${env.ARTIFACTORY_MAVEN_REPO}</url>
+        </repository>
+      </repositories>
+      <pluginRepositories>
+        <pluginRepository>
+          <snapshots>
+            <enabled>false</enabled>
+          </snapshots>
+          <id>central</id>
+          <name>${env.ARTIFACTORY_MAVEN_REPO}</name>
+          <url>https://artifact.tecnalia.com:443/${env.ARTIFACTORY_MAVEN_REPO}</url>
+        </pluginRepository>
+        <pluginRepository>
+          <snapshots />
+          <id>snapshots</id>
+          <name>${env.ARTIFACTORY_MAVEN_REPO}</name>
+          <url>https://artifact.tecnalia.com:443/${env.ARTIFACTORY_MAVEN_REPO}</url>
+        </pluginRepository>
+      </pluginRepositories>
+      <id>artifactory</id>
+    </profile>
+    <!-- profile
+     | Specifies a set of introductions to the build process, to be activated using one or more of the
+     | mechanisms described above. For inheritance purposes, and to activate profiles via <activatedProfiles/>
+     | or the command line, profiles have to have an ID that is unique.
+     |
+     | An encouraged best practice for profile identification is to use a consistent naming convention
+     | for profiles, such as 'env-dev', 'env-test', 'env-production', 'user-jdcasey', 'user-brett', etc.
+     | This will make it more intuitive to understand what the set of introduced profiles is attempting
+     | to accomplish, particularly when you only have a list of profile id's for debug.
+     |
+     | This profile example uses the JDK version to trigger activation, and provides a JDK-specific repo.
+    <profile>
+      <id>jdk-1.4</id>
+
+      <activation>
+        <jdk>1.4</jdk>
+      </activation>
+
+      <repositories>
+        <repository>
+          <id>jdk14</id>
+          <name>Repository for JDK 1.4 builds</name>
+          <url>http://www.myhost.com/maven/jdk14</url>
+          <layout>default</layout>
+          <snapshotPolicy>always</snapshotPolicy>
+        </repository>
+      </repositories>
+    </profile>
+    -->
+
+    <!--
+     | Here is another profile, activated by the system property 'target-env' with a value of 'dev',
+     | which provides a specific path to the Tomcat instance. To use this, your plugin configuration
+     | might hypothetically look like:
+     |
+     | ...
+     | <plugin>
+     |   <groupId>org.myco.myplugins</groupId>
+     |   <artifactId>myplugin</artifactId>
+     |
+     |   <configuration>
+     |     <tomcatLocation>${tomcatPath}</tomcatLocation>
+     |   </configuration>
+     | </plugin>
+     | ...
+     |
+     | NOTE: If you just wanted to inject this configuration whenever someone set 'target-env' to
+     |       anything, you could just leave off the <value/> inside the activation-property.
+     |
+    <profile>
+      <id>env-dev</id>
+
+      <activation>
+        <property>
+          <name>target-env</name>
+          <value>dev</value>
+        </property>
+      </activation>
+
+      <properties>
+        <tomcatPath>/path/to/tomcat/instance</tomcatPath>
+      </properties>
+    </profile>
+    -->
+  </profiles>
+
+  <activeProfiles>
+    <activeProfile>artifactory</activeProfile>
+  </activeProfiles>
+  <!-- activeProfiles
+   | List of profiles that are active for all builds.
+   |
+  <activeProfiles>
+    <activeProfile>alwaysActiveProfile</activeProfile>
+    <activeProfile>anotherAlwaysActiveProfile</activeProfile>
+  </activeProfiles>
+  -->
+</settings>
diff --git a/ACSmI/Discovery/eu.decideh2020.springboot.server.repo.src.dvp/src/main/docker/sources.json b/ACSmI/Discovery/eu.decideh2020.springboot.server.repo.src.dvp/src/main/docker/sources.json
new file mode 100644
index 0000000000000000000000000000000000000000..2a76e447b2aa5c695861a4236ef2b1c8a09541fe
--- /dev/null
+++ b/ACSmI/Discovery/eu.decideh2020.springboot.server.repo.src.dvp/src/main/docker/sources.json
@@ -0,0 +1,31 @@
+{
+	"sources": [
+		{ 
+			"source": {
+				"repo": "https://git.code.tecnalia.com/decide/WP5.git",
+				"path": "ACSmI_discovery/eu.decideh2020.acsmi.frontend.server",
+				"git_ref": "ACSMI_FRONTEND_GIT_REF",
+				"git_credentials": "GIT_CREDENTIALS",
+				"maven": "package -Pprod -Dmaven.test.skip=true -DskipTests"
+			}
+		},
+		{
+			"source": {
+				"repo": "https://git.code.tecnalia.com/decide/WP5.git",
+				"path": "ACSmI_discovery/eu.decideh2020.acsmi.backend.services.server",
+				"git_ref": "ACSMI_BACKEND_GIT_REF",
+				"git_credentials": "GIT_CREDENTIALS",
+				"maven": "package -Pprod -Dmaven.test.skip=true -DskipTests"
+			}
+		},
+		{
+			"source": {
+				"repo": "https://git.code.tecnalia.com/decide/WP5.git",
+				"path": "ACSmI_discovery/eu.decideh2020.acsmi.registry",
+				"git_ref": "ACSMI_REGISTRY_GIT_REF",
+				"git_credentials": "GIT_CREDENTIALS",
+				"maven": "package -Pprod -Dmaven.test.skip=true -DskipTests"
+			}
+		}
+	]
+} 
\ No newline at end of file
diff --git a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.testcors.server.src.dvp/.project b/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.client/.project
similarity index 54%
rename from ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.testcors.server.src.dvp/.project
rename to ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.client/.project
index f47383418ab2acbcf5a34dd6ef8842479dc4485b..c191c295e61ac9e0fea62cd343dd969103866176 100644
--- a/ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.testcors.server.src.dvp/.project
+++ b/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.client/.project
@@ -1,24 +1,36 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>eu.decideh2020.acsmi.backend.services.testcors.server</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.wst.common.project.facet.core.builder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.wst.validation.validationbuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
-		<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
-		<nature>org.eclipse.wst.jsdt.core.jsNature</nature>
-	</natures>
-</projectDescription>
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>eu.decideh2020.ACSmI.monitoring.client</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.wst.common.project.facet.core.builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.wst.validation.validationbuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
+		<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+		<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
+	</natures>
+</projectDescription>
diff --git a/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.client/acsmi.monitoring.client.generate.sh b/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.client/acsmi.monitoring.client.generate.sh
index 32dd954267fb39dfb7698460c445c96f33fe3596..0ef11bd1e2519349f4c6e6abf89d612b9321f17a 100644
--- a/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.client/acsmi.monitoring.client.generate.sh
+++ b/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.client/acsmi.monitoring.client.generate.sh
@@ -45,7 +45,7 @@ if !  $( java -version 2>&1 >/dev/null | grep -q "Runtime Environment" ) ; then
 	apt-get install -y default-jdk
 fi
 
-java -jar $CURRENT_DIR/swagger-codegen/modules/swagger-codegen-cli/target/swagger-codegen-cli.jar generate -i $WIN_ORIG_FILE -l jaxrs-cxf-client -o $WIN_TMP_DIR -c $WIN_ORIG_CONFIG_FILE
+java -jar $CURRENT_DIR\swaggerCodegenCli64\swagger-codegen-cli.jar generate -i $WIN_ORIG_FILE -l jaxrs-cxf-client -o $WIN_TMP_DIR -c $WIN_ORIG_CONFIG_FILE
 
 CHANGED=0
 
diff --git a/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.client/src/gen/java/eu/decideh2020/ACSmI/monitoring/client/api/ResourcemonitoringApi.java b/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.client/src/gen/java/eu/decideh2020/ACSmI/monitoring/client/api/ResourcemonitoringApi.java
index 0d9004e267d0d4f786e9c2e7b18f6e87ca24f8a5..56f6571c466633fba747f36288382829ef228b88 100644
--- a/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.client/src/gen/java/eu/decideh2020/ACSmI/monitoring/client/api/ResourcemonitoringApi.java
+++ b/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.client/src/gen/java/eu/decideh2020/ACSmI/monitoring/client/api/ResourcemonitoringApi.java
@@ -1,102 +1,102 @@
-package eu.decideh2020.ACSmI.monitoring.client.api;
-
-import eu.decideh2020.ACSmI.monitoring.client.model.Resourcemonitoring;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.List;
-import java.util.Map;
-import javax.ws.rs.*;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.MediaType;
-import org.apache.cxf.jaxrs.ext.multipart.*;
-
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiResponses;
-import io.swagger.annotations.ApiResponse;
-import io.swagger.jaxrs.PATCH;
-
-/**
- * Swagger Server
- *
- * <p>ACSmI monitoring API documentation.This API describes the methods to access the ACSmI monitoring functionalities
- *
- */
-@Path("/")
-@Api(value = "/", description = "")
-public interface ResourcemonitoringApi  {
-
-    /**
-     * createResourcemonitoring
-     *
-     * Creates a resourcemonitoring to be included in ACSmI monitoring
-     *
-     */
-    @POST
-    @Path("/api/resourcemonitoring")
-    @Consumes({ "resourcemonitoring/json" })
-    @Produces({ "*/*" })
-    @ApiOperation(value = "createResourcemonitoring", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "Resource monitoring Created", response = Resourcemonitoring.class),
-        @ApiResponse(code = 401, message = "Unauthorized"),
-        @ApiResponse(code = 403, message = "Forbidden"),
-        @ApiResponse(code = 404, message = "Not Found") })
-    public Resourcemonitoring createResourcemonitoringUsingPOST(Resourcemonitoring body);
-
-    /**
-     * deleteResourcemonitoring
-     *
-     * 
-     *
-     */
-    @DELETE
-    @Path("/api/resourcemonitoring/{resourceid}")
-    @Consumes({ "application/json" })
-    @Produces({ "*/*" })
-    @ApiOperation(value = "deleteResourcemonitoring", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "Resorcemonitoring deleted form the monitoring list"),
-        @ApiResponse(code = 204, message = "No Content"),
-        @ApiResponse(code = 401, message = "Unauthorized"),
-        @ApiResponse(code = 403, message = "Forbidden") })
-    public void deleteResourcemonitoringUsingDELETE(@PathParam("resourceid") String resourceid);
-
-    /**
-     * getResourcemonitoringstatus
-     *
-     * Gets the status wrt monitoring of a given resource
-     *
-     */
-    @GET
-    @Path("/api/resourcemonitoring/{resourceid}")
-    @Consumes({ "resourcemonitoring/json" })
-    @Produces({ "*/*" })
-    @ApiOperation(value = "getResourcemonitoringstatus", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "Specific resource monitoring is returned", response = Resourcemonitoring.class),
-        @ApiResponse(code = 401, message = "Unauthorized"),
-        @ApiResponse(code = 403, message = "Forbidden"),
-        @ApiResponse(code = 404, message = "Not Found") })
-    public Resourcemonitoring getResourcemonitoringUsingGET(@PathParam("resourceid") Integer resourceid);
-
-    /**
-     * updateResource
-     *
-     * Updates the monitoring status of a given resource
-     *
-     */
-    @PUT
-    @Path("/api/resourcemonitoring/{resourceid}")
-    @Consumes({ "resourcemonitoring/json" })
-    @Produces({ "*/*" })
-    @ApiOperation(value = "updateResource", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "Resource Status updated", response = Resourcemonitoring.class),
-        @ApiResponse(code = 401, message = "Unauthorized"),
-        @ApiResponse(code = 403, message = "Forbidden"),
-        @ApiResponse(code = 404, message = "Not Found") })
-    public Resourcemonitoring updateResourceUsingPUT(@PathParam("resourceid") String resourceid);
-}
-
+package eu.decideh2020.ACSmI.monitoring.client.api;
+
+import eu.decideh2020.ACSmI.monitoring.client.model.Resourcemonitoring;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.List;
+import java.util.Map;
+import javax.ws.rs.*;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.MediaType;
+import org.apache.cxf.jaxrs.ext.multipart.*;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponses;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.jaxrs.PATCH;
+
+/**
+ * Swagger Server
+ *
+ * <p>ACSmI monitoring API documentation.This API describes the methods to access the ACSmI monitoring functionalities
+ *
+ */
+@Path("/")
+@Api(value = "/", description = "")
+public interface ResourcemonitoringApi  {
+
+    /**
+     * createResourcemonitoring
+     *
+     * Creates a resourcemonitoring to be included in ACSmI monitoring
+     *
+     */
+    @POST
+    @Path("/api/resourcemonitoring")
+    @Consumes({ "resourcemonitoring/json" })
+    @Produces({ "*/*" })
+    @ApiOperation(value = "createResourcemonitoring", tags={  })
+    @ApiResponses(value = { 
+        @ApiResponse(code = 200, message = "Resource monitoring Created", response = Resourcemonitoring.class),
+        @ApiResponse(code = 401, message = "Unauthorized"),
+        @ApiResponse(code = 403, message = "Forbidden"),
+        @ApiResponse(code = 404, message = "Not Found") })
+    public Resourcemonitoring createResourcemonitoringUsingPOST(Resourcemonitoring body);
+
+    /**
+     * deleteResourcemonitoring
+     *
+     * 
+     *
+     */
+    @DELETE
+    @Path("/api/resourcemonitoring/{resourceid}")
+    @Consumes({ "application/json" })
+    @Produces({ "*/*" })
+    @ApiOperation(value = "deleteResourcemonitoring", tags={  })
+    @ApiResponses(value = { 
+        @ApiResponse(code = 200, message = "Resorcemonitoring deleted form the monitoring list"),
+        @ApiResponse(code = 204, message = "No Content"),
+        @ApiResponse(code = 401, message = "Unauthorized"),
+        @ApiResponse(code = 403, message = "Forbidden") })
+    public void deleteResourcemonitoringUsingDELETE(@PathParam("resourceid") String resourceid);
+
+    /**
+     * getResourcemonitoringstatus
+     *
+     * Gets the status wrt monitoring of a given resource
+     *
+     */
+    @GET
+    @Path("/api/resourcemonitoring/{resourceid}")
+    @Consumes({ "resourcemonitoring/json" })
+    @Produces({ "*/*" })
+    @ApiOperation(value = "getResourcemonitoringstatus", tags={  })
+    @ApiResponses(value = { 
+        @ApiResponse(code = 200, message = "Specific resource monitoring is returned", response = Resourcemonitoring.class),
+        @ApiResponse(code = 401, message = "Unauthorized"),
+        @ApiResponse(code = 403, message = "Forbidden"),
+        @ApiResponse(code = 404, message = "Not Found") })
+    public Resourcemonitoring getResourcemonitoringUsingGET(@PathParam("resourceid") Integer resourceid);
+
+    /**
+     * updateResource
+     *
+     * Updates the monitoring status of a given resource
+     *
+     */
+    @PUT
+    @Path("/api/resourcemonitoring/{resourceid}")
+    @Consumes({ "resourcemonitoring/json" })
+    @Produces({ "*/*" })
+    @ApiOperation(value = "updateResource", tags={  })
+    @ApiResponses(value = { 
+        @ApiResponse(code = 200, message = "Resource Status updated", response = Resourcemonitoring.class),
+        @ApiResponse(code = 401, message = "Unauthorized"),
+        @ApiResponse(code = 403, message = "Forbidden"),
+        @ApiResponse(code = 404, message = "Not Found") })
+    public Resourcemonitoring updateResourceUsingPUT(@PathParam("resourceid") String resourceid);
+}
+
diff --git a/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/pom.xml b/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/pom.xml
index 4c4179ba49e7b0779476de0cbbb39f3ee893eded..dd7cfe0144403a7e0b1324173d0a6a4e786eb17d 100644
--- a/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/pom.xml
+++ b/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/pom.xml
@@ -92,6 +92,12 @@
         </executions>
       </plugin>
     </plugins>
+    <!-- Add resources for library of location -->
+    <resources>
+     <resource>
+       <directory>resources</directory>
+     </resource>
+   </resources>
   </build>
   <dependencies>
     <dependency>
@@ -172,14 +178,14 @@
 	<dependency>
    		<groupId>eu.DECIDEh2020</groupId>
     	<artifactId>app-controller</artifactId>
-    	<version>0.0.15-SNAPSHOT</version>
+    	<version>0.0.16-SNAPSHOT</version>
 	</dependency>
 	
 	<!-- MCSLA Core -->
 	<dependency>
    		<groupId>eu.DECIDEh2020</groupId>
     	<artifactId>mcsla-core</artifactId>
-   		<version>0.0.1-SNAPSHOT</version>
+   		<version>0.0.3-SNAPSHOT</version>
 	</dependency>
 	
 	<!-- Acsmi discovery client -->
@@ -199,7 +205,7 @@
 <!--  ADAPT Violationhandler client-->
 	<dependency>
 		<groupId>eu.decideh2020</groupId>
-		<artifactId>adapt.violationhandler.client</artifactId>
+		<artifactId>violationhandler.client</artifactId>
 		<version>1.0.0</version>
     </dependency>
 	
@@ -210,8 +216,20 @@
 	<version>0.0.1-SNAPSHOT</version>
 	</dependency>
 
-	
+	<!--  Vault library -->
+	<dependency>
+        <groupId>org.springframework.vault</groupId>
+        <artifactId>spring-vault-core</artifactId>
+        <version>2.0.1.RELEASE</version>
+    </dependency>
+   		 <!-- InfluxDB library -->
+	<dependency>
+          <groupId>org.influxdb</groupId>
+          <artifactId>influxdb-java</artifactId>
+            <version>2.8</version>
+    </dependency>
   </dependencies>
+  
   <repositories>
     <repository>
       <id>sonatype-snapshots</id>
diff --git a/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/ApiApiServiceImpl.java b/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/ApiApiServiceImpl.java
index 9fa66890561f2c255b0b573eafbb8b7f7fe46939..01ea1b569f117f451bc36fd63124a8b6569ec29e 100644
--- a/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/ApiApiServiceImpl.java
+++ b/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/ApiApiServiceImpl.java
@@ -33,13 +33,20 @@ package eu.decideh2020.acsmi.monitoring.server.api.impl;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Properties;
+import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.net.URI;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 
 import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
 import org.omg.CORBA.VM_ABSTRACT;
+import org.springframework.vault.authentication.TokenAuthentication;
+import org.springframework.vault.client.VaultEndpoint;
+import org.springframework.vault.core.VaultTemplate;
+import org.springframework.vault.support.VaultResponse;
 
 import eu.DECIDEh2020.appManager.AppManager;
 import eu.DECIDEh2020.appManager.exceptions.AppManagerException;
@@ -58,28 +65,79 @@ import javax.validation.constraints.*;
 public class ApiApiServiceImpl extends ApiApiService {
 	//Creating a list for the application monitoring objects
 	ArrayList<Resourcemonitoring> ResourceMonitoringlist = new ArrayList<Resourcemonitoring>();
-	
+	public static String AppDesUri;
+	public static String path;
+	public static String pathbar;
     @Override
     public Response createResourcemonitoringUsingPOST(Resourcemonitoring resourcemonitoring, SecurityContext securityContext) throws NotFoundException {
-        ResourceMonitoringlist.add(resourcemonitoring);
+    	ResourceMonitoringlist.add(resourcemonitoring);
     	//resourcemonitoring.setStatus("Monitored");
     	// Assign a number to the resourceid the appdescinstance//
-          // assign where to save the appdesc in local
+    		// assign where to save the appdesc in local
+    	AppDesUri= resourcemonitoring.getAppdescuri();
+    	try {
+			final String osName = System.getProperty("os.name");
+			path = null;
+			if (osName.matches("Win.*")) {
+				path = "C:\\D\\properties\\2017-Decide\\acsmimon.properties";
+				pathbar = "\\";
+			} else {
+				path = "/etc/decide/acsmimon.properties";
+				pathbar = "/";
+			}
     	String localAppDesc = "";
 		localAppDesc = System.getProperty("java.io.tmpdir");
-		localAppDesc = localAppDesc+"\\"+System.currentTimeMillis();
+		localAppDesc = localAppDesc+pathbar+System.currentTimeMillis();
+		System.out.println ("**********!" + localAppDesc);
+		System.out.println ("**********!");
+		System.out.println ("**********!");
+		System.out.println ("**********!");
 		Path localappdescpath=Paths.get(localAppDesc);
 		// Repository where the app description is... When integrated it will be resourcemonitoring.appdescuri
 		//Local DECIDE.json
-		String gitRef="https://git.code.tecnalia.com/XXXX.git";
-		// Introduce the user and password of the repository where the DECIDE.json is
-		String gitusername="XXX";
-		String gitpassword="XXX";
+		String gitusername =null;
+		String gittoken =null;	
+		Properties props= new Properties();
+		props.load(new FileInputStream(path));
+		String gitRef= props.getProperty("gitref");
+		System.out.println ("**********!" + gitRef);
+		if (props.getProperty("credentialsmode").equals ("environment")){
+			gitusername=System.getenv("GIT_RO_USER_NAME");
+			gittoken=System.getenv("GIT_RO_API_KEY");
+		} else {
+			//vault call
+//			try {
+//	    		//	    		
+//	    		// Create endpoint
+				//props.load(new FileInputStream(path));
+				//String vault= props.getProperty("vault");
+//	    		final VaultEndpoint endpoint = VaultEndpoint.from(new URI("http://85.91.40.245:8200"));
+//	    		
+//	    		// Create template
+//	            final VaultTemplate vaultTemplate = new VaultTemplate(endpoint, new TokenAuthentication("s.ry9XFWOO7BLZK4XhW4W1m1eg."));
+//	            
+//	            // call Vault
+//	            VaultResponse response = vaultTemplate.read("secret/testuser/sockshop");
+			//  String gittoken token= response.getData().get("key");
+//	            System.out.println(response.getData().get("key"));
+//	            
+//	           	//} catch (Exception e) {
+//	    		e.printStackTrace();
+//	    	}
+		}
+		
+		
+		//System.out.println("**********!" + gitusername);
+		//System.out.println("**********!" + gittoken);
 		//open appManager
 		AppManager appManager = null;
 		try {
-			appManager = AppManager.open(gitRef, gitusername, gitpassword, localappdescpath);
-			appManager.setDescriptor("acsmimonitoring/DECIDE.json");
+			if (!gitusername.isEmpty() && !gittoken.isEmpty()) {
+				appManager = AppManager.open(gitRef, gitusername, gittoken, localappdescpath);
+				//appManager.setDescriptor("acsmimonitoring/DECIDE.json");
+			} else 
+				System.out.println("There is no user and password");
+			
 		} catch (AppManagerException e) {
 			// TODO Auto-generated catch block
 			e.printStackTrace();
@@ -95,23 +153,27 @@ public class ApiApiServiceImpl extends ApiApiService {
 			// TODO Auto-generated catch block
 			e.printStackTrace();
 		}
+		
+		// If appDescrption= null FUERA!!!!
 		// identify this resourcemonitoring with an AppIsntance
 		String AppInstance = appDescription.getApplicationInstanceId();
 		resourcemonitoring.setResourceid(AppInstance);
 		resourcemonitoring.setStatus("Monitored");
 		ResourceMonitoringlist.add(resourcemonitoring);
 		// Call to configure telegraf
-		monitoringconfiguration currentconfiguration= new monitoringconfiguration ();
+		Monitoringconfiguration currentconfiguration= new Monitoringconfiguration ();
 		currentconfiguration.configuretelegraf(appDescription);
 		
 		System.out.println("\n\n");
-		for (MonitoredVm vm : monitoringconfiguration.listcsip) {
+		for (MonitoredVm vm : Monitoringconfiguration.listcsip) {
 			System.out.println(vm.getCsId());
 			System.out.println(vm.getdockerHostPublicIP());
 			System.out.println(vm.getAppinstanceId());
 		}
 		System.out.println("\n\n");
-
+		} catch (Exception e) {
+			e.printStackTrace();
+			}
 		return Response.ok(resourcemonitoring).build();
     }
     @Override
@@ -120,7 +182,7 @@ public class ApiApiServiceImpl extends ApiApiService {
     	for (int i = 0;  i<ResourceMonitoringlist.size(); i++ ){
     		if (ResourceMonitoringlist.get(i).getResourceid().equals(resourceid)){
     			ResourceMonitoringlist.get(i).setStatus("Stopped");
-    			stopresourcemonitoring stopcurrentmonitoring = new stopresourcemonitoring();
+    			Stopresourcemonitoring stopcurrentmonitoring = new Stopresourcemonitoring();
     			stopcurrentmonitoring.stop (resourceid);    		}    		
     	}
     	 
diff --git a/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/CsSlaAssessment.java b/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/CsSlaAssessment.java
index e9220474bcf2f3cf89a3dcb882f6dfa301a96a8d..24efac6ecf71ef581d85e9c6fd02d15da9e4bd0b 100644
--- a/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/CsSlaAssessment.java
+++ b/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/CsSlaAssessment.java
@@ -33,6 +33,8 @@ OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 package eu.decideh2020.acsmi.monitoring.server.api.impl;
 
 import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.nio.file.Path;
 import java.nio.file.Paths;
@@ -43,7 +45,11 @@ import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
+import java.util.Properties;
 import java.util.TimerTask;
+
+import javax.ws.rs.core.MediaType;
+
 import java.lang.Object;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
@@ -72,128 +78,173 @@ import eu.decideh2020.ACSmI.discovery.backend.client.api.ServiceIncidenceResourc
 import eu.decideh2020.ACSmI.discovery.backend.client.model.Service;
 import eu.decideh2020.ACSmI.discovery.backend.client.model.ServiceIncidence;
 import eu.decideh2020.ACSmI.discovery.backend.client.model.ServiceNFRInfoVO;
-import eu.decideh2020.adapt.violationhandler.client.api.ViolationsApi;
-import eu.decideh2020.adapt.violationhandler.client.model.Violation;
+import eu.decideh2020.violationhandler.client.api.ViolationsApi;
+import eu.decideh2020.violationhandler.client.model.Violation;
 
 public class CsSlaAssessment extends TimerTask {
 //AppManager appManager;
 	//AppDescription appDesription;
 	ServiceResourceApi apiacsmi;
 	ViolationsApi apivh;
+	static List<PointPing> pingresultList = new ArrayList<PointPing>();
+	static List<PointMem> memresultList = new ArrayList<PointMem>();
+	static List<PointDisk> diskresultList = new ArrayList<PointDisk>();
+	static List<PointCpu> cpuresultList = new ArrayList<PointCpu>();
 	@Override
 	public void run() {
 		// TODO Auto-generated method stub
 		csnfrassessment();
 	}        	
-
 	
 	void csnfrassessment () {
-     
-        for (MonitoredVm vm: monitoringconfiguration.listcsip) {
+		InfluxDBinformation influxdb = new InfluxDBinformation();
+		//connect to influxdb
+		int connect_result= influxdb.connect();
+		if (connect_result == 0) {
+			// Read information from ping
+			pingresultList=influxdb.readPing();
+			// Read information from mem
+			memresultList= influxdb.readMem();
+			// Read information from disk
+			diskresultList= influxdb.readDisk();
+			// Read information from cpu
+			cpuresultList= influxdb.readCpu();
+		}
+		
+		for (MonitoredVm vm: Monitoringconfiguration.listcsip) {
         	List <Long> csid = new ArrayList();
         	csid.add(Long.parseLong(vm.getCsId()));
-        	String locationerror;
-        	String availabilityerror;
-        	String performanceerror;
-        	// to open connection with ACSmI client
-    		ServiceIncidenceResourceApi apiacsmi;
-			JacksonJsonProvider provider = new JacksonJsonProvider();
-			List providers = new ArrayList();
-			providers.add(provider);
-			//the integration environment where the ACSmI registry is deployed
-			apiacsmi = JAXRSClientFactory.create("http://85.91.40.245:8087/acsmiservices", ServiceIncidenceResourceApi.class, providers);
-			org.apache.cxf.jaxrs.client.Client clientacsmi = WebClient.client(apiacsmi);
-	        ClientConfiguration configacsmi = WebClient.getConfig(clientacsmi); 
-	        // end of the instructions to connect}
-	        
-	     // to open connection with ADAPT VH client
-    		JacksonJsonProvider providervh = new JacksonJsonProvider();
-    		List providersvh = new ArrayList();
-			providersvh.add(providervh);
-			//the integration environment where the Violation handler is deployed
-			apivh = JAXRSClientFactory.create("http://85.91.40.245:8095/violationhandler", ViolationsApi.class, providersvh);
-			org.apache.cxf.jaxrs.client.Client clientvh = WebClient.client(apivh);
-	        ClientConfiguration configvh = WebClient.getConfig(clientvh); 
-	        // end of the instructions to connect}
+        	String locationerror="";
+        	String availabilityerror ="";
+        	String performanceerror="";
+        	String costerror="";
+        	String legallevelerror="";
 	        // Create a variable for each NFR violation 
-        	NfrLocation checklocation = new NfrLocation ();
-        	locationerror=checklocation.CheckLocation(csid, vm);
-        	NfrAvailability checkavailability = new NfrAvailability();
-        	availabilityerror= checkavailability.CheckAvailability (vm,vm.getAppdesc());
-        	NfrPerformance checkperformance = new NfrPerformance();
-        	performanceerror= checkperformance.CheckPerformance (vm,vm.getAppdesc());
+        	if(vm.getlocation()==1) {
+        			NfrLocation checklocation = new NfrLocation ();
+        			locationerror=checklocation.CheckLocation(csid, vm);
+        	} else {
+        		System.out.println ("**********! Location is not monitored");
+        		System.out.println ("**********!");
+			     	}
+        	if(vm.getavailability()==1) {
+    			NfrAvailability checkavailability = new NfrAvailability();
+    			availabilityerror= checkavailability.CheckAvailability (vm,vm.getAppdesc());
+        		} else {
+        			System.out.println ("**********! Availability is not monitored");
+        			System.out.println ("**********!");
+		     	}
+        	if(vm.getperformance()==1) {
+        		NfrVMPerformance checkperformance = new NfrVMPerformance();
+            	performanceerror= checkperformance.CheckPerformanceVM (vm);
+        		} else {
+        			System.out.println ("**********! Performance is not monitored");
+        			System.out.println ("**********!");
+		     	}
+//        	Monitor COST
+//        	if(vm.getcost()==1) {
+//        		// TODO Monitor COST NFR
+//        		} else {
+//        			System.out.println ("**********! Cost is not monitored");
+//        			System.out.println ("**********!");
+//		     	}
+//        	Monitor LegalLevel
+//        	if(vm.getlegallevel()==1) {
+//        		// TODO Monitor Legal level NFR
+//        		} else {
+//        			System.out.println ("**********! Legal level is not monitored");
+//        			System.out.println ("**********!");
+//		     	}
         	System.out.println (" **** Returned values \n \n   : " + new Date());
-        	System.out.println(locationerror);
-        	System.out.println(availabilityerror);
-        	System.out.println(performanceerror);
+        	System.out.println (" ****  \n \n   : " + vm.getCsId());
+        	System.out.println(" **** \n \n   : " + locationerror);
+        	System.out.println(" ****  \n \n   : "+ availabilityerror);
+        	System.out.println(" ****  \n \n   : " + performanceerror);
+	       	// to open connection with ACSmI client
+        	ServiceIncidenceResourceApi apiacsmi;
+        	JacksonJsonProvider provider = new JacksonJsonProvider();
+        	List providers = new ArrayList();
+        	providers.add(provider);
+        	//the integration environment where the ACSmI registry is deployed
+        	Properties props= new Properties();
+        	try {
+        		props.load(new FileInputStream(ApiApiServiceImpl.path));
+        	} catch (FileNotFoundException e) {
+        		// TODO Auto-generated catch block
+        		e.printStackTrace();
+        	} catch (IOException e) {
+        		// TODO Auto-generated catch block
+        		e.printStackTrace();
+        	}
+        	String acsmidiscovery= props.getProperty("acsmidiscovery");
+        	apiacsmi = JAXRSClientFactory.create(acsmidiscovery, ServiceIncidenceResourceApi.class, providers);
+        	org.apache.cxf.jaxrs.client.Client clientacsmi = WebClient.client(apiacsmi);
+        	ClientConfiguration configacsmi = WebClient.getConfig(clientacsmi); 
+        	// end of the instructions to connect
+        	// to open connection with ADAPT VH client
+        	JacksonJsonProvider providervh = new JacksonJsonProvider();
+        	List providersvh = new ArrayList();
+        	providersvh.add(providervh);
+        	//the integration environment where the Violation handler is deployed
+        	String violationhandler= props.getProperty("violationhandler");
+        	apivh = JAXRSClientFactory.create(violationhandler, ViolationsApi.class, providersvh);
+        	org.apache.cxf.jaxrs.client.Client clientvh = WebClient.client(apivh).type(MediaType.APPLICATION_JSON);
+        	ClientConfiguration configvh = WebClient.getConfig(clientvh); 
+        	// end of the instructions to connect}
             // IF NFR Location is violated
         	if (locationerror.contains ("Error")) {
         		 // Call Post for creating the incidence for ACSmi registry
         		ServiceIncidence locationincidence = new ServiceIncidence();
     	        locationincidence.setDetail(locationerror);
-    	        // tests for the conversion of the timestamp
-    	        //SimpleDateFormat sdf = new SimpleDateFormat("YYYY-mm-dd'T'HH:MM:ssZ");
-    	       // System.out.println("****** FECHA : " + sdf.format(new Date()));
-    	        // locationincidence.setTimestamp (new Date ().getTime());
-    	        locationincidence.setTimestamp("2018-11-26T12:15:00.898Z");
+    	        locationincidence.setTimestamp (new Date ().getTime());
     	        locationincidence.setServiceid(Long.parseLong(vm.getCsId()));
     	      	apiacsmi.createServiceIncidenceUsingPOST(locationincidence);
-    	      	System.out.println(" ***** Location violation to ACSmI ***" + locationincidence);
-    	        // Call VH for creating the violation in the VH
-    	        //System.out.println(" ***** Empezamos a generar la violacion al VH  Location ***");
-    	        Violation locationviolation = new Violation();
+    	      	Violation locationviolation = new Violation();
     	        locationviolation.setNfr("Location");
+    	        locationviolation.setAppDescUri(ApiApiServiceImpl.AppDesUri);
+    	        locationviolation.setType(1);
     	        locationviolation.setServiceId(vm.getCsId());
     	        locationviolation.timestamp(new Date ().getTime());
-    	        //System.out.println(" ***** terminamos de generar la violacion al VH  Location 1.... ***" + locationviolation);
-    	        // Call to ADAPT VH
+    	        locationviolation.email("marisa.escalante@tecnalia.com");
     	        //apivh.reportViolation(locationviolation);
-    	        System.out.println(" ***** Location violation to VH ***" + locationviolation);    	        
     	     }
         	// IF NFR Availability is violated
         	if (availabilityerror.contains ("Error")) {        		
        		    // Call Post for creating the incidence  in ACSmI
         		ServiceIncidence availabilityincidence = new ServiceIncidence();
     	        availabilityincidence.setDetail(availabilityerror);    	       
-    	        // tests for the conversion of the timestamp
-    	        //SimpleDateFormat sdf = new SimpleDateFormat("YYYY-mm-dd'T'HH:MM:ssZ");
-    	       // System.out.println("****** FECHA : " + sdf.format(new Date()));
-    	        // locationincidence.setTimestamp (new Date ().getTime());
-    	        availabilityincidence.setTimestamp("2018-11-25T12:15:00.898Z");
+    	        availabilityincidence.setTimestamp (new Date ().getTime());
     	        availabilityincidence.setServiceid(Long.parseLong(vm.getCsId()));
     	        apiacsmi.createServiceIncidenceUsingPOST(availabilityincidence); 
-    	        System.out.println(" ***** Availability violation to ACSmI ***" + availabilityincidence);
-    	     // Call VH for creating the violation in the VH
+    	      // Call VH for creating the violation in the VH
     	        Violation availabilityviolation = new Violation();
     	        availabilityviolation.setNfr("Availabilty");
+    	        availabilityviolation.setAppDescUri(ApiApiServiceImpl.AppDesUri);
+    	        availabilityviolation.setType(1);
     	        availabilityviolation.setServiceId(vm.getCsId());
     	        availabilityviolation.timestamp(new Date ().getTime());
-    	        // Call to ADAPT VH
-    	        //apivh.reportViolation(availabilityviolation);
-    	        System.out.println(" ***** Availability violation to VH ***" + availabilityviolation);
-    	        }
+    	        availabilityviolation.email("marisa.escalante@tecnalia.com");
+    	       // apivh.reportViolation(availabilityviolation);
+    	         }
         	// IF NFR performance is violated
         	if (performanceerror.contains ("Error")) { 
        		    // Call Post for creating the incidence in ACSmi Registry
         		ServiceIncidence performanceincidence = new ServiceIncidence();
     	        performanceincidence.setDetail(availabilityerror);
-    	        // tests for the conversion of the timestamp
-    	        //SimpleDateFormat sdf = new SimpleDateFormat("YYYY-mm-dd'T'HH:MM:ssZ");
-    	       // System.out.println("****** FECHA : " + sdf.format(new Date()));
-    	        // locationincidence.setTimestamp (new Date ().getTime());
-    	        performanceincidence.setTimestamp("2018-11-24T12:15:00.898Z");
-    	        performanceincidence.setServiceid(Long.parseLong(vm.getCsId()));    	       
+      	        performanceincidence.setTimestamp (new Date ().getTime());
+    	       	performanceincidence.setServiceid(Long.parseLong(vm.getCsId()));    	       
     	        apiacsmi.createServiceIncidenceUsingPOST(performanceincidence);
-    	        System.out.println(" ***** Performance violation to ACSmI ***" + performanceincidence);
     	        // Call VH for creating the violation in the VH
     	        Violation performanceviolation = new Violation();
     	        performanceviolation.setNfr("Performance");
+    	        performanceviolation.setAppDescUri(ApiApiServiceImpl.AppDesUri);
+    	        performanceviolation.setType(1);
     	        performanceviolation.setServiceId(vm.getCsId());
     	        performanceviolation.timestamp(new Date ().getTime());
+    	        performanceviolation.email("marisa.escalante@tecnalia.com");
     	        // Call to ADAPT VH
-    	        // apivh.reportViolation(performanceviolation);
-    	        System.out.println(" ***** Performance violation to VH ***" + performanceviolation);
-        	}	
+    	        //apivh.reportViolation(performanceviolation);
+    	     }	
         }        			
       }
 }
diff --git a/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/InfluxDBinformation.java b/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/InfluxDBinformation.java
new file mode 100644
index 0000000000000000000000000000000000000000..5d6d72db05109ac66470e82844d6e85ae806fe3a
--- /dev/null
+++ b/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/InfluxDBinformation.java
@@ -0,0 +1,165 @@
+package eu.decideh2020.acsmi.monitoring.server.api.impl;
+
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Properties;
+import java.util.logging.Logger;
+
+import org.influxdb.InfluxDB;
+import org.influxdb.dto.Pong;
+import org.influxdb.dto.Query;
+import org.influxdb.dto.QueryResult;
+import org.influxdb.impl.InfluxDBResultMapper;
+import org.influxdb.InfluxDB;
+import org.influxdb.InfluxDBFactory;
+
+public class InfluxDBinformation {
+	String dbURL;
+	String dbUserName;
+	String dbPassword;
+	String dbName;
+	InfluxDB influxDB;
+	String result = null;
+	
+	
+	public InfluxDBinformation () {
+		Properties props= new Properties();
+		try {
+			props.load(new FileInputStream(ApiApiServiceImpl.path));
+			dbURL= props.getProperty("dbURL");
+			dbUserName= props.getProperty("dbUserName");
+			dbPassword= props.getProperty("dbPassword");
+			dbName= props.getProperty("dbName");
+		} catch (FileNotFoundException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+			
+	}
+
+//		/** 
+//		 * Test function:
+//		 * -connects to the InfluxDB
+//		 * -reads from the InfluxDB
+//		 * -writes to the InfluxDB 
+//		 */
+		
+
+//		/** 
+//		 * CONNECTS to the InfluxDB 
+//		 */
+		public int connect () { 
+//			System.out.println("****base de datos" + dbURL);
+//			System.out.println("\n ***name base de datos" + dbUserName);
+//			System.out.println("\n ***password base de datos" + dbPassword);
+			influxDB = InfluxDBFactory.connect(dbURL, dbUserName, dbPassword);
+			Logger log = Logger.getGlobal();
+			// Set login level (BASIC, FULL, HEADERS, or NONE)
+			influxDB.setLogLevel(InfluxDB.LogLevel.FULL);
+			// PING to test (???? which port?) Comprobar que esta abierta la conexion a la BD
+			Pong response = influxDB.ping();
+			if (response.getVersion().equalsIgnoreCase("unknown")) {
+				System.out.println ("Error pinging InfluxDB server "+ dbName);
+				log.info("Error pinging InfluxDB server "+ dbName);
+				result += "ERROR: Not connected \n";
+				return -1;
+			}
+			System.out.println ("OK pinging InfluxDB server "+ dbName);
+			log.info("OK pinging InfluxDB server "+ dbName);
+			result += "OK: Connected \n";
+			return 0; 
+
+		}
+		public List<PointPing> readPing () {
+
+			//influxDB.setDatabase(dbName); //Not needed, dbName included in query
+
+			// Get last 4 measurements (assumption: 4 servers, we will have one measurement for each...improve this)  
+			//Query query = new Query("SELECT * FROM ping WHERE time > now() - 1m ORDER BY time DESC LIMIT 4", dbName);
+			Query query = new Query("SELECT result_code, url FROM ping  WHERE time > now() - 10h ORDER BY time DESC LIMIT 10", dbName);
+			//Query query = new Query("SELECT result_code, url FROM ping", dbName);
+			QueryResult queryResult = influxDB.query(query);			 
+			InfluxDBResultMapper resultMapper = new InfluxDBResultMapper();
+			List<PointPing> PointList = resultMapper.toPOJO(queryResult, PointPing.class);
+			if (PointList.size() == 0) {
+				System.out.println ("ERROR: Query returned NOTHING " + "-measurements: " + PointList.size() + "- " + dbName);
+				//return;
+			}
+			else {
+				System.out.println ("OK: Read from InfluxDB" + "-PING measurements: " + PointList.size() + "- " + dbName);
+				result += "OK: Read from InfluxDB" + "-measurements: " + PointList.size() + "- " + dbName;
+			}
+
+			return PointList;
+		}
+		public List<PointMem> readMem () {
+
+			//influxDB.setDatabase(dbName); //Not needed, dbName included in query
+
+			// Get last 4 measurements (assumption: 4 servers, we will have one measurement for each...improve this)  
+			//Query query = new Query("SELECT * FROM ping WHERE time > now() - 1m ORDER BY time DESC LIMIT 4", dbName);
+			Query query = new Query("SELECT host, available, used, available_percent, used_percent FROM mem  WHERE time > now() - 10h ORDER BY time DESC LIMIT 10", dbName);
+			//Query query = new Query("SELECT result_code, url FROM ping", dbName);
+			QueryResult queryResult = influxDB.query(query);			 
+			InfluxDBResultMapper resultMapper = new InfluxDBResultMapper();
+			List<PointMem> PointList = resultMapper.toPOJO(queryResult, PointMem.class);
+			if (PointList.size() == 0) {
+				System.out.println ("ERROR: Query returned NOTHING " + "-measurements: " + PointList.size() + "- " + dbName);
+				//return;
+			}
+			else {
+				System.out.println ("OK: Read from InfluxDB" + "-mem measurements: " + PointList.size() + "- " + dbName);
+				result += "OK: Read from InfluxDB" + "-measurements: " + PointList.size() + "- " + dbName;
+			}
+
+			return PointList;
+		}
+		public List<PointDisk> readDisk () {
+
+			//influxDB.setDatabase(dbName); //Not needed, dbName included in query
+
+			// Get last 4 measurements (assumption: 4 servers, we will have one measurement for each...improve this)  
+			//Query query = new Query("SELECT * FROM ping WHERE time > now() - 1m ORDER BY time DESC LIMIT 4", dbName);
+			Query query = new Query("SELECT host, total, free, available_percent  FROM disk  WHERE time > now() - 10h ORDER BY time DESC LIMIT 10", dbName);
+			QueryResult queryResult = influxDB.query(query);			 
+			InfluxDBResultMapper resultMapper = new InfluxDBResultMapper();
+			List<PointDisk> PointList = resultMapper.toPOJO(queryResult, PointDisk.class);
+			if (PointList.size() == 0) {
+				System.out.println ("ERROR: Query returned NOTHING " + "-measurements: " + PointList.size() + "- " + dbName);
+				//return;
+			}
+			else {
+				System.out.println ("OK: Read from InfluxDB" + "-Disk measurements: " + PointList.size() + "- " + dbName);
+				result += "OK: Read from InfluxDB" + "-measurements: " + PointList.size() + "- " + dbName;
+			}
+
+			return PointList;
+		}
+		public List<PointCpu> readCpu() {
+
+			//influxDB.setDatabase(dbName); //Not needed, dbName included in query
+
+			// Get last 4 measurements (assumption: 4 servers, we will have one measurement for each...improve this)  
+			//Query query = new Query("SELECT * FROM ping WHERE time > now() - 1m ORDER BY time DESC LIMIT 4", dbName);
+			Query query = new Query("SELECT host, usage_user, usage_system FROM cpu  WHERE time > now() - 10h ORDER BY time DESC LIMIT 10", dbName);
+			QueryResult queryResult = influxDB.query(query);			 
+			InfluxDBResultMapper resultMapper = new InfluxDBResultMapper();
+			List<PointCpu> PointList = resultMapper.toPOJO(queryResult, PointCpu.class);
+			if (PointList.size() == 0) {
+				System.out.println ("ERROR: Query returned NOTHING " + "-measurements: " + PointList.size() + "- " + dbName);
+				//return;
+			}
+			else {
+				System.out.println ("OK: Read from InfluxDB" + "-CPU measurements: " + PointList.size() + "- " + dbName);
+				result += "OK: Read from InfluxDB" + "-measurements: " + PointList.size() + "- " + dbName;
+			}
+
+			return PointList;
+		}
+}
diff --git a/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/MonitoredVm.java b/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/MonitoredVm.java
index 09c6462ecc2e6aedb5b2ad80c57010edeaf8542a..a8ec6fb62027fe971c0544881104a9d3eb269344 100644
--- a/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/MonitoredVm.java
+++ b/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/MonitoredVm.java
@@ -38,6 +38,11 @@ public class MonitoredVm {
 		String csId;
 		String dockerhostpublicIP;
 		String appinstanceId;
+		int performance;
+		int availability;
+		int location;
+		int legallevel;
+		int cost;
 		AppDescription appdesc;
 		
 	public void setCsId(String csId) {
@@ -56,7 +61,37 @@ public class MonitoredVm {
         this.appinstanceId = appinstanceId;
     }
 	public String getAppinstanceId() {
-    return appinstanceId;
+		return appinstanceId;
+	}
+	public void setperformance (int performance) {
+		this.performance = performance;
+	}
+	public int getperformance() {
+		return performance;
+	}
+	public void setavailability (int availability) {
+		this.availability = availability;
+	}
+	public int getavailability() {
+		return availability ;
+	}
+	public void setlocation (int location) {
+		this.location = location;
+	}
+	public int getlocation() {
+		return location ;
+	}
+	public void setlegallevel (int legallevel) {
+		this.legallevel = legallevel;
+	}
+	public int getlegallevel() {
+		return legallevel ;
+	}
+	public void setcost (int cost) {
+		this.cost = cost;
+	}
+	public int getcost() {
+		return cost ;
 	}
 	public void setAppdesc (AppDescription appdesc) {
 		this.appdesc = appdesc;
diff --git a/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/NfrAvailability.java b/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/NfrAvailability.java
index b1d2d634ba29e9ed0a09abfe2726d24222002b38..270fcd036b8e6b5099729d9937942571cf7cebed 100644
--- a/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/NfrAvailability.java
+++ b/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/NfrAvailability.java
@@ -34,7 +34,9 @@ package eu.decideh2020.acsmi.monitoring.server.api.impl;
 
 import java.io.File;
 import java.io.IOException;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -59,12 +61,28 @@ public class NfrAvailability {
 		String avalue = null;
 		String csidvalue = vm.getCsId();
     	String csipvalue = vm.getdockerHostPublicIP();
+    	Long timestartmonitoring= new Date ().getTime();
+    	//InfluxDBinformation influxdb = new InfluxDBinformation();
+    	for (PointPing pping : CsSlaAssessment.pingresultList)
+    		{
+    		if (pping.getUrl().equals(vm.getdockerHostPublicIP())){
+    			//check if the  pping.getResult_code()==1
+    			//String date= new SimpleDateFormat("MM/dd/yyyy").format(pping.getTime());
+    			System.out.println("**********\n date ******" + pping.getTime());
+    			    			System.out.println("**********\n url influxdb ******" + pping.getUrl());
+    			System.out.println("**********\n url appdescription ******" + vm.getdockerHostPublicIP());
+    			System.out.println("**********\n code_result ******" + pping.getResult_code());
+    			
+    		}
+    		}
     	//System.out.println("*****CSID ********" + csidvalue);
     	MetricsContext context = MetricsContext.create(appdescription);
     	//System.out.println("****Metrics context created ********" + context);
     	Map<String, ServiceObjectiveMetrics> metrics = context.getCsMetrics(csidvalue);
-    	ServiceObjectiveMetrics availabilityMetrics= metrics.get("Availability");    				
-    // Create metrics untill we have InfluxDB
+    	ServiceObjectiveMetrics availabilityMetrics= metrics.get("Availability");    
+    	
+    	System.out.println (" ***Availabilty metrics :" + availabilityMetrics );
+    // Create metrics until we have InfluxDB
     	long Monitoreduptimebegin=1;
     	Map<String, List<Long>> cloudserviceResults = new HashMap<>();
 		//for (int indice=0;indice<4; indice++) {
@@ -79,16 +97,21 @@ public class NfrAvailability {
 		MonitoredValuesCs.add(Monitoredauptimeagainms);
 		Monitoreduptimebegin=Monitoredauptimeagainms;
 		//Add the monitored values to a Hashmap
-		cloudserviceResults.put(vm.getCsId(),MonitoredValuesCs);
+		//cloudserviceResults.put(vm.getCsId(),MonitoredValuesCs);
+		
+		//System.out.println (" ***Cloud service results :" + cloudserviceResults);
 		String url = vm.getdockerHostPublicIP();
 					//		}
 		//Assess the monitored values against the MCSLA and write it in the InfluxDB
-		EvaluationResult<Double> evaluationresult = availabilityMetrics.evaluate(cloudserviceResults);
-		System.out.println ("result Availability: "+evaluationresult.getMeasurementResultValue());
+		//EvaluationResult<Double> evaluationresult = availabilityMetrics.evaluate(cloudserviceResults);
+		EvaluationResult<Double> evaluationresult = availabilityMetrics.evaluate(MonitoredValuesCs);
+		System.out.println ("\n\n result Availability: "+ evaluationresult.getMeasurementResultValue());
+		System.out.println ("\n\n result Availability *****: "+ evaluationresult.isError());
+		System.out.println ("\n\n result Availability *****: "+ evaluationresult.isConditionMet());
 		if (!evaluationresult.isError() && !evaluationresult.isConditionMet()) {
 			avalue= "Error in availability";
-			System.out.println ("*****Violation occurred****" + avalue);
-			System.out.println("Measured value:" + evaluationresult.getMeasurementResultValue());
+			System.out.println ("\n\n*****Violation occurred****" + avalue);
+			System.out.println("\n\nMeasured value:" + evaluationresult.getMeasurementResultValue());
 			return avalue;
     				}
 		else {
diff --git a/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/NfrCost.java b/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/NfrCost.java
new file mode 100644
index 0000000000000000000000000000000000000000..aa58d5a225f5204f7a9557dcdbd1f38a214f1fef
--- /dev/null
+++ b/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/NfrCost.java
@@ -0,0 +1,5 @@
+package eu.decideh2020.acsmi.monitoring.server.api.impl;
+
+public class NfrCost {
+
+}
diff --git a/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/NfrLocation.java b/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/NfrLocation.java
index 0167e9c58760d0a3b2efbef82393c4e5fd1f03ee..776030dc5f076bc8a80dbc17c374957354de2afd 100644
--- a/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/NfrLocation.java
+++ b/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/NfrLocation.java
@@ -32,11 +32,15 @@ OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 package eu.decideh2020.acsmi.monitoring.server.api.impl;
 
 import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 import java.io.IOException;
+import java.io.InputStream;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Properties;
 
 import org.apache.cxf.jaxrs.client.ClientConfiguration;
 import org.apache.cxf.jaxrs.client.JAXRSClientFactory;
@@ -56,29 +60,46 @@ public class NfrLocation {
 		// Get the location for the CS
 		
 		// to open connection with ACSmI client
+		Properties props= new Properties();
+		try {
+				props.load(new FileInputStream(ApiApiServiceImpl.path));
+			} catch (FileNotFoundException e) {
+	// TODO Auto-generated catch block
+				e.printStackTrace();
+			} catch (IOException e) {
+	// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+		String acsmidiscovery= props.getProperty("acsmidiscovery");
 		ServiceResourceApi api;
 		JacksonJsonProvider provider = new JacksonJsonProvider();
 		List providers = new ArrayList();
 		providers.add(provider);
 		String checklocation = null;
 		//the integration environment where the ACSmI registry is deployed
-		api = JAXRSClientFactory.create("http://85.91.40.245:8087/acsmiservices", ServiceResourceApi.class, providers);
+		api = JAXRSClientFactory.create(acsmidiscovery, ServiceResourceApi.class, providers);
 		org.apache.cxf.jaxrs.client.Client client = WebClient.client(api);
 	    ClientConfiguration config = WebClient.getConfig(client); 
 	    // end of the instructions to connect
 	    
 	    // Upload the DB with the countries and continents
-	    final File database = new File("resources/GeoLite2-Country.mmdb");
+	    //System.out.println("\n\n");
+	   // System.out.println(System.getProperty("user.dir"));
+	   // System.out.println("\n\n");
+	  //  final File database = new File(System.getProperty("user.dir")+"/resources/GeoLite2-Country.mmdb");
+	    //final File database = new File("resources/GeoLite2-Country.mmdb");
+	    InputStream databasestream = getClass().getClassLoader().getResourceAsStream("GeoLite2-Country.mmdb");
 	    DatabaseReader dbRead = null;
 	      try {
-			dbRead = new DatabaseReader.Builder(database).build();
+			//dbRead = new DatabaseReader.Builder(database).build();
+			dbRead = new DatabaseReader.Builder(databasestream).build();
 	      } catch (IOException e) {
 				// TODO Auto-generated catch block
 				e.printStackTrace();
 			}
 	        // Get the NFR for the csid calling ACSmI discovery
-	        List<ServiceNFRInfoVO> response = api.getServiceNfrInfoUsingGET(csid);
-        	
+	       // List<ServiceNFRInfoVO> response = api.getServiceNfrInfoUsingGET(csid);
+	      		List<ServiceNFRInfoVO> response = api.getServiceNfrInfoUsingGET(csid);
 	        // Start the process to check where is the VM located
         	InetAddress ip;
         	try {
@@ -95,18 +116,24 @@ public class NfrLocation {
 				}
 				final String region = cresponse.getContinent().getName();
 				final String zone = cresponse.getCountry().getName();
+//				System.out.println("*** \\n \\n CSId ***" + vm.getCsId());
+//				System.out.println("*** \\n \\n CS IP ***" + vm.getdockerHostPublicIP());
+//				System.out.println("*** \\n \\nReal region ***" + region);
+//				System.out.println("*** \n \n Real zone ***" + zone);
 				// Go to all the NFR collected
 				for (ServiceNFRInfoVO location : response) {
     			//location.getNfrvalue() con variable region y la variable zone
     			// Zone is not null, both zones are  compared.
         			if (location.getNfrmetric().equals("Zone") && location.getNfrvalue() != null) {
+        				//System.out.println("*** \n \n ACSmI zone ***" + location.getNfrvalue());
         				if (!location.getNfrvalue().equals(zone)) {
         					return "Error in Zone";
         				}        				     					
         			}
         			else if (location.getNfrmetric().equals("Region")) {
+        				//System.out.println("*** \n \n ACSmI region ***" + location.getNfrvalue());
         				if (!location.getNfrvalue().equals(region)) {
-        							return "Error in Region";
+        						return "Error in Region";
         						}        						
         					}
  					}
diff --git a/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/NfrPerformance.java b/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/NfrPerformance.java
deleted file mode 100644
index 36112ff13c8b5cc69c0668aab88bc4e1e0f437a2..0000000000000000000000000000000000000000
--- a/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/NfrPerformance.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/****************************************************************
-*Copyright (c) 2018 Tecnalia.
-*Licensed under MIT License (the "License");
-*Permission is hereby granted, free of charge, to any person obtaining a copy 
-of this software and associated documentation files (the "Software"), to deal 
-in the Software without restriction, including without limitation the rights 
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
-copies of the Software, and to permit persons to whom the Software is furnished 
-to do so, subject to the following conditions:
-*The above copyright notice and this permission notice shall be included in all 
-copies or substantial portions of the Software.
-*
-*
-*THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 
-INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 
-PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 
-HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 
-CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 
-OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-*Contributors (in alphabetical order):
-*Alberto Molinuevo 								Tecnalia
-*Gorka Benguria                                 Tecnalia
-*Iñaki Etxaniz                                  Tecnalia
-*Juncal Alonso                                  Tecnalia
-*Leire Orue-Echevarria                          Tecnalia
-*Maria Jose Lopez                               Tecnalia
-*Marisa Escalante                               Tecnalia
-*
-*Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
-*****************************************************************************/
-
-package eu.decideh2020.acsmi.monitoring.server.api.impl;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import eu.DECIDEh2020.appManager.models.AppDescription;
-import eu.DECIDEh2020.mcsla.core.metrics.EvaluationResult;
-import eu.DECIDEh2020.mcsla.core.metrics.MetricsContext;
-import eu.DECIDEh2020.mcsla.core.metrics.ServiceObjectiveMetrics;
-
-public class NfrPerformance {
-
-	String CheckPerformance (MonitoredVm vm, AppDescription appdescription) {
-		String pvalue = null;
-		String csidvalue = vm.getCsId();
-    	String csipvalue = vm.getdockerHostPublicIP();
-    	//System.out.println("*****CSID ********" + csidvalue);
-    	MetricsContext context = MetricsContext.create(appdescription);
-    	//System.out.println("****Metrics context created ********" + context);
-    	Map<String, ServiceObjectiveMetrics> metrics = context.getCsMetrics(csidvalue);
-    	ServiceObjectiveMetrics performanceMetrics= metrics.get("Performance");
-    	//// Create metrics until we have InfluxDB
-    	long Monitoredresponsetime=1;
-       //	for (int indice=0;indice<4; indice++) {
-        Long monitoredresponsetime=(long) (Math.random() * 100) + 1;
-		//Add the monitored values to the list
-		//csmeasuredValues.add(monitoredresponsetime);
-       	double cmresponsetime = monitoredresponsetime.doubleValue();
-		//}
-    	//Assess the monitored values against the MCSLA and write it in the InfluxDB
-    	EvaluationResult<Double> evaluationresult = performanceMetrics.evaluate(Monitoredresponsetime);
-    	//System.out.println ("result performance"+evaluationresult.getMeasurementResultValue());
-    	if (!evaluationresult.isError() && !evaluationresult.isConditionMet()) {
-    		pvalue= "Error in performance";
-    		//System.out.println ("*****Violation occurred****" + pvalue);
-    		//System.out.println("Measured value:" + evaluationresult.getMeasurementResultValue());
-    		return pvalue;
-    	    }
-    		else {
-    				pvalue = "Performance well";
-    				//System.out.println ("*****Performance****" + pvalue);
-    				return pvalue;
-    			}
-}
-}
diff --git a/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/NfrVMPerformance.java b/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/NfrVMPerformance.java
new file mode 100644
index 0000000000000000000000000000000000000000..da34020affa57598233df3a0c3360313e8bd80e1
--- /dev/null
+++ b/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/NfrVMPerformance.java
@@ -0,0 +1,104 @@
+package eu.decideh2020.acsmi.monitoring.server.api.impl;
+
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+import org.apache.cxf.jaxrs.client.ClientConfiguration;
+import org.apache.cxf.jaxrs.client.JAXRSClientFactory;
+import org.apache.cxf.jaxrs.client.WebClient;
+
+import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
+
+
+import eu.decideh2020.ACSmI.discovery.backend.client.api.ServiceResourceApi;
+import eu.decideh2020.ACSmI.discovery.backend.client.model.AttributeVO;
+import eu.decideh2020.ACSmI.discovery.backend.client.model.Service;
+
+
+public class NfrVMPerformance {
+
+	public String CheckPerformanceVM(MonitoredVm vm) {
+		// TODO Auto-generated method stub
+		String csidvalue = vm.getCsId();
+		Long csid = Long.valueOf(csidvalue);
+		// to open connection with ACSmI client getting the info from the properties file
+			Properties props= new Properties();
+				try {
+						props.load(new FileInputStream(ApiApiServiceImpl.path));
+					} catch (FileNotFoundException e) {
+			// TODO Auto-generated catch block
+						e.printStackTrace();
+					} catch (IOException e) {
+			// TODO Auto-generated catch block
+						e.printStackTrace();
+					}
+				String acsmidiscovery= props.getProperty("acsmidiscovery");
+				ServiceResourceApi api;
+				JacksonJsonProvider provider = new JacksonJsonProvider();
+				List providers = new ArrayList();
+				providers.add(provider);
+				String checklocation = null;
+				//the integration environment where the ACSmI registry is deployed
+				api = JAXRSClientFactory.create(acsmidiscovery, ServiceResourceApi.class, providers);
+				org.apache.cxf.jaxrs.client.Client client = WebClient.client(api);
+			    ClientConfiguration config = WebClient.getConfig(client); 
+			    // end of the instructions to connect
+			    
+			 // Get the List of attributes for the csid calling ACSmI discovery
+		        Service response = api.getServiceUsingGET(csid); 
+		        if (response!=null){
+		        	List<AttributeVO>  csattributes = response.getAttributes();
+		        	if (csattributes!=null && !csattributes.isEmpty()) {
+		        		for (AttributeVO vo:csattributes) {
+		        			if (vo.getTypeid().longValue() == 6) {
+		        				String memvalue = vo.getValue();
+		        				String memunit = vo.getUnitvalue();
+		        				System.out.println ("\n\n*******************************Mem value:  " + memvalue);
+		        				System.out.println ("\n\n*******************************Mem unit:  " + memunit);
+		        				if (memunit.equals("GB")) {
+		        					long memvaluebites=Long.valueOf(memvalue)*1073741824;
+		        					System.out.println ("\n\n*******************************Mem value en bites:" + memvaluebites);
+		        					}
+		        					else {
+		        						if (memunit.equals("MB")) {
+				        					long memvaluebites=Long.valueOf(memvalue)*1048576;
+				        					System.out.println ("\n\n*******************************Mem value en bites:  " + memvaluebites);
+		        						}		        								        						
+		        					}
+		        				}
+		        			if (vo.getTypeid().longValue() == 7) {
+		        				String discvalue = vo.getValue();
+		        				String discunit = vo.getUnitvalue();
+		        				System.out.println ("\n\n*******************************Disc value:  " + discvalue);
+		        				System.out.println ("\n\n*******************************Disc unit:  " + discunit);
+		        				if (discunit!=null && discunit.equals("GB")) {
+		        					long discvaluebites=Long.valueOf(discvalue)*1073741824;
+		        					System.out.println ("\n\n*******************************Disc value en bites :" + discvaluebites);
+		        					}
+		        					else {
+		        						if (discunit!=null && discunit.equals("MB")) {
+				        					long discvaluebites=Long.valueOf(discvalue)*1048576;
+				        					System.out.println ("\n\n*******************************Disc value en bites:  " + discvaluebites);
+		        						}
+		        						else {
+		        							System.out.println ("\n\n*******************************Disc value NULL");
+		        					}
+		        				}
+		        			}
+		        		// Read the Influx DB to compare the values collected
+		        		}
+		        	}
+		        }
+		        // this should be change....
+		        String pvalue = "Performance well";
+		        System.out.println ("*****Performance****" + pvalue);
+		        return pvalue;
+		
+	}
+
+}
+
diff --git a/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/PointCpu.java b/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/PointCpu.java
new file mode 100644
index 0000000000000000000000000000000000000000..6fc393d55ea3b94b78e2db0e97b45f3dabfeb493
--- /dev/null
+++ b/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/PointCpu.java
@@ -0,0 +1,54 @@
+package eu.decideh2020.acsmi.monitoring.server.api.impl;
+
+import java.time.Instant;
+
+import org.influxdb.annotation.Column;
+import org.influxdb.annotation.Measurement;
+
+@Measurement(name = "disk")
+
+public class PointCpu {
+	@Column(name = "time")
+    private Instant time;  
+    
+	@Column(name = "host", tag=true)
+    private String host;
+        
+    @Column(name = "usage_user")
+    private double usage_user;
+  
+    @Column(name = "usage_system")
+    private double usage_system;
+    
+       
+    @Override
+	public String toString() {
+		return "Point_cpu [time=" + time + ", host=" + host + ", usage_user=" + usage_user + ", usage_system="
+				+ usage_system + "]";
+	}
+	public Instant getTime() {
+		return time;
+	}
+	public void setTime(Instant time) {
+		this.time = time;
+	}
+	public String getHost() {
+		return host;
+	}
+	public void setHost(String host) {
+		this.host = host;
+	}
+	public double getUsage_user() {
+		return usage_user;
+	}
+	public void setUsage_user (double usage_user) {
+		this.usage_user = usage_user;
+	}
+	public double getUsage_system() {
+		return usage_system;
+	}
+	public void setUsage_system (double usage_system) {
+		this.usage_system = usage_system;
+	}
+	
+}
diff --git a/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/PointDisk.java b/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/PointDisk.java
new file mode 100644
index 0000000000000000000000000000000000000000..33d031f4b1b1be2b85f3686c6ef9e9e1700bb81a
--- /dev/null
+++ b/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/PointDisk.java
@@ -0,0 +1,63 @@
+package eu.decideh2020.acsmi.monitoring.server.api.impl;
+
+import java.time.Instant;
+
+import org.influxdb.annotation.Column;
+import org.influxdb.annotation.Measurement;
+
+@Measurement(name = "disk")
+
+
+public class PointDisk {
+	@Column(name = "time")
+    private Instant time;  
+    
+	@Column(name = "host", tag=true)
+    private String host;
+        
+    @Column(name = "free")
+    private double free;
+    @Column(name = "total")
+    private double total;
+    @Column(name = "available_percent")
+    private double available_percent;
+   
+	
+    
+    @Override
+	public String toString() {
+		return "Point_disk [time=" + time + ", host=" + host + ", free=" + free + ", total="
+				+ total + ", available_percent=" + available_percent + "]";
+	}
+	public Instant getTime() {
+		return time;
+	}
+	public void setTime(Instant time) {
+		this.time = time;
+	}
+	public String getHost() {
+		return host;
+	}
+	public void setHost(String host) {
+		this.host = host;
+	}
+	public double getFree() {
+		return free;
+	}
+	public void setFree (double free) {
+		this.free = free;
+	}
+	public double getTotal() {
+		return total;
+	}
+	public void setTotal (double total) {
+		this.total = total;
+	}
+	public double getAvailable_percent() {
+		return available_percent;
+	}
+	public void setAvailable_percent (double available_percent) {
+		this.available_percent = available_percent;
+	}
+	
+}
diff --git a/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/PointMem.java b/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/PointMem.java
new file mode 100644
index 0000000000000000000000000000000000000000..44f2a705f347404876cf7375ca92524ab131111c
--- /dev/null
+++ b/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/PointMem.java
@@ -0,0 +1,71 @@
+package eu.decideh2020.acsmi.monitoring.server.api.impl;
+
+import java.time.Instant;
+
+import org.influxdb.annotation.Column;
+import org.influxdb.annotation.Measurement;
+
+@Measurement(name = "mem")
+
+public class PointMem {
+	@Column(name = "time")
+    private Instant time;  
+    
+	@Column(name = "host", tag=true)
+    private String host;
+        
+    @Column(name = "available")
+    private double available;
+    @Column(name = "used")
+    private double used;
+    @Column(name = "available_percent")
+    private double available_percent;
+    @Column(name = "used_percent")
+    private double used_percent;
+	
+    
+    @Override
+	public String toString() {
+		return "Point_mem [time=" + time + ", host=" + host + ", available=" + available + ", used="
+				+ used + ", available_percent=" + available_percent + ", used_percent="
+				+ used_percent + "]";
+	}
+	public Instant getTime() {
+		return time;
+	}
+	public void setTime(Instant time) {
+		this.time = time;
+	}
+	public String getHost() {
+		return host;
+	}
+	public void setHost(String host) {
+		this.host = host;
+	}
+	public double getAvailable() {
+		return available;
+	}
+	public void setAvailable (double available) {
+		this.available = available;
+	}
+	public double getUsed() {
+		return used;
+	}
+	public void setUsed (double used) {
+		this.used = used;
+	}
+	public double getAvailable_percent() {
+		return available_percent;
+	}
+	public void setAvailable_percent (double available_percent) {
+		this.available_percent = available_percent;
+	}
+	public double getUsed_percent() {
+		return used_percent;
+	}
+	public void setUsed_percent (double used_percent) {
+		this.used_percent = used_percent;
+	}
+}
+
+
diff --git a/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/PointPing.java b/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/PointPing.java
new file mode 100644
index 0000000000000000000000000000000000000000..b970a5bbd7929e8d8e86d4b138c3aa24c3235a35
--- /dev/null
+++ b/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/PointPing.java
@@ -0,0 +1,103 @@
+package eu.decideh2020.acsmi.monitoring.server.api.impl;
+
+import java.time.Instant;
+
+import org.influxdb.annotation.Column;
+import org.influxdb.annotation.Measurement;
+
+@Measurement(name = "ping")
+
+public class PointPing {
+	@Column(name = "time")
+    private Instant time;  
+    
+	@Column(name = "host", tag=true)
+    private String host;
+    @Column(name = "url", tag=true)
+    private String url;
+    
+    @Column(name = "average_response_ms")
+    private double average_response_ms;
+    @Column(name = "maximum_response_ms")
+    private double maximum_response_ms;
+    @Column(name = "minimum_response_ms")
+    private double minimum_response_ms;
+    @Column(name = "packets_received")
+    private double packets_received;
+	@Column(name = "packets_transmitted")
+    private double packets_transmitted;
+    @Column(name = "percent_packet_loss")
+    private double percent_packet_loss;
+    @Column(name = "result_code")
+    private double result_code;
+    
+    @Override
+	public String toString() {
+		return "Point_ping [time=" + time + ", host=" + host + ", url=" + url + ", average_response_ms="
+				+ average_response_ms + ", maximum_response_ms=" + maximum_response_ms + ", minimum_response_ms="
+				+ minimum_response_ms + ", packets_received=" + packets_received + ", packets_transmitted="
+				+ packets_transmitted + ", percent_packet_loss=" + percent_packet_loss + ", result_code=" + result_code + "]";
+	}
+	public Instant getTime() {
+		return time;
+	}
+	public void setTime(Instant time) {
+		this.time = time;
+	}
+	public String getHost() {
+		return host;
+	}
+	public void setHost(String host) {
+		this.host = host;
+	}
+	public String getUrl() {
+		return url;
+	}
+	public void setUrl(String url) {
+		this.url = url;
+	}
+	public double getAverage_response_ms() {
+		return average_response_ms;
+	}
+	public void setAverage_response_ms(double average_response_ms) {
+		this.average_response_ms = average_response_ms;
+	}
+	public double getMaximum_response_ms() {
+		return maximum_response_ms;
+	}
+	public void setMaximum_response_ms(double maximum_response_ms) {
+		this.maximum_response_ms = maximum_response_ms;
+	}
+	public double getMinimum_response_ms() {
+		return minimum_response_ms;
+	}
+	public void setMinimum_response_ms(double minimum_response_ms) {
+		this.minimum_response_ms = minimum_response_ms;
+	}
+	public double getPackets_received() {
+		return packets_received;
+	}
+	public void setPackets_received(double packets_received) {
+		this.packets_received = packets_received;
+	}
+	public double getPackets_transmitted() {
+		return packets_transmitted;
+	}
+	public void setPackets_transmitted(double packets_transmitted) {
+		this.packets_transmitted = packets_transmitted;
+	}
+	public double getPercent_packet_loss() {
+		return percent_packet_loss;
+	}
+	public void setPercent_packet_loss(double percent_packet_loss) {
+		this.percent_packet_loss = percent_packet_loss;
+	}
+	public double getResult_code() {
+		return result_code;
+	}
+	public void setResult_code (double result_code) {
+		this.result_code = result_code;
+	}
+    
+    
+}
diff --git a/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/monitoringconfiguration.java b/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/monitoringconfiguration.java
index d5c7684257cb1ffc871da3c354cd3efb8dbbb076..97183b1e9470af018d3145ea6f061ab3a526f017 100644
--- a/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/monitoringconfiguration.java
+++ b/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/monitoringconfiguration.java
@@ -33,61 +33,123 @@ OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 package eu.decideh2020.acsmi.monitoring.server.api.impl;
 
 import java.util.List;
+import java.util.Properties;
 import java.util.Timer;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.util.ArrayList;
 
 import eu.DECIDEh2020.appManager.models.AppDescription;
+import eu.DECIDEh2020.appManager.models.Nfr;
 import eu.DECIDEh2020.appManager.models.VirtualMachine;
 import eu.decideh2020.acsmi.monitoring.server.api.impl.MonitoredVm;
 import eu.decideh2020.telegraf.file.FileParser;
 import eu.decideh2020.telegraf.file.FileWriter;
 
 
-public class monitoringconfiguration {
+public class Monitoringconfiguration {
 	
 	
 public static List<MonitoredVm> listcsip = new ArrayList<MonitoredVm>();
 		
 public void configuretelegraf(AppDescription description) {
 		AppDescription currentdescription=description;
+		String url;
+		int availabilitynfr=0;
+		int performancenfr=0;
+		int locationnfr=0;
+		int costnfr=0;
+		int legallevelnfr=0;
 		List<VirtualMachine> vmlist= currentdescription.getVirtualMachines();
+		List<Nfr> nfrlist= currentdescription.getNfrs();
 		//List<MonitoredVm> listcsip = new ArrayList<MonitoredVm>();
 		List<String> ipvalues = new ArrayList<String> ();
+		//Check which NFR should be monitored. 
+		for (Nfr nfr : nfrlist) {
+			if (nfr.getType().equalsIgnoreCase("Availability")) {
+				availabilitynfr=1;		
+			}
+			if (nfr.getType().equalsIgnoreCase("Performance")) {
+				performancenfr=1;		
+			}
+			if (nfr.getType().equalsIgnoreCase("Location")) {
+				locationnfr=1;		
+			}
+			if (nfr.getType().equalsIgnoreCase("Cost")) {
+				costnfr=1;		
+			}
+			// descomment when this nfr is implemented in the appcontroller
+			if (nfr.getType().equalsIgnoreCase("Legallevel")) {
+				legallevelnfr=1;		
+			}
+				
+		}
 		for (VirtualMachine vm : vmlist) {
 			MonitoredVm mvm = new MonitoredVm();
 			mvm.setCsId(vm.getId());
 			mvm.setdockerHostPublicIP(vm.getDockerHostPublicIp());
 			mvm.setAppinstanceId(description.getApplicationInstanceId());
 			mvm.setAppdesc(currentdescription);
+			mvm.setavailability(availabilitynfr);
+			mvm.setperformance(performancenfr);
+			mvm.setlocation(locationnfr);
+			mvm.setcost(costnfr);
+			mvm.setlegallevel(legallevelnfr);
 			listcsip.add(mvm);
 			System.out.println ("CsId "+mvm.getCsId());
 			System.out.println ("dockerHostPublicIP "+mvm.getdockerHostPublicIP());
 			System.out.println ("AppInstance ID "+mvm.getAppinstanceId());
+			System.out.println ("availability "+mvm.getavailability());
+			System.out.println ("performance "+mvm.getperformance());
+			System.out.println ("location "+mvm.getlocation());
+			
 			}
 		//Configure telegraf
 		if (!listcsip.isEmpty()) {
-		for (MonitoredVm csip: listcsip) {
-			ipvalues.add(csip.getdockerHostPublicIP());
+			for (MonitoredVm csip: listcsip) {
+				url = "\"" + csip.getdockerHostPublicIP() + "\"";
+				ipvalues.add(url);
+							}
 			}
-		}
-		try {
-			FileParser parser = new FileParser("D:\\2017-Decide\\telegraf\\telegraf.conf");
-			parser.duplicatePlugin("inputs.ping");
-			parser.changePluginComment("inputs.ping",2, false);
-			parser.changePropertyValue("inputs.ping",2, "count", "1");
-			//parser.changePropertyComment("inputs.ping",2, "count", false);
-			parser.changePropertyValues("inputs.ping", 2, "urls", ipvalues);
-			//parser.changePropertyComment("inputs.ping",2,"urls", false);
-			FileWriter.writeFile("D:\\2017-Decide\\telegraf\\telegraf.conf", parser.getDocument());
-		
-		} catch (Exception e) {
-			e.printStackTrace();
+			else {
+				System.out.println("The list of CSip is empty");
 			}
+			System.out.println(" ****  \n \n   : " + ipvalues);
+			Properties props= new Properties();
+			try {
+				props.load(new FileInputStream(ApiApiServiceImpl.path));
+				FileParser parser = new FileParser(props.getProperty("telegraf.conf.file"));
+				parser.changePluginComment("outputs.influxdb", false);
+				parser.changePropertiesComment("outputs.influxdb", "urls", false);
+				parser.changePropertiesComment("outputs.influxdb", "database", false);
+				parser.duplicatePlugin("inputs.ping");
+				parser.changePluginComment("inputs.ping",2, false);
+				parser.changePropertyComment("inputs.ping", 2, "urls", false);
+				//parser.changePropertyValue("inputs.ping",2, "count", "1");
+				//parser.changePropertyComment("inputs.ping",2, "count", false);
+				parser.changePropertyValues("inputs.ping", 2, "urls", ipvalues);
+				parser.duplicatePlugin("inputs.mem");
+				parser.changePluginComment("inputs.mem",2,false);
+				parser.duplicatePlugin("inputs.disk");
+				parser.changePluginComment("inputs.disk",2,false);
+				parser.duplicatePlugin("inputs.cpu");
+				parser.changePluginComment("inputs.cpu",2,false);
+				//parser.changePropertyComment("inputs.ping",2,"urls", false);
+				FileWriter.writeFile(props.getProperty("telegraf.conf.file"), parser.getDocument());
+				//FileWriter.writeFile("/etc/telegraf/telegraf.conf", parser.getDocument());
+				// Relaunch the telegraf after the changes
+				String telegrafrestartpath= props.getProperty("telegrafrestartscript");
+				Process process = Runtime.getRuntime().exec(telegrafrestartpath);
+			} catch (Exception e) {
+				e.printStackTrace();
+				}
+			
 		Timer timer = new Timer();
 		CsSlaAssessment currentcsslaassessment = new CsSlaAssessment(); 
 		//CsSlaAssessment currentassessment = new CsSlaAssessment();
 		//currentassessment.csnfrassessment();
-		timer.schedule(currentcsslaassessment, 0, 5000);
+		timer.schedule(currentcsslaassessment, 0, 30000);
 		}
+		
 }
diff --git a/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/stopresourcemonitoring.java b/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/stopresourcemonitoring.java
index 93d76aa20ec4091baa9a8fe735c3e9b3137b7df9..1a5809e4e55f3f80b0d93c7914318360f396f4e6 100644
--- a/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/stopresourcemonitoring.java
+++ b/ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server/src/main/java/eu/decideh2020/acsmi/monitoring/server/api/impl/stopresourcemonitoring.java
@@ -32,13 +32,15 @@ OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 package eu.decideh2020.acsmi.monitoring.server.api.impl;
 
+import java.io.FileInputStream;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Properties;
 
 import eu.decideh2020.telegraf.file.FileParser;
 import eu.decideh2020.telegraf.file.FileWriter;
 
-public class stopresourcemonitoring {
+public class Stopresourcemonitoring {
 			
 	
 	public void stop(String resourceid) {
@@ -47,21 +49,23 @@ public class stopresourcemonitoring {
 		List<MonitoredVm> resourcetodelete = new ArrayList<MonitoredVm>();
 		List<String> ipvalues = new ArrayList<String> ();
 		// go to all the list to detect which VM has the same appinstance and collect in the list resource to delete
-		for (int i=0; i<monitoringconfiguration.listcsip.size(); i++)	{
-			if (monitoringconfiguration.listcsip.get(i).getAppinstanceId().equals(resourceid)){
-				resourcetodelete.add(monitoringconfiguration.listcsip.get(i));
+		for (int i=0; i<Monitoringconfiguration.listcsip.size(); i++)	{
+			if (Monitoringconfiguration.listcsip.get(i).getAppinstanceId().equals(resourceid)){
+				resourcetodelete.add(Monitoringconfiguration.listcsip.get(i));
 				}
 		}
 		//delete form the listcsip the selected VM
-		monitoringconfiguration.listcsip.removeAll(resourcetodelete);
+		Monitoringconfiguration.listcsip.removeAll(resourcetodelete);
 	//Configure telegraf for the new Listcsip
-		if (!monitoringconfiguration.listcsip.isEmpty()) {
-			for (MonitoredVm csip: monitoringconfiguration.listcsip) {
+		if (!Monitoringconfiguration.listcsip.isEmpty()) {
+			for (MonitoredVm csip: Monitoringconfiguration.listcsip) {
 				ipvalues.add(csip.getdockerHostPublicIP());
 				}
 			}
 			try {
-				FileParser parser = new FileParser("D:\\2017-Decide\\telegraf\\telegraf.conf");
+				Properties props= new Properties();
+				props.load(new FileInputStream(ApiApiServiceImpl.path)); 
+				FileParser parser = new FileParser(props.getProperty("telegraf.conf.file"));
 				//parser.deletePlugin("inputs.ping", 2);
 				//parser.duplicatePlugin("inputs.ping");
 				//parser.changePluginComment("inputs.ping",2, false);
@@ -69,8 +73,11 @@ public class stopresourcemonitoring {
 				//parser.changePropertyComment("inputs.ping",2, "count", false);
 				parser.changePropertyValues("inputs.ping", 2, "urls", ipvalues);
 				//parser.changePropertyComment("inputs.ping",2,"urls", false);
-				FileWriter.writeFile("D:\\2017-Decide\\telegraf\\telegraf.conf", parser.getDocument());
-			
+				FileWriter.writeFile(props.getProperty("telegraf.conf.file"), parser.getDocument());
+				// Relaunch the telegraf after the changes
+				String telegrafrestartpath= props.getProperty("telegrafrestartscript");
+				Process process = Runtime.getRuntime().exec(telegrafrestartpath);
+								
 			} catch (Exception e) {
 				e.printStackTrace();
 				}
diff --git a/ACSmI/Monitoring/eu.decideh2020.adapt.violationhandler.client/.project b/ACSmI/Monitoring/eu.decideh2020.adapt.violationhandler.client/.project
deleted file mode 100644
index 48244833ba05a10f69b2f8da67f6b0cc311f6c11..0000000000000000000000000000000000000000
--- a/ACSmI/Monitoring/eu.decideh2020.adapt.violationhandler.client/.project
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>eu.decideh2020.adapt.violationhandler.client</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.m2e.core.maven2Builder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.eclipse.m2e.core.maven2Nature</nature>
-	</natures>
-</projectDescription>
diff --git a/ACSmI/Monitoring/eu.decideh2020.adapt.violationhandler.client/.swagger-codegen-ignore b/ACSmI/Monitoring/eu.decideh2020.adapt.violationhandler.client/.swagger-codegen-ignore
deleted file mode 100644
index c5fa491b4c557bf997d5dd21797de782545dc9e5..0000000000000000000000000000000000000000
--- a/ACSmI/Monitoring/eu.decideh2020.adapt.violationhandler.client/.swagger-codegen-ignore
+++ /dev/null
@@ -1,23 +0,0 @@
-# Swagger Codegen Ignore
-# Generated by swagger-codegen https://github.com/swagger-api/swagger-codegen
-
-# Use this file to prevent files from being overwritten by the generator.
-# The patterns follow closely to .gitignore or .dockerignore.
-
-# As an example, the C# client generator defines ApiClient.cs.
-# You can make changes and tell Swagger Codgen to ignore just this file by uncommenting the following line:
-#ApiClient.cs
-
-# You can match any string of characters against a directory, file or extension with a single asterisk (*):
-#foo/*/qux
-# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux
-
-# You can recursively match patterns against a directory, file or extension with a double asterisk (**):
-#foo/**/qux
-# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux
-
-# You can also negate patterns with an exclamation (!).
-# For example, you can ignore all files in a docs folder with the file extension .md:
-#docs/*.md
-# Then explicitly reverse the ignore rule for a single file:
-#!docs/README.md
diff --git a/ACSmI/Monitoring/eu.decideh2020.adapt.violationhandler.client/.swagger-codegen/VERSION b/ACSmI/Monitoring/eu.decideh2020.adapt.violationhandler.client/.swagger-codegen/VERSION
deleted file mode 100644
index a6254504e40175d135cea7feb34ad31fa0d0bca3..0000000000000000000000000000000000000000
--- a/ACSmI/Monitoring/eu.decideh2020.adapt.violationhandler.client/.swagger-codegen/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-2.3.1
\ No newline at end of file
diff --git a/ACSmI/Monitoring/eu.decideh2020.adapt.violationhandler.client/pom.xml b/ACSmI/Monitoring/eu.decideh2020.adapt.violationhandler.client/pom.xml
deleted file mode 100644
index afaff31803d20c623a47ffc3f36e7e278b6f2f7b..0000000000000000000000000000000000000000
--- a/ACSmI/Monitoring/eu.decideh2020.adapt.violationhandler.client/pom.xml
+++ /dev/null
@@ -1,175 +0,0 @@
-<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/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <groupId>eu.decideh2020</groupId>
-  <artifactId>adapt.violationhandler.client</artifactId>
-  <packaging>jar</packaging>
-  <name>eu.decideh2020.adapt.violationhandler.client</name>
-  <description>This is the API documentation for Violation Handler service of DECIDE h2020 european project</description>
-  <version>1.0.0</version>
-  <build>
-    <sourceDirectory>src/main/java</sourceDirectory>
-    <plugins>
-      <plugin>
-        <artifactId>maven-failsafe-plugin</artifactId>
-        <version>2.6</version>
-        <executions>
-          <execution>
-            <goals>
-              <goal>integration-test</goal>
-              <goal>verify</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-      <!--plugin>
-        <groupId>org.eclipse.jetty</groupId>
-        <artifactId>jetty-maven-plugin</artifactId>
-        <version>${jetty-version}</version>
-        <configuration>
-          <webApp>
-            <contextPath>/</contextPath>
-          </webApp>
-          <webAppSourceDirectory>target/${project.artifactId}-${project.version}</webAppSourceDirectory>
-          <stopPort>8079</stopPort>
-          <stopKey>stopit</stopKey>
-          <httpConnector>
-            <port></port>
-            <idleTimeout>60000</idleTimeout>
-          </httpConnector>
-        </configuration>
-        <executions>
-          <execution>
-            <id>start-jetty</id>
-            <phase>pre-integration-test</phase>
-            <goals>
-              <goal>start</goal>
-            </goals>
-            <configuration>
-              <scanIntervalSeconds>0</scanIntervalSeconds>
-              <daemon>true</daemon>
-            </configuration>
-          </execution>
-          <execution>
-            <id>stop-jetty</id>
-            <phase>post-integration-test</phase>
-            <goals>
-              <goal>stop</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin-->
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>build-helper-maven-plugin</artifactId>
-        <version>1.9.1</version>
-        <executions>
-          <execution>
-            <id>add-source</id>
-            <phase>generate-sources</phase>
-            <goals>
-              <goal>add-source</goal>
-            </goals>
-            <configuration>
-              <sources>
-                <source>src/gen/java</source>
-              </sources>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-  <dependencies>
-    <dependency>
-      <groupId>io.swagger</groupId>
-      <artifactId>swagger-jaxrs</artifactId>
-      <scope>compile</scope>
-      <version>${swagger-core-version}</version>
-    </dependency>
-    <dependency>
-      <groupId>ch.qos.logback</groupId>
-      <artifactId>logback-classic</artifactId>
-      <version>${logback-version}</version>
-      <scope>compile</scope>
-    </dependency>
-    <dependency>
-      <groupId>ch.qos.logback</groupId>
-      <artifactId>logback-core</artifactId>
-      <version>${logback-version}</version>
-      <scope>compile</scope>
-    </dependency>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <version>${junit-version}</version>
-      <scope>test</scope>
-    </dependency>
-    <!-- CXF Client -->
-    <dependency>
-        <groupId>org.apache.cxf</groupId>
-        <artifactId>cxf-rt-rs-client</artifactId>
-        <version>${cxf-version}</version>
-        <scope>test</scope>
-    </dependency>
-    
-     <!-- CXF server -->
-    <dependency>
-        <groupId>org.apache.cxf</groupId>
-        <artifactId>cxf-rt-frontend-jaxrs</artifactId>
-        <version>${cxf-version}</version>
-        <scope>compile</scope>
-    </dependency>
-    <dependency>
-        <groupId>org.apache.cxf</groupId>
-        <artifactId>cxf-rt-rs-service-description</artifactId>
-        <version>${cxf-version}</version>
-        <scope>compile</scope>
-    </dependency>
-    <dependency>
-        <groupId>org.apache.cxf</groupId>
-        <artifactId>cxf-rt-ws-policy</artifactId>
-        <version>${cxf-version}</version>
-        <scope>compile</scope>
-    </dependency>
-    <dependency>
-        <groupId>org.apache.cxf</groupId>
-        <artifactId>cxf-rt-wsdl</artifactId>
-        <version>${cxf-version}</version>
-        <scope>compile</scope>
-    </dependency>
-    <dependency>
-        <groupId>com.fasterxml.jackson.jaxrs</groupId>
-        <artifactId>jackson-jaxrs-json-provider</artifactId>
-        <version>${jackson-jaxrs-version}</version>
-        <scope>compile</scope>
-    </dependency>
-    <dependency>
-       <groupId>com.fasterxml.jackson.datatype</groupId>
-       <artifactId>jackson-datatype-joda</artifactId>
-       <version>${jackson-jaxrs-version}</version>
-       <scope>compile</scope>
-    </dependency>
-  </dependencies>
-  <repositories>
-    <repository>
-      <id>sonatype-snapshots</id>
-      <url>https://oss.sonatype.org/content/repositories/snapshots</url>
-      <snapshots>
-        <enabled>true</enabled>
-      </snapshots>
-    </repository>
-  </repositories>
-  <properties>
-    <java.version>1.7</java.version>
-    <maven.compiler.source>${java.version}</maven.compiler.source>
-    <maven.compiler.target>${java.version}</maven.compiler.target>
-    <swagger-core-version>1.5.15</swagger-core-version>
-    <jetty-version>9.2.9.v20150224</jetty-version>
-    <junit-version>4.12</junit-version>
-    <logback-version>1.1.7</logback-version>
-    <servlet-api-version>2.5</servlet-api-version>
-    <cxf-version>3.1.11</cxf-version>
-    <jackson-jaxrs-version>2.8.9</jackson-jaxrs-version>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-  </properties>
-</project>
diff --git a/ACSmI/Monitoring/eu.decideh2020.adapt.violationhandler.client/src/gen/java/eu/decideh2020/adapt/violationhandler/client/api/TestApi.java b/ACSmI/Monitoring/eu.decideh2020.adapt.violationhandler.client/src/gen/java/eu/decideh2020/adapt/violationhandler/client/api/TestApi.java
deleted file mode 100644
index a8df3b0659549774ae2394a32b9b2d0d6a06ccc5..0000000000000000000000000000000000000000
--- a/ACSmI/Monitoring/eu.decideh2020.adapt.violationhandler.client/src/gen/java/eu/decideh2020/adapt/violationhandler/client/api/TestApi.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package eu.decideh2020.adapt.violationhandler.client.api;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.List;
-import java.util.Map;
-import javax.ws.rs.*;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.MediaType;
-import org.apache.cxf.jaxrs.ext.multipart.*;
-
-import eu.decideh2020.adapt.violationhandler.client.model.ModelApiResponse;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiResponses;
-import io.swagger.annotations.ApiResponse;
-import io.swagger.jaxrs.PATCH;
-
-/**
- * Violation Handler
- *
- * <p>This is the API documentation for Violation Handler service of DECIDE h2020 european project
- *
- */
-@Path("/")
-@Api(value = "/", description = "")
-public interface TestApi  {
-
-    /**
-     * Test the Hello World API service
-     *
-     * Test the Hello World API service
-     *
-     */
-    @GET
-    @Path("/hello")
-    @Produces({ "application/xml", "application/json" })
-    @ApiOperation(value = "Test the Hello World API service", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class) })
-    public ModelApiResponse hello();
-}
-
diff --git a/ACSmI/Monitoring/eu.decideh2020.adapt.violationhandler.client/src/gen/java/eu/decideh2020/adapt/violationhandler/client/api/ViolationsApi.java b/ACSmI/Monitoring/eu.decideh2020.adapt.violationhandler.client/src/gen/java/eu/decideh2020/adapt/violationhandler/client/api/ViolationsApi.java
deleted file mode 100644
index af12437f8d0c2443251420401a41d21cbb73a0d6..0000000000000000000000000000000000000000
--- a/ACSmI/Monitoring/eu.decideh2020.adapt.violationhandler.client/src/gen/java/eu/decideh2020/adapt/violationhandler/client/api/ViolationsApi.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package eu.decideh2020.adapt.violationhandler.client.api;
-
-import eu.decideh2020.adapt.violationhandler.client.model.Violation;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.List;
-import java.util.Map;
-import javax.ws.rs.*;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.MediaType;
-import org.apache.cxf.jaxrs.ext.multipart.*;
-
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiResponses;
-import io.swagger.annotations.ApiResponse;
-import io.swagger.jaxrs.PATCH;
-
-/**
- * Violation Handler
- *
- * <p>This is the API documentation for Violation Handler service of DECIDE h2020 european project
- *
- */
-@Path("/")
-@Api(value = "/", description = "")
-public interface ViolationsApi  {
-
-    /**
-     * Get all the violations that exist in the handler
-     *
-     * Get all the violations that exist in the handler
-     *
-     */
-    @GET
-    @Path("/violation/getAllViolations")
-    @Produces({ "application/xml", "application/json" })
-    @ApiOperation(value = "Get all the violations that exist in the handler", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "successful operation", response = Violation.class, responseContainer = "array") })
-    public List<Violation> getAllViolations();
-
-    /**
-     * Get violation from id
-     *
-     * Get violation from id
-     *
-     */
-    @GET
-    @Path("/violation/{violationId}")
-    @Produces({ "application/xml", "application/json" })
-    @ApiOperation(value = "Get violation from id", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "successful operation", response = Violation.class),
-        @ApiResponse(code = 400, message = "Invalid agent_id value", response = void.class) })
-    public Violation getViolationById(@PathParam("violationId") String violationId);
-
-    /**
-     * Get all violations for given application description URI
-     *
-     * Get all violations for given application description URI
-     *
-     */
-    @GET
-    @Path("/violation/getViolationsByServiceId")
-    @Produces({ "application/xml", "application/json" })
-    @ApiOperation(value = "Get all violations for given application description URI", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "successful operation", response = Violation.class, responseContainer = "array") })
-    public List<Violation> getViolationsByServiceId(@QueryParam("id")Integer id);
-
-    /**
-     * Get all violations for given application description URI
-     *
-     * Get all violations for given application description URI
-     *
-     */
-    @GET
-    @Path("/violation/getViolationsByUri")
-    @Produces({ "application/xml", "application/json" })
-    @ApiOperation(value = "Get all violations for given application description URI", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "successful operation", response = Violation.class, responseContainer = "array") })
-    public List<Violation> getViolationsByUri(@QueryParam("uri")String uri);
-
-    /**
-     * Report a new violation
-     *
-     * Report a new violation in the system
-     *
-     */
-    @POST
-    @Path("/violation")
-    @Consumes({ "application/json", "application/json" })
-    @Produces({ "application/json", "application/json" })
-    @ApiOperation(value = "Report a new violation", tags={  })
-    @ApiResponses(value = { 
-    @ApiResponse(code = 200, message = "successful operation", response = Violation.class) })
-    public Violation reportViolation(Violation violation);
-}
-
diff --git a/ACSmI/Monitoring/eu.decideh2020.adapt.violationhandler.client/src/gen/java/eu/decideh2020/adapt/violationhandler/client/model/ModelApiResponse.java b/ACSmI/Monitoring/eu.decideh2020.adapt.violationhandler.client/src/gen/java/eu/decideh2020/adapt/violationhandler/client/model/ModelApiResponse.java
deleted file mode 100644
index 3c60b7b426e912a6b97e16491025013309ad22b8..0000000000000000000000000000000000000000
--- a/ACSmI/Monitoring/eu.decideh2020.adapt.violationhandler.client/src/gen/java/eu/decideh2020/adapt/violationhandler/client/model/ModelApiResponse.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package eu.decideh2020.adapt.violationhandler.client.model;
-
-
-import io.swagger.annotations.ApiModelProperty;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlType;
-import javax.xml.bind.annotation.XmlEnum;
-import javax.xml.bind.annotation.XmlEnumValue;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public class ModelApiResponse  {
-  
-  @ApiModelProperty(value = "")
-  private Integer code = null;
-
-  @ApiModelProperty(value = "")
-  private String type = null;
-
-  @ApiModelProperty(value = "")
-  private String message = null;
- /**
-   * Get code
-   * @return code
-  **/
-  @JsonProperty("code")
-  public Integer getCode() {
-    return code;
-  }
-
-  public void setCode(Integer code) {
-    this.code = code;
-  }
-
-  public ModelApiResponse code(Integer code) {
-    this.code = code;
-    return this;
-  }
-
- /**
-   * Get type
-   * @return type
-  **/
-  @JsonProperty("type")
-  public String getType() {
-    return type;
-  }
-
-  public void setType(String type) {
-    this.type = type;
-  }
-
-  public ModelApiResponse type(String type) {
-    this.type = type;
-    return this;
-  }
-
- /**
-   * Get message
-   * @return message
-  **/
-  @JsonProperty("message")
-  public String getMessage() {
-    return message;
-  }
-
-  public void setMessage(String message) {
-    this.message = message;
-  }
-
-  public ModelApiResponse message(String message) {
-    this.message = message;
-    return this;
-  }
-
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("class ModelApiResponse {\n");
-    
-    sb.append("    code: ").append(toIndentedString(code)).append("\n");
-    sb.append("    type: ").append(toIndentedString(type)).append("\n");
-    sb.append("    message: ").append(toIndentedString(message)).append("\n");
-    sb.append("}");
-    return sb.toString();
-  }
-
-  /**
-   * Convert the given object to string with each line indented by 4 spaces
-   * (except the first line).
-   */
-  private static String toIndentedString(java.lang.Object o) {
-    if (o == null) {
-      return "null";
-    }
-    return o.toString().replace("\n", "\n    ");
-  }
-}
-
diff --git a/ACSmI/Monitoring/eu.decideh2020.adapt.violationhandler.client/src/gen/java/eu/decideh2020/adapt/violationhandler/client/model/Violation.java b/ACSmI/Monitoring/eu.decideh2020.adapt.violationhandler.client/src/gen/java/eu/decideh2020/adapt/violationhandler/client/model/Violation.java
deleted file mode 100644
index 807382fb8d51c88c5b3ee08b3e202f9ed15d4842..0000000000000000000000000000000000000000
--- a/ACSmI/Monitoring/eu.decideh2020.adapt.violationhandler.client/src/gen/java/eu/decideh2020/adapt/violationhandler/client/model/Violation.java
+++ /dev/null
@@ -1,208 +0,0 @@
-package eu.decideh2020.adapt.violationhandler.client.model;
-
-
-import io.swagger.annotations.ApiModelProperty;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlType;
-import javax.xml.bind.annotation.XmlEnum;
-import javax.xml.bind.annotation.XmlEnumValue;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public class Violation  {
-  
-  @ApiModelProperty(value = "")
-  private Long id = null;
-
-  @ApiModelProperty(value = "Uri of the application description location")
- /**
-   * Uri of the application description location  
-  **/
-  private String appDescUri = null;
-
-  @ApiModelProperty(value = "Id of the serice where violation occurs")
- /**
-   * Id of the serice where violation occurs  
-  **/
-  private String serviceId = null;
-
-  @ApiModelProperty(value = "Affected NFR name")
- /**
-   * Affected NFR name  
-  **/
-  private String nfr = null;
-
-  @ApiModelProperty(value = "Status of the violation")
- /**
-   * Status of the violation  
-  **/
-  private String status = null;
-
-  @ApiModelProperty(value = "Violation source type, SLA (0) or CSP (1)")
- /**
-   * Violation source type, SLA (0) or CSP (1)  
-  **/
-  private Integer type = null;
-
-  @ApiModelProperty(value = "Timestamp with the violation monitoring time")
- /**
-   * Timestamp with the violation monitoring time  
-  **/
-  private Long timestamp = null;
- /**
-   * Get id
-   * @return id
-  **/
-  @JsonProperty("id")
-  public Long getId() {
-    return id;
-  }
-
-  public void setId(Long id) {
-    this.id = id;
-  }
-
-  public Violation id(Long id) {
-    this.id = id;
-    return this;
-  }
-
- /**
-   * Uri of the application description location
-   * @return appDescUri
-  **/
-  @JsonProperty("app_desc_uri")
-  public String getAppDescUri() {
-    return appDescUri;
-  }
-
-  public void setAppDescUri(String appDescUri) {
-    this.appDescUri = appDescUri;
-  }
-
-  public Violation appDescUri(String appDescUri) {
-    this.appDescUri = appDescUri;
-    return this;
-  }
-
- /**
-   * Id of the serice where violation occurs
-   * @return serviceId
-  **/
-  @JsonProperty("service_id")
-  public String getServiceId() {
-    return serviceId;
-  }
-
-  public void setServiceId(String serviceId) {
-    this.serviceId = serviceId;
-  }
-
-  public Violation serviceId(String serviceId) {
-    this.serviceId = serviceId;
-    return this;
-  }
-
- /**
-   * Affected NFR name
-   * @return nfr
-  **/
-  @JsonProperty("nfr")
-  public String getNfr() {
-    return nfr;
-  }
-
-  public void setNfr(String nfr) {
-    this.nfr = nfr;
-  }
-
-  public Violation nfr(String nfr) {
-    this.nfr = nfr;
-    return this;
-  }
-
- /**
-   * Status of the violation
-   * @return status
-  **/
-  @JsonProperty("status")
-  public String getStatus() {
-    return status;
-  }
-
-  public void setStatus(String status) {
-    this.status = status;
-  }
-
-  public Violation status(String status) {
-    this.status = status;
-    return this;
-  }
-
- /**
-   * Violation source type, SLA (0) or CSP (1)
-   * @return type
-  **/
-  @JsonProperty("type")
-  public Integer getType() {
-    return type;
-  }
-
-  public void setType(Integer type) {
-    this.type = type;
-  }
-
-  public Violation type(Integer type) {
-    this.type = type;
-    return this;
-  }
-
- /**
-   * Timestamp with the violation monitoring time
-   * @return timestamp
-  **/
-  @JsonProperty("timestamp")
-  public Long getTimestamp() {
-    return timestamp;
-  }
-
-  public void setTimestamp(Long timestamp) {
-    this.timestamp = timestamp;
-  }
-
-  public Violation timestamp(Long timestamp) {
-    this.timestamp = timestamp;
-    return this;
-  }
-
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("class Violation {\n");
-    
-    sb.append("    id: ").append(toIndentedString(id)).append("\n");
-    sb.append("    appDescUri: ").append(toIndentedString(appDescUri)).append("\n");
-    sb.append("    serviceId: ").append(toIndentedString(serviceId)).append("\n");
-    sb.append("    nfr: ").append(toIndentedString(nfr)).append("\n");
-    sb.append("    status: ").append(toIndentedString(status)).append("\n");
-    sb.append("    type: ").append(toIndentedString(type)).append("\n");
-    sb.append("    timestamp: ").append(toIndentedString(timestamp)).append("\n");
-    sb.append("}");
-    return sb.toString();
-  }
-
-  /**
-   * Convert the given object to string with each line indented by 4 spaces
-   * (except the first line).
-   */
-  private static String toIndentedString(java.lang.Object o) {
-    if (o == null) {
-      return "null";
-    }
-    return o.toString().replace("\n", "\n    ");
-  }
-}
-
diff --git a/ACSmI/Monitoring/eu.decideh2020.adapt.violationhandler.client/src/test/java/io/swagger/api/TestApiTest.java b/ACSmI/Monitoring/eu.decideh2020.adapt.violationhandler.client/src/test/java/io/swagger/api/TestApiTest.java
deleted file mode 100644
index d3b1479f7f49eeb56a5f1e6565ebfcb00eabfbbe..0000000000000000000000000000000000000000
--- a/ACSmI/Monitoring/eu.decideh2020.adapt.violationhandler.client/src/test/java/io/swagger/api/TestApiTest.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/**
- * Violation Handler
- * This is the API documentation for Violation Handler service of DECIDE h2020 european project
- *
- * OpenAPI spec version: 1.0.0
- * 
- *
- * NOTE: This class is auto generated by the swagger code generator program.
- * https://github.com/swagger-api/swagger-codegen.git
- * Do not edit the class manually.
- *
- * 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 io.swagger.api;
-
-import org.junit.Test;
-import org.junit.Before;
-import static org.junit.Assert.*;
-
-import javax.ws.rs.core.Response;
-import org.apache.cxf.jaxrs.client.JAXRSClientFactory;
-import org.apache.cxf.jaxrs.client.ClientConfiguration;
-import org.apache.cxf.jaxrs.client.WebClient;
-
-
-import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
-
-import eu.decideh2020.adapt.violationhandler.client.api.TestApi;
-import eu.decideh2020.adapt.violationhandler.client.model.ModelApiResponse;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-
-
-
-/**
- * Violation Handler
- *
- * <p>This is the API documentation for Violation Handler service of DECIDE h2020 european project
- *
- * API tests for TestApi 
- */
-public class TestApiTest {
-
-
-    private TestApi api;
-    
-    @Before
-    public void setup() {
-        JacksonJsonProvider provider = new JacksonJsonProvider();
-        List providers = new ArrayList();
-        providers.add(provider);
-        
-        api = JAXRSClientFactory.create("http://localhost:5000/violationhandler", TestApi.class, providers);
-        org.apache.cxf.jaxrs.client.Client client = WebClient.client(api);
-        
-        ClientConfiguration config = WebClient.getConfig(client); 
-    }
-
-    
-    /**
-     * Test the Hello World API service
-     *
-     * Test the Hello World API service
-     *
-     * @throws ApiException
-     *          if the Api call fails
-     */
-    @Test
-    public void helloTest() {
-        //ModelApiResponse response = api.hello();
-        //assertNotNull(response);
-        // TODO: test validations
-        
-        
-    }
-    
-}
diff --git a/ACSmI/Monitoring/eu.decideh2020.adapt.violationhandler.client/src/test/java/io/swagger/api/ViolationsApiTest.java b/ACSmI/Monitoring/eu.decideh2020.adapt.violationhandler.client/src/test/java/io/swagger/api/ViolationsApiTest.java
deleted file mode 100644
index d8a81676dd4b33ae2c5fc7f7ba4c61b0dbfdacab..0000000000000000000000000000000000000000
--- a/ACSmI/Monitoring/eu.decideh2020.adapt.violationhandler.client/src/test/java/io/swagger/api/ViolationsApiTest.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/**
- * Violation Handler
- * This is the API documentation for Violation Handler service of DECIDE h2020 european project
- *
- * OpenAPI spec version: 1.0.0
- * 
- *
- * NOTE: This class is auto generated by the swagger code generator program.
- * https://github.com/swagger-api/swagger-codegen.git
- * Do not edit the class manually.
- *
- * 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 io.swagger.api;
-
-import org.junit.Test;
-import org.junit.Before;
-import static org.junit.Assert.*;
-
-import javax.ws.rs.core.Response;
-import org.apache.cxf.jaxrs.client.JAXRSClientFactory;
-import org.apache.cxf.jaxrs.client.ClientConfiguration;
-import org.apache.cxf.jaxrs.client.WebClient;
-
-
-import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
-
-import eu.decideh2020.adapt.violationhandler.client.api.ViolationsApi;
-import eu.decideh2020.adapt.violationhandler.client.model.Violation;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-
-
-
-/**
- * Violation Handler
- *
- * <p>This is the API documentation for Violation Handler service of DECIDE h2020 european project
- *
- * API tests for ViolationsApi 
- */
-public class ViolationsApiTest {
-
-
-    private ViolationsApi api;
-    
-    @Before
-    public void setup() {
-        JacksonJsonProvider provider = new JacksonJsonProvider();
-        List providers = new ArrayList();
-        providers.add(provider);
-        
-        api = JAXRSClientFactory.create("http://localhost:5000/violationhandler", ViolationsApi.class, providers);
-        org.apache.cxf.jaxrs.client.Client client = WebClient.client(api);
-        
-        ClientConfiguration config = WebClient.getConfig(client); 
-    }
-
-    
-    /**
-     * Get all the violations that exist in the handler
-     *
-     * Get all the violations that exist in the handler
-     *
-     * @throws ApiException
-     *          if the Api call fails
-     */
-    @Test
-    public void getAllViolationsTest() {
-        //List<Violation> response = api.getAllViolations();
-        //assertNotNull(response);
-        // TODO: test validations
-        
-        
-    }
-    
-    /**
-     * Get violation from id
-     *
-     * Get violation from id
-     *
-     * @throws ApiException
-     *          if the Api call fails
-     */
-    @Test
-    public void getViolationByIdTest() {
-        String violationId = null;
-        //Violation response = api.getViolationById(violationId);
-        //assertNotNull(response);
-        // TODO: test validations
-        
-        
-    }
-    
-    /**
-     * Get all violations for given application description URI
-     *
-     * Get all violations for given application description URI
-     *
-     * @throws ApiException
-     *          if the Api call fails
-     */
-    @Test
-    public void getViolationsByServiceIdTest() {
-        Integer id = null;
-        //List<Violation> response = api.getViolationsByServiceId(id);
-        //assertNotNull(response);
-        // TODO: test validations
-        
-        
-    }
-    
-    /**
-     * Get all violations for given application description URI
-     *
-     * Get all violations for given application description URI
-     *
-     * @throws ApiException
-     *          if the Api call fails
-     */
-    @Test
-    public void getViolationsByUriTest() {
-        String uri = null;
-        //List<Violation> response = api.getViolationsByUri(uri);
-        //assertNotNull(response);
-        // TODO: test validations
-        
-        
-    }
-    
-    /**
-     * Report a new violation
-     *
-     * Report a new violation in the system
-     *
-     * @throws ApiException
-     *          if the Api call fails
-     */
-    @Test
-    public void reportViolationTest() {
-        Violation violation = null;
-        //Violation response = api.reportViolation(violation);
-        //assertNotNull(response);
-        // TODO: test validations
-        
-        
-    }
-    
-}
diff --git a/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/.dockerignore b/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/.dockerignore
new file mode 100644
index 0000000000000000000000000000000000000000..d3064226ba3aa9312002c53467a04ecccec42ef5
--- /dev/null
+++ b/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/.dockerignore
@@ -0,0 +1,3 @@
+node_modules/
+node/
+bower_components/
\ No newline at end of file
diff --git a/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/.gitignore b/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..59a4e66eaea0a4fdb51672d97673ad79089ec530
--- /dev/null
+++ b/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/.gitignore
@@ -0,0 +1 @@
+/sources
\ No newline at end of file
diff --git a/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/Dockerfile b/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/Dockerfile
index a9ec098454efe0d84bdc24d3ac0a67ec453112d1..e6470d973faeaa2f6569bc933d42b40a36cf4541 100644
--- a/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/Dockerfile
+++ b/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/Dockerfile
@@ -1,19 +1,47 @@
-FROM maven:3.5.3-jdk-8 as builder
+FROM maven:3.5.4 as builder
 
 ARG GIT_CREDENTIALS
-ARG APPMANAGER_VERSION=53dd49053bd12c83c27e1258a94de4d0ac2d7400
-ARG MCSLA_CORE_VERSION=5bf5d112d4e5c8b09e401cd757f123386b6db53d
-ARG WP5_VERSION=159ab4b500263be55dfa719815a68c3a20edb2fa
-ARG DISCOVERY_CLIENT_VERSION=159ab4b500263be55dfa719815a68c3a20edb2fa
-ARG TELEGRAF_CONFIGPARSER_VERSION=159ab4b500263be55dfa719815a68c3a20edb2fa
-ARG WP4_VERSION=159ab4b500263be55dfa719815a68c3a20edb2fa
-
-COPY downloadsources.sh /downloadsources.sh
-COPY maveninstall.sh /maveninstall.sh
-RUN chmod +x /downloadsources.sh && \
-    sh ./downloadsources.sh && \
-    chmod +x /maveninstall.sh && \
-    sh ./maveninstall.sh 
-
-WORKDIR /ACSMI/monitoring/eu.decideh2020.acsmi.monitoring.server
-CMD ["mvn","jetty:run","-Dmaven.test.skip=true"]
+ARG ARTIFACTORY_USE
+ARG ARTIFACTORY_USER
+ARG ARTIFACTORY_PASSWORD
+ARG ARTIFACTORY_MAVEN_REPO
+ARG APP_MANAGER_GIT_REF=2ab0422cde8ebc189cfc369e67bafe2a2af72957
+ARG MCSLA_CORE_GIT_REF=78f33a7c362cbd19412a6cfe22df054cc123ee0b
+ARG ACSMI_BACKEND_CLIENT_GIT_REF=12dcf13dd81177578309e64e4239bca4e20b2132
+ARG TELEGRAF_CONFIG_GIT_REF=12dcf13dd81177578309e64e4239bca4e20b2132
+ARG VIOLATION_HANDLER_GIT_REF=da442065c6c2300566bccde649dae678c7303ba7
+ARG ACSMI_MONITORING_GIT_REF=12dcf13dd81177578309e64e4239bca4e20b2132
+
+ARG VERSION
+
+COPY . /
+
+RUN \
+	chmod 750 /*.sh && \
+	. /configartifactorymaven.sh && \
+	python /processSourcesJson.py && \
+	rm -rf /sources
+
+FROM jetty:9.3.24-alpine
+
+ENV USER_GIT=user
+ENV TOKEN_GIT=password
+
+COPY --from=builder /app.war /var/lib/jetty/webapps/ROOT.war
+COPY /installtelegrafalpine.sh /installtelegrafalpine.sh 
+COPY /docker-entrypoint.sh /docker-entrypoint.sh
+COPY /telegrafrestart.sh /telegrafrestart.sh
+
+USER root
+RUN chmod u+s /bin/ping && \
+    chmod 750 /*.sh && \
+    /installtelegrafalpine.sh && \
+    chown jetty:jetty /var/lib/jetty/webapps/ROOT.war && \
+	chown jetty:jetty /docker-entrypoint.sh && \
+	chown jetty:jetty /telegrafrestart.sh
+
+USER jetty
+
+COPY /etc/telegraf /etc/telegraf
+COPY /etc/decide /etc/decide
+
diff --git a/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/config.sh b/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/config.sh
new file mode 100644
index 0000000000000000000000000000000000000000..165fe3ec35541ad40ecf279c15b152acfc95432b
--- /dev/null
+++ b/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/config.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+sourcespath=$1
+project=$2
+echo "sourcespath $sourcespath"
+echo "project $project"
+
+#no config needed
+#rm -rf ${xpref}
\ No newline at end of file
diff --git a/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/configartifactorymaven.sh b/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/configartifactorymaven.sh
new file mode 100644
index 0000000000000000000000000000000000000000..1fe2d19e9e517411406ad9d1d44766503a1bec7d
--- /dev/null
+++ b/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/configartifactorymaven.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+if [ "$ARTIFACTORY_USE" != "Y" ]
+then
+  echo "Without Artifactory"
+else
+
+  echo "With Artifactory"
+  cp /settings.xml /usr/share/maven/conf/.
+  mkdir /root/.m2
+  cp /settings-security.xml /root/.m2/.
+  export MAVEN_USER="$ARTIFACTORY_USER"
+  export MASTER_PASSWORD="$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1)"
+  export MAVEN_MASTER_PASSWORD="$(mvn --encrypt-master-password $MASTER_PASSWORD)"
+
+  sed -i "s@\${.*}@$MAVEN_MASTER_PASSWORD@g" /root/.m2/settings-security.xml
+  export MAVEN_PASSWORD="$(mvn --encrypt-password $ARTIFACTORY_PASSWORD)"
+
+fi
+
+#rm -rf /root/.m2/repository/ #to test that it works
diff --git a/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/docker-entrypoint.sh b/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/docker-entrypoint.sh
new file mode 100644
index 0000000000000000000000000000000000000000..9084acfc3d2f516a6ec6684be7530f081671c4c7
--- /dev/null
+++ b/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/docker-entrypoint.sh
@@ -0,0 +1,112 @@
+#!/bin/sh
+
+
+set -e
+
+/usr/bin/telegraf &
+
+if [ "$1" = jetty.sh ]; then
+	if ! command -v bash >/dev/null 2>&1 ; then
+		cat >&2 <<- 'EOWARN'
+			********************************************************************
+			ERROR: bash not found. Use of jetty.sh requires bash.
+			********************************************************************
+		EOWARN
+		exit 1
+	fi
+	cat >&2 <<- 'EOWARN'
+		********************************************************************
+		WARNING: Use of jetty.sh from this image is deprecated and may
+			 be removed at some point in the future.
+
+			 See the documentation for guidance on extending this image:
+			 https://github.com/docker-library/docs/tree/master/jetty
+		********************************************************************
+	EOWARN
+fi
+
+if ! command -v -- "$1" >/dev/null 2>&1 ; then
+	set -- java -jar "$JETTY_HOME/start.jar" "$@"
+fi
+
+: ${TMPDIR:=/tmp/jetty}
+[ -d "$TMPDIR" ] || mkdir -p $TMPDIR 2>/dev/null
+
+: ${JETTY_START:=$JETTY_BASE/jetty.start}
+
+case "$JAVA_OPTIONS" in
+	*-Djava.io.tmpdir=*) ;;
+	*) JAVA_OPTIONS="-Djava.io.tmpdir=$TMPDIR $JAVA_OPTIONS" ;;
+esac
+
+if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
+	# this is a command to run jetty
+
+	# check if it is a terminating command
+	for A in "$@" ; do
+		case $A in
+			--add-to-start* |\
+			--create-files |\
+			--create-startd |\
+			--download |\
+			--dry-run |\
+			--exec-print |\
+			--help |\
+			--info |\
+			--list-all-modules |\
+			--list-classpath |\
+			--list-config |\
+			--list-modules* |\
+			--stop |\
+			--update-ini |\
+			--version |\
+			-v )\
+			# It is a terminating command, so exec directly
+			exec "$@"
+		esac
+	done
+
+	if [ $(whoami) != "jetty" ]; then
+		cat >&2 <<- EOWARN
+			********************************************************************
+			WARNING: User is $(whoami)
+			         The user should be (re)set to 'jetty' in the Dockerfile
+			********************************************************************
+		EOWARN
+	fi
+
+	if [ -f $JETTY_START ] ; then
+		if [ $JETTY_BASE/start.d -nt $JETTY_START ] ; then
+			cat >&2 <<- EOWARN
+			********************************************************************
+			WARNING: The $JETTY_BASE/start.d directory has been modified since
+			         the $JETTY_START files was generated. Either delete 
+			         the $JETTY_START file or re-run 
+			             /generate-jetty.start.sh 
+			         from a Dockerfile
+			********************************************************************
+			EOWARN
+		fi
+		echo $(date +'%Y-%m-%d %H:%M:%S.000'):INFO:docker-entrypoint:jetty start from $JETTY_START
+		set -- $(cat $JETTY_START)
+	else
+		# Do a jetty dry run to set the final command
+		"$@" --dry-run > $JETTY_START
+		if [ $(egrep -v '\\$' $JETTY_START | wc -l ) -gt 1 ] ; then
+			# command was more than a dry-run
+			cat $JETTY_START \
+			| awk '/\\$/ { printf "%s", substr($0, 1, length($0)-1); next } 1' \
+			| egrep -v '[^ ]*java .* org\.eclipse\.jetty\.xml\.XmlConfiguration '
+			exit
+		fi
+		set -- $(sed 's/\\$//' $JETTY_START)
+	fi
+fi
+
+if [ "${1##*/}" = java -a -n "$JAVA_OPTIONS" ] ; then
+	java="$1"
+	shift
+	set -- "$java" $JAVA_OPTIONS "$@"
+fi
+
+exec "$@"
diff --git a/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/downloadsources.sh b/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/downloadsources.sh
deleted file mode 100644
index fb6de9ee66c0fad7e33345a89097d416919203c5..0000000000000000000000000000000000000000
--- a/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/downloadsources.sh
+++ /dev/null
@@ -1,23 +0,0 @@
-cd /
-git clone https://git.code.tecnalia.com/DECIDE_Public/DECIDE_Components.git AppController
-cd /AppController
-git checkout $APPMANAGER_VERSION
-cd /
-git clone https://git.code.tecnalia.com/DECIDE_Public/DECIDE_Components.git mcsla-core
-cd /mcsla-core
-git checkout $MCSLA_CORE_VERSION
-cd /
-git clone https://git.code.tecnalia.com/DECIDE_Public/DECIDE_Components.git  Telegraf_ConfigParser
-cd /Telegraf_ConfigParser
-git checkout $TELEGRAF_CONFIGPARSER_VERSION
-cd /
-git clone https://git.code.tecnalia.com/DECIDE_Public/DECIDE_Components.git  ACSmI_Discovery_Client
-cd /ACSmI_Discovery_Client
-git checkout $DISCOVERY_CLIENT_VERSION
-cd /
-git clone https://git.code.tecnalia.com/DECIDE_Public/DECIDE_Components.git WP5
-cd /WP5
-git checkout $WP5_VERSION
-git clone https://git.code.tecnalia.com/DECIDE_Public/DECIDE_Components.git WP4
-cd /WP4
-git checkout $WP4_VERSION
diff --git a/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/etc/decide/acsmimon.properties b/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/etc/decide/acsmimon.properties
new file mode 100644
index 0000000000000000000000000000000000000000..2fa5618f7d5a3268d0e5a5966e55216a4f1a58fe
--- /dev/null
+++ b/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/etc/decide/acsmimon.properties
@@ -0,0 +1,13 @@
+telegraf.conf.file = /etc/telegraf/telegraf.conf
+gitref=https://git.code.tecnalia.com/j2018b/106779.git
+credentialsmode=environment
+telegrafrestartscript=/telegrafrestart.sh
+acsmidiscovery=http://85.91.40.245:8087/acsmiservices
+violationhandler=http://85.91.40.245:8095/violationhandler
+dbURL= http://acsmi.influxdb:14086 
+dbUserName= root
+dbPassword = root
+dbName = decideh2020acsmi
+;acsmidiscoveryendpoint=acsmifrontend:8080/acsmiservices
+;adaptvhendpoint=http://85.91.40.245:8095/violationhandler
+; Vault credentials
\ No newline at end of file
diff --git a/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/etc/telegraf/telegraf.conf b/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/etc/telegraf/telegraf.conf
new file mode 100644
index 0000000000000000000000000000000000000000..877b7741e125c258ed3f0f43b2d0ea20a77cd3aa
--- /dev/null
+++ b/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/etc/telegraf/telegraf.conf
@@ -0,0 +1,168 @@
+# # Configuration for sending metrics to InfluxDB
+# Global tags can be specified here in key="value" format.
+[global_tags]
+  dc = "test 1"                         # will tag all metrics with dc=us-east-1
+  # rack = "1a"
+  ## Environment variables can be used as tags, and throughout the config file
+  # user = "$USER"
+  
+# [[outputs.influxdb]]
+#   ## The full HTTP or UDP URL for your InfluxDB instance.
+#   ##
+#   ## Multiple URLs can be specified for a single cluster, only ONE of the
+#   ## urls will be written to each interval.
+#   # urls = ["http://acsmi.influxdb:8086"] # required
+# 
+#   ## The target database for metrics; will be created as needed.
+#   ## For UDP url endpoint database needs to be configured on server side.
+#   # database = "decideh2020acsmi" # required
+# 
+#   ## The value of this tag will be used to determine the database. If this
+#   ## tag is not set the 'database' option is used as the default.
+#   # database_tag = ""
+# 
+#   ## If true, no CREATE DATABASE queries will be sent.  Set to true when using
+#   ## Telegraf with a user without permissions to create databases or when the
+#   ## database already exists.
+#   # skip_database_creation = false
+# 
+#   ## Name of existing retention policy to write to.  Empty string writes to
+#   ## the default retention policy.  Only takes effect when using HTTP.
+#   # retention_policy = ""
+# 
+#   ## Write consistency (clusters only), can be: "any", "one", "quorum", "all".
+#   ## Only takes effect when using HTTP.
+#   # write_consistency = "any"
+# 
+#   ## Timeout for HTTP messages.
+#   # timeout = "5s"
+# 
+#   ## HTTP Basic Auth
+#   # username = "telegraf"
+#   # password = "metricsmetricsmetricsmetrics"
+# 
+#   ## HTTP User-Agent
+#   # user_agent = "telegraf"
+# 
+#   ## UDP payload size is the maximum packet size to send.
+#   # udp_payload = "512B"
+# 
+#   ## Optional TLS Config for use on HTTP connections.
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#   ## Use TLS but skip chain & host verification
+#   # insecure_skip_verify = false
+# 
+#   ## HTTP Proxy override, if unset values the standard proxy environment
+#   ## variables are consulted to determine which proxy, if any, should be used.
+#   # http_proxy = "http://corporate.proxy:3128"
+# 
+#   ## Additional HTTP headers
+#   # http_headers = {"X-Special-Header" = "Special-Value"}
+# 
+#   ## HTTP Content-Encoding for write request body, can be set to "gzip" to
+#   ## compress body or "identity" to apply no encoding.
+#   # content_encoding = "identity"
+# 
+#   ## When true, Telegraf will output unsigned integers as unsigned values,
+#   ## i.e.: "42u".  You will need a version of InfluxDB supporting unsigned
+#   ## integer values.  Enabling this option will result in field type errors if
+#   ## existing data has been written.
+#   # influx_uint_support = false
+
+
+# # Read metrics about cpu usage
+# [[inputs.cpu]]
+#   ## Whether to report per-cpu stats or not
+#   # percpu = true
+#   ## Whether to report total system cpu stats or not
+#   # totalcpu = true
+#   ## If true, collect raw CPU time metrics.
+#   # collect_cpu_time = false
+#   ## If true, compute and report the sum of all non-idle CPU states.
+#   # report_active = false
+
+
+# Read metrics about disk usage by mount point
+# [[inputs.disk]]
+#   ## By default stats will be gathered for all mount points.
+#   ## Set mount_points will restrict the stats to only the specified mount points.
+#   # mount_points = ["/"]
+# 
+#   ## Ignore mount points by filesystem type.
+#   # ignore_fs = ["tmpfs", "devtmpfs", "devfs", "overlay", "aufs", "squashfs"]
+
+
+# Read metrics about memory usage
+# [[inputs.mem]]
+#   # no configuration
+
+
+# # HTTP/HTTPS request given an address a method and a timeout
+# [[inputs.http_response]]
+#   ## Server address (default http://localhost)
+#   # address = "http://localhost"
+#
+#   ## Set http_proxy (telegraf uses the system wide proxy settings if it's is not set)
+#   # http_proxy = "http://localhost:8888"
+#
+#   ## Set response_timeout (default 5 seconds)
+#   # response_timeout = "5s"
+#
+#   ## HTTP Request Method
+#   # method = "GET"
+#
+#   ## Whether to follow redirects from the server (defaults to false)
+#   # follow_redirects = false
+#
+#   ## Optional HTTP Request Body
+#   # body = '''
+#   # {'fake':'data'}
+#   # '''
+#
+#   ## Optional substring or regex match in body of the response
+#   # response_string_match = "\"service_status\": \"up\""
+#   # response_string_match = "ok"
+#   # response_string_match = "\".*_status\".?:.?\"up\""
+#
+#   ## Optional TLS Config
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#   ## Use TLS but skip chain & host verification
+#   # insecure_skip_verify = false
+#
+#   ## HTTP Request Headers (all values must be strings)
+#   # [inputs.http_response.headers]
+#   #   Host = "github.com"
+
+
+# # Ping given url(s) and return statistics
+# [[inputs.ping]]
+#   ## List of urls to ping
+#   # urls = ["example.org"]
+#
+#   ## Number of pings to send per collection (ping -c <COUNT>)
+#   # count = 1
+#
+#   ## Interval, in s, at which to ping. 0 == default (ping -i <PING_INTERVAL>)
+#   ## Not available in Windows.
+#   # ping_interval = 1.0
+#
+#   ## Per-ping timeout, in s. 0 == no timeout (ping -W <TIMEOUT>)
+#   # timeout = 1.0
+#
+#   ## Total-ping deadline, in s. 0 == no deadline (ping -w <DEADLINE>)
+#   # deadline = 10
+#
+#   ## Interface or source address to send ping from (ping -I <INTERFACE/SRC_ADDR>)
+#   ## on Darwin and Freebsd only source address possible: (ping -S <SRC_ADDR>)
+#   # interface = ""
+#
+#   ## Specify the ping executable binary, default is "ping"
+#   # binary = "ping"
+#
+#   ## Arguments for ping command
+#   ## when arguments is not empty, other options (ping_interval, timeout, etc) will be ignored
+#   # arguments = ["-c", "3"]
\ No newline at end of file
diff --git a/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/installtelegrafalpine.sh b/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/installtelegrafalpine.sh
new file mode 100644
index 0000000000000000000000000000000000000000..beacb56a94903e6a1cd4c077c2cabb3d61117086
--- /dev/null
+++ b/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/installtelegrafalpine.sh
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+#https://github.com/Docker-example/alpine-telegraf/blob/master/Dockerfile
+TIMEZONE=Europe/Paris
+TELEGRAF_VERSION=1.10.0
+
+# Work path
+mkdir -p /sources > /dev/null 2>&1 || true
+
+# Downloading Telegraf
+wget https://dl.influxdata.com/telegraf/releases/telegraf-${TELEGRAF_VERSION}-static_linux_amd64.tar.gz -P /sources > /dev/null 2>&1 || true
+
+# Installing packages
+tar -C /sources -xzf /sources/telegraf-${TELEGRAF_VERSION}-static_linux_amd64.tar.gz > /dev/null 2>&1 || true
+chmod +x /sources/telegraf/*  > /dev/null 2>&1 || true
+cp /sources/telegraf/telegraf /usr/bin/  > /dev/null 2>&1 || true
+mkdir /etc/telegraf  > /dev/null 2>&1 || true
+cp /sources/telegraf/telegraf.conf /etc/telegraf/  > /dev/null 2>&1 || true
+rm -rf /sources
diff --git a/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/maveninstall.sh b/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/maveninstall.sh
deleted file mode 100644
index e732abfd6cb0dd8bf1e89c5f912c6969764cb4d0..0000000000000000000000000000000000000000
--- a/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/maveninstall.sh
+++ /dev/null
@@ -1,13 +0,0 @@
-cd /AppController
-mvn install -Dmaven.test.skip=true
-cd /mcsla-core
-mvn install -Dmaven.test.skip=true
-cd /Telegraf_ConfigParser/Telegraf_ConfigParser
-mvn install -Dmaven.test.skip=true
-cd /ACSmI_Discovery_Client/ACSmI_discovery/eu.decideh2020.acsmi.backend.services.client
-mvn install -Dmaven.test.skip=true
-cd /WP5/ACSmI_monitoring/eu.decideh2020.acsmi.monitoring.server
-mvn install -Dmaven.test.skip=true
-cd /WP4/ACSmI_monitoring/eu.decideh2020.adapt.violationhandler.client
-mvn install -Dmaven.test.skip=true
-
diff --git a/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/moveappwar.sh b/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/moveappwar.sh
new file mode 100644
index 0000000000000000000000000000000000000000..07ef1909223c63502219db61c47130b3e7ddfc75
--- /dev/null
+++ b/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/moveappwar.sh
@@ -0,0 +1,6 @@
+#!/bin/bash
+sourcespath=$1
+project=$2
+echo "sourcespath $sourcespath"
+echo "project $project"
+cp $sourcespath/$project/target/*.war /app.war || true
diff --git a/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/processSource.sh b/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/processSource.sh
new file mode 100644
index 0000000000000000000000000000000000000000..433cea8f24c7f9d95a91514de85b3e2bd93a71fa
--- /dev/null
+++ b/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/processSource.sh
@@ -0,0 +1,50 @@
+#!/bin/bash -e
+
+if [ $# -lt 5 ]; then
+    echo "Arguments required: dockerRepoUrl projectPath gitRef mavenParams"
+fi
+
+dockerRepoUrl=$1
+projectPath=$2
+gitRef=$3
+gitCredentials=$4
+mavenParams=$5
+repofix=$dockerRepoUrl
+
+[ -d /sources ] || mkdir -p /sources
+
+#phase 1 clone repo if necesary
+repo_dir=`echo $dockerRepoUrl | sed 's%^.*/\([^/]*\)\.git$%\1%g'`
+echo "Git repository: $dockerRepoUrl"
+echo "repository dir: $repo_dir"
+if [ "$VERSION" != "local" ] && [ ! -d /sources/$repo_dir/.git ]; then
+	echo "Enter to clone repo..."
+	rm -rf /sources/$repo_dir/* > /dev/null 2>&1 || true
+	if [[ ! -z "$gitCredentials" ]]; then
+		repofix=${repofix/https:\/\//https:\/\/$gitCredentials@}
+	fi
+	git clone "$repofix" /sources/$repo_dir
+	echo "repository cloned"
+else
+	echo "repository found in local folder: $repo_dir"
+fi
+
+#phase 2 checkout right version
+if [ "$VERSION" != "local" ] && [ ! -z "$gitRef" ]; then
+	echo "checking out: $gitRef"
+	git -C /sources/$repo_dir checkout $gitRef --force
+fi
+
+#phase 3 config 
+/config.sh /sources/$repo_dir $projectPath
+
+#phase 4 mvn 
+#NOTE jhipster bower instalation requires a file /root/.bowerrc to be run as root
+if [[ ! -z "$mavenParams" ]]; then
+	echo "maven execution: -f sources/$repo_dir/$projectPath/pom.xml  $mavenParams"
+	mvn  -f /sources/$repo_dir/$projectPath/pom.xml $mavenParams || true
+	#because jhister
+fi
+
+#phase 5 move app war 
+/moveappwar.sh /sources/$repo_dir $projectPath
diff --git a/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/processSourcesJson.py b/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/processSourcesJson.py
new file mode 100644
index 0000000000000000000000000000000000000000..674930941ff948eaf85a0ec23dec4d79686f6f3c
--- /dev/null
+++ b/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/processSourcesJson.py
@@ -0,0 +1,9 @@
+import json
+import subprocess
+import os
+
+with open('/sources.json', 'r') as handle:
+    parsed = json.load(handle)
+    for source in parsed['sources']:
+        subprocess.check_call(['/processSource.sh',source['source']['repo'],source['source']['path'],os.getenv(source['source']['git_ref'],''),os.getenv(source['source']['git_credentials'],''),source['source']['maven']])
+
diff --git a/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/root/.m2/settings-security.xml b/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/root/.m2/settings-security.xml
new file mode 100644
index 0000000000000000000000000000000000000000..663d9c91ac87740dfecdba5f1da1c113d9379c6f
--- /dev/null
+++ b/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/root/.m2/settings-security.xml
@@ -0,0 +1,3 @@
+<settingsSecurity>
+<master>${env.MAVEN_MASTER_PASSWORD}</master>
+</settingsSecurity>
\ No newline at end of file
diff --git a/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/settings-security.xml b/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/settings-security.xml
new file mode 100644
index 0000000000000000000000000000000000000000..663d9c91ac87740dfecdba5f1da1c113d9379c6f
--- /dev/null
+++ b/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/settings-security.xml
@@ -0,0 +1,3 @@
+<settingsSecurity>
+<master>${env.MAVEN_MASTER_PASSWORD}</master>
+</settingsSecurity>
\ No newline at end of file
diff --git a/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/settings.xml b/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/settings.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0a4df6f659d664ce3eb0e4c6cfdfb8c5ccef3ee7
--- /dev/null
+++ b/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/settings.xml
@@ -0,0 +1,306 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+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.
+-->
+
+<!--
+ | This is the configuration file for Maven. It can be specified at two levels:
+ |
+ |  1. User Level. This settings.xml file provides configuration for a single user,
+ |                 and is normally provided in ${user.home}/.m2/settings.xml.
+ |
+ |                 NOTE: This location can be overridden with the CLI option:
+ |
+ |                 -s /path/to/user/settings.xml
+ |
+ |  2. Global Level. This settings.xml file provides configuration for all Maven
+ |                 users on a machine (assuming they're all using the same Maven
+ |                 installation). It's normally provided in
+ |                 ${maven.conf}/settings.xml.
+ |
+ |                 NOTE: This location can be overridden with the CLI option:
+ |
+ |                 -gs /path/to/global/settings.xml
+ |
+ | The sections in this sample file are intended to give you a running start at
+ | getting the most out of your Maven installation. Where appropriate, the default
+ | values (values used when the setting is not specified) are provided.
+ |
+ |-->
+<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
+          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
+  <!-- localRepository
+   | The path to the local repository maven will use to store artifacts.
+   |
+   | Default: ${user.home}/.m2/repository
+  <localRepository>/path/to/local/repo</localRepository>
+  -->
+
+  <!-- interactiveMode
+   | This will determine whether maven prompts you when it needs input. If set to false,
+   | maven will use a sensible default value, perhaps based on some other setting, for
+   | the parameter in question.
+   |
+   | Default: true
+  <interactiveMode>true</interactiveMode>
+  -->
+
+  <!-- offline
+   | Determines whether maven should attempt to connect to the network when executing a build.
+   | This will have an effect on artifact downloads, artifact deployment, and others.
+   |
+   | Default: false
+  <offline>false</offline>
+  -->
+
+  <!-- pluginGroups
+   | This is a list of additional group identifiers that will be searched when resolving plugins by their prefix, i.e.
+   | when invoking a command line like "mvn prefix:goal". Maven will automatically add the group identifiers
+   | "org.apache.maven.plugins" and "org.codehaus.mojo" if these are not already contained in the list.
+   |-->
+  <pluginGroups>
+    <!-- pluginGroup
+     | Specifies a further group identifier to use for plugin lookup.
+    <pluginGroup>com.your.plugins</pluginGroup>
+    -->
+  </pluginGroups>
+
+  <!-- proxies
+   | This is a list of proxies which can be used on this machine to connect to the network.
+   | Unless otherwise specified (by system property or command-line switch), the first proxy
+   | specification in this list marked as active will be used.
+   |-->
+  <proxies>
+    <!-- proxy
+     | Specification for one proxy, to be used in connecting to the network.
+     |
+    <proxy>
+      <id>optional</id>
+      <active>true</active>
+      <protocol>http</protocol>
+      <username>proxyuser</username>
+      <password>proxypass</password>
+      <host>proxy.host.net</host>
+      <port>80</port>
+      <nonProxyHosts>local.net|some.host.com</nonProxyHosts>
+    </proxy>
+    -->
+  </proxies>
+
+  <!-- servers
+   | This is a list of authentication profiles, keyed by the server-id used within the system.
+   | Authentication profiles can be used whenever maven must make a connection to a remote server.
+   |-->
+  <servers>
+    <server>
+      <username>${env.MAVEN_USER}</username>
+      <password>${env.MAVEN_PASSWORD}</password>
+      <id>central</id>
+    </server>
+    <server>
+      <username>${env.MAVEN_USER}</username>
+      <password>${env.MAVEN_PASSWORD}</password>
+      <id>snapshots</id>
+    </server>
+  
+    <!-- server
+     | Specifies the authentication information to use when connecting to a particular server, identified by
+     | a unique name within the system (referred to by the 'id' attribute below).
+     |
+     | NOTE: You should either specify username/password OR privateKey/passphrase, since these pairings are
+     |       used together.
+     |
+    <server>
+      <id>deploymentRepo</id>
+      <username>repouser</username>
+      <password>repopwd</password>
+    </server>
+    -->
+
+    <!-- Another sample, using keys to authenticate.
+    <server>
+      <id>siteServer</id>
+      <privateKey>/path/to/private/key</privateKey>
+      <passphrase>optional; leave empty if not used.</passphrase>
+    </server>
+    -->
+  </servers>
+
+  <!-- mirrors
+   | This is a list of mirrors to be used in downloading artifacts from remote repositories.
+   |
+   | It works like this: a POM may declare a repository to use in resolving certain artifacts.
+   | However, this repository may have problems with heavy traffic at times, so people have mirrored
+   | it to several places.
+   |
+   | That repository definition will have a unique id, so we can create a mirror reference for that
+   | repository, to be used as an alternate download site. The mirror site will be the preferred
+   | server for that repository.
+   |-->
+  <mirrors>
+    <!-- mirror
+     | Specifies a repository mirror site to use instead of a given repository. The repository that
+     | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
+     | for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
+     |
+    <mirror>
+      <id>mirrorId</id>
+      <mirrorOf>repositoryId</mirrorOf>
+      <name>Human Readable Name for this Mirror.</name>
+      <url>http://my.repository.com/repo/path</url>
+    </mirror>
+     -->
+  </mirrors>
+
+  <!-- profiles
+   | This is a list of profiles which can be activated in a variety of ways, and which can modify
+   | the build process. Profiles provided in the settings.xml are intended to provide local machine-
+   | specific paths and repository locations which allow the build to work in the local environment.
+   |
+   | For example, if you have an integration testing plugin - like cactus - that needs to know where
+   | your Tomcat instance is installed, you can provide a variable here such that the variable is
+   | dereferenced during the build process to configure the cactus plugin.
+   |
+   | As noted above, profiles can be activated in a variety of ways. One way - the activeProfiles
+   | section of this document (settings.xml) - will be discussed later. Another way essentially
+   | relies on the detection of a system property, either matching a particular value for the property,
+   | or merely testing its existence. Profiles can also be activated by JDK version prefix, where a
+   | value of '1.4' might activate a profile when the build is executed on a JDK version of '1.4.2_07'.
+   | Finally, the list of active profiles can be specified directly from the command line.
+   |
+   | NOTE: For profiles defined in the settings.xml, you are restricted to specifying only artifact
+   |       repositories, plugin repositories, and free-form properties to be used as configuration
+   |       variables for plugins in the POM.
+   |
+   |-->
+  <profiles>
+    <profile>
+      <repositories>
+        <repository>
+          <snapshots>
+            <enabled>false</enabled>
+          </snapshots>
+          <id>central</id>
+          <name>${env.ARTIFACTORY_MAVEN_REPO}</name>
+          <url>https://artifact.tecnalia.com:443/${env.ARTIFACTORY_MAVEN_REPO}</url>
+        </repository>
+        <repository>
+          <snapshots />
+          <id>snapshots</id>
+          <name>${env.ARTIFACTORY_MAVEN_REPO}</name>
+          <url>https://artifact.tecnalia.com:443/${env.ARTIFACTORY_MAVEN_REPO}</url>
+        </repository>
+      </repositories>
+      <pluginRepositories>
+        <pluginRepository>
+          <snapshots>
+            <enabled>false</enabled>
+          </snapshots>
+          <id>central</id>
+          <name>${env.ARTIFACTORY_MAVEN_REPO}</name>
+          <url>https://artifact.tecnalia.com:443/${env.ARTIFACTORY_MAVEN_REPO}</url>
+        </pluginRepository>
+        <pluginRepository>
+          <snapshots />
+          <id>snapshots</id>
+          <name>${env.ARTIFACTORY_MAVEN_REPO}</name>
+          <url>https://artifact.tecnalia.com:443/${env.ARTIFACTORY_MAVEN_REPO}</url>
+        </pluginRepository>
+      </pluginRepositories>
+      <id>artifactory</id>
+    </profile>
+    <!-- profile
+     | Specifies a set of introductions to the build process, to be activated using one or more of the
+     | mechanisms described above. For inheritance purposes, and to activate profiles via <activatedProfiles/>
+     | or the command line, profiles have to have an ID that is unique.
+     |
+     | An encouraged best practice for profile identification is to use a consistent naming convention
+     | for profiles, such as 'env-dev', 'env-test', 'env-production', 'user-jdcasey', 'user-brett', etc.
+     | This will make it more intuitive to understand what the set of introduced profiles is attempting
+     | to accomplish, particularly when you only have a list of profile id's for debug.
+     |
+     | This profile example uses the JDK version to trigger activation, and provides a JDK-specific repo.
+    <profile>
+      <id>jdk-1.4</id>
+
+      <activation>
+        <jdk>1.4</jdk>
+      </activation>
+
+      <repositories>
+        <repository>
+          <id>jdk14</id>
+          <name>Repository for JDK 1.4 builds</name>
+          <url>http://www.myhost.com/maven/jdk14</url>
+          <layout>default</layout>
+          <snapshotPolicy>always</snapshotPolicy>
+        </repository>
+      </repositories>
+    </profile>
+    -->
+
+    <!--
+     | Here is another profile, activated by the system property 'target-env' with a value of 'dev',
+     | which provides a specific path to the Tomcat instance. To use this, your plugin configuration
+     | might hypothetically look like:
+     |
+     | ...
+     | <plugin>
+     |   <groupId>org.myco.myplugins</groupId>
+     |   <artifactId>myplugin</artifactId>
+     |
+     |   <configuration>
+     |     <tomcatLocation>${tomcatPath}</tomcatLocation>
+     |   </configuration>
+     | </plugin>
+     | ...
+     |
+     | NOTE: If you just wanted to inject this configuration whenever someone set 'target-env' to
+     |       anything, you could just leave off the <value/> inside the activation-property.
+     |
+    <profile>
+      <id>env-dev</id>
+
+      <activation>
+        <property>
+          <name>target-env</name>
+          <value>dev</value>
+        </property>
+      </activation>
+
+      <properties>
+        <tomcatPath>/path/to/tomcat/instance</tomcatPath>
+      </properties>
+    </profile>
+    -->
+  </profiles>
+
+  <activeProfiles>
+    <activeProfile>artifactory</activeProfile>
+  </activeProfiles>
+  <!-- activeProfiles
+   | List of profiles that are active for all builds.
+   |
+  <activeProfiles>
+    <activeProfile>alwaysActiveProfile</activeProfile>
+    <activeProfile>anotherAlwaysActiveProfile</activeProfile>
+  </activeProfiles>
+  -->
+</settings>
diff --git a/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/sources.json b/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/sources.json
new file mode 100644
index 0000000000000000000000000000000000000000..e69b6d1c71b5847eca8f85f3f02dca04b704e3c7
--- /dev/null
+++ b/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/sources.json
@@ -0,0 +1,58 @@
+{
+	"sources": [
+		{
+			"source": {
+				"repo": "https://git.code.tecnalia.com/DECIDE_Public/DECIDE_Components.git",
+				"path": "AppController",
+				"git_ref": "APP_MANAGER_GIT_REF",
+				"git_credentials": "GIT_CREDENTIALS",
+				"maven": "install -Dmaven.test.skip=true -DskipTests"
+			}
+		},
+		{
+			"source": {
+				"repo": "https://git.code.tecnalia.com/DECIDE_Public/DECIDE_Components.git",
+				"path": "MCSLA/mcsla_core",
+				"git_ref": "MCSLA_CORE_GIT_REF",
+				"git_credentials": "GIT_CREDENTIALS",
+				"maven": "install -Dmaven.test.skip=true -DskipTests"
+			}
+		},
+		{
+			"source": {
+				"repo": "https://git.code.tecnalia.com/DECIDE_Public/DECIDE_Components.git",
+				"path": "ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client",
+				"git_ref": "ACSMI_BACKEND_CLIENT_GIT_REF",
+				"git_credentials": "GIT_CREDENTIALS",
+				"maven": "install -Dmaven.test.skip=true -DskipTests"
+			}
+		},
+		{
+			"source": {
+				"repo": "https://git.code.tecnalia.com/DECIDE_Public/DECIDE_Components.git",
+				"path": "ACSmI/Telegraf_ConfigParser",
+				"git_ref": "TELEGRAF_CONFIG_GIT_REF",
+				"git_credentials": "GIT_CREDENTIALS",
+				"maven": "install -Dmaven.test.skip=true -DskipTests"
+			}
+		},
+		{
+			"source": {
+				"repo": "https://git.code.tecnalia.com/DECIDE_Public/DECIDE_Components.git",
+				"path": "ADAPT/Monitoring/eu.decideh2020.violationhandler.client",
+				"git_ref": "VIOLATION_HANDLER_GIT_REF",
+				"git_credentials": "GIT_CREDENTIALS",
+				"maven": "install -Dmaven.test.skip=true -DskipTests"
+			}
+		},
+		{
+			"source": {
+				"repo": "https://git.code.tecnalia.com/DECIDE_Public/DECIDE_Components.gitt",
+				"path": "ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.server",
+				"git_ref": "ACSMI_MONITORING_GIT_REF",
+				"git_credentials": "GIT_CREDENTIALS",
+				"maven": "package war:war -Dmaven.test.skip=true -DskipTests"
+			}
+		}
+	]
+} 
\ No newline at end of file
diff --git a/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/telegrafrestart.sh b/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/telegrafrestart.sh
new file mode 100644
index 0000000000000000000000000000000000000000..780a82654c40f830c44e444b753b6ecb104cabe8
--- /dev/null
+++ b/ACSmI/Monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker/telegrafrestart.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+pkill -f "/usr/bin/telegraf"
+/usr/bin/telegraf
\ No newline at end of file
diff --git a/ACSmI/Telegraf_ConfigParser/.classpath b/ACSmI/Telegraf_ConfigParser/.classpath
index 4af86cd3920ae7538706a9b69aa4baabb13f24c3..dd902dc8bca6468ca4a42d43985425b55bb0ad10 100644
--- a/ACSmI/Telegraf_ConfigParser/.classpath
+++ b/ACSmI/Telegraf_ConfigParser/.classpath
@@ -1,26 +1,26 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" output="target/classes" path="src/main/java">
-		<attributes>
-			<attribute name="optional" value="true"/>
-			<attribute name="maven.pomderived" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5">
-		<attributes>
-			<attribute name="maven.pomderived" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
-		<attributes>
-			<attribute name="maven.pomderived" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
-		<attributes>
-			<attribute name="optional" value="true"/>
-			<attribute name="maven.pomderived" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="output" path="target/classes"/>
-</classpath>
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" output="target/classes" path="src/main/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/ACSmI/Telegraf_ConfigParser/.project b/ACSmI/Telegraf_ConfigParser/.project
index ff4f0204495db558eec50ec3723ef51a97e6402b..fc5f961a6ce4229de44df19f25e9a328ddaadcba 100644
--- a/ACSmI/Telegraf_ConfigParser/.project
+++ b/ACSmI/Telegraf_ConfigParser/.project
@@ -1,23 +1,23 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>eu.decideh2020.telegraf.configparser</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.m2e.core.maven2Builder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.eclipse.m2e.core.maven2Nature</nature>
-	</natures>
-</projectDescription>
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>eu.decideh2020.telegraf.configparser</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+	</natures>
+</projectDescription>
diff --git a/ACSmI/Telegraf_ConfigParser/.settings/org.eclipse.core.resources.prefs b/ACSmI/Telegraf_ConfigParser/.settings/org.eclipse.core.resources.prefs
index e9441bb123ec3e1ab029c7eac896bc45681d9a71..654c1750cd616af1513cfe582c11d97cad5788d5 100644
--- a/ACSmI/Telegraf_ConfigParser/.settings/org.eclipse.core.resources.prefs
+++ b/ACSmI/Telegraf_ConfigParser/.settings/org.eclipse.core.resources.prefs
@@ -1,3 +1,3 @@
-eclipse.preferences.version=1
-encoding//src/main/java=UTF-8
-encoding/<project>=UTF-8
+eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding/<project>=UTF-8
diff --git a/ACSmI/Telegraf_ConfigParser/.settings/org.eclipse.jdt.core.prefs b/ACSmI/Telegraf_ConfigParser/.settings/org.eclipse.jdt.core.prefs
index abec6ca389ac6331e1f6466d9f67c8dd3406fb5a..8626026241ca3a932faeabe3cecd565331484e46 100644
--- a/ACSmI/Telegraf_ConfigParser/.settings/org.eclipse.jdt.core.prefs
+++ b/ACSmI/Telegraf_ConfigParser/.settings/org.eclipse.jdt.core.prefs
@@ -1,5 +1,5 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
-org.eclipse.jdt.core.compiler.compliance=1.5
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
-org.eclipse.jdt.core.compiler.source=1.5
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/ACSmI/Telegraf_ConfigParser/.settings/org.eclipse.m2e.core.prefs b/ACSmI/Telegraf_ConfigParser/.settings/org.eclipse.m2e.core.prefs
index f897a7f1cb2389f85fe6381425d29f0a9866fb65..14b697b7bbb0d85e8d8ee19141a2a92d9ce211be 100644
--- a/ACSmI/Telegraf_ConfigParser/.settings/org.eclipse.m2e.core.prefs
+++ b/ACSmI/Telegraf_ConfigParser/.settings/org.eclipse.m2e.core.prefs
@@ -1,4 +1,4 @@
-activeProfiles=
-eclipse.preferences.version=1
-resolveWorkspaceProjects=true
-version=1
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/ACSmI/Telegraf_ConfigParser/dist/Telegraf_ConfigParser.jar b/ACSmI/Telegraf_ConfigParser/dist/Telegraf_ConfigParser.jar
index 79e7c86d1796451dece0fface7ecb7089d1b846f..5d09659a00db1c6de1121d384376158fc9740c2a 100644
Binary files a/ACSmI/Telegraf_ConfigParser/dist/Telegraf_ConfigParser.jar and b/ACSmI/Telegraf_ConfigParser/dist/Telegraf_ConfigParser.jar differ
diff --git a/ACSmI/Telegraf_ConfigParser/pom.xml b/ACSmI/Telegraf_ConfigParser/pom.xml
index 93edb0498b6a8bfcbeb94e8d5d55e11c9ab6e456..458ae070220db07171fad821095a8140a48fdf33 100644
--- a/ACSmI/Telegraf_ConfigParser/pom.xml
+++ b/ACSmI/Telegraf_ConfigParser/pom.xml
@@ -1,20 +1,20 @@
-<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>eu.decideh2020</groupId>
-  <artifactId>eu.decideh2020.telegraf.configparser</artifactId>
-  <version>0.0.1-SNAPSHOT</version>
-  <packaging>jar</packaging>
-
-  <name>eu.decideh2020.telegraf.configparser</name>
-  <url>http://maven.apache.org</url>
-
-  <properties>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-  </properties>
-
-  <dependencies>
-    
-  </dependencies>
-</project>
+<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>eu.decideh2020</groupId>
+  <artifactId>eu.decideh2020.telegraf.configparser</artifactId>
+  <version>0.0.1-SNAPSHOT</version>
+  <packaging>jar</packaging>
+
+  <name>eu.decideh2020.telegraf.configparser</name>
+  <url>http://maven.apache.org</url>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+
+  <dependencies>
+    
+  </dependencies>
+</project>
diff --git a/ACSmI/Telegraf_ConfigParser/resources/telegraf.conf b/ACSmI/Telegraf_ConfigParser/resources/telegraf.conf
index e0741ac57939a8520bf4462768206293bb3a3fad..ef69cd29437920dd8d744fc6377e9b9d9ad406f1 100644
--- a/ACSmI/Telegraf_ConfigParser/resources/telegraf.conf
+++ b/ACSmI/Telegraf_ConfigParser/resources/telegraf.conf
@@ -1,71 +1,168 @@
-##/****************************************************************
-##*Copyright (c) 2017 Tecnalia.
-##*Licensed under MIT License (the "License");
-##*Permission is hereby granted, free of charge, to any person obtaining a copy 
-##of this software and associated documentation files (the "Software"), to deal 
-##in the Software without restriction, including without limitation the rights 
-##to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
-##copies of the Software, and to permit persons to whom the Software is furnished 
-##to do so, subject to the following conditions:
-##*The above copyright notice and this permission notice shall be included in all 
-##copies or substantial portions of the Software.
-##*
-##*
-##*THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 
-##INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 
-##PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 
-##HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 
-##CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 
-##OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-##
-##*Contributors (in alphabetical order):
-##*Alberto Molinuevo                              Tecnalia
-##*Gorka Benguria                                 Tecnalia
-##*I�aki Etxaniz                                  Tecnalia
-##*Juncal Alonso                                  Tecnalia
-##*Leire Orue-Echevarria                          Tecnalia
-##*Maria Jose Lopez                               Tecnalia
-##*Marisa Escalante                               Tecnalia
-##*
-##*Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
-##*****************************************************************************/
+# Global tags can be specified here in key="value" format.
+[global_tags]
+  dc = "us-east-1" # will tag all metrics with dc=us-east-1
+  # rack = "1a"
+  ## Environment variables can be used as tags, and throughout the config file
+  # user = "$USER"
 
+# # Configuration for sending metrics to InfluxDB
+# [[outputs.influxdb]]
+#   ## The full HTTP or UDP URL for your InfluxDB instance.
+#   ##
+#   ## Multiple URLs can be specified for a single cluster, only ONE of the
+#   ## urls will be written to each interval.
+#   # urls = ["http://acsmi.influxdb:8086"] # required
+# 
+#   ## The target database for metrics; will be created as needed.
+#   ## For UDP url endpoint database needs to be configured on server side.
+#   # database = "decideh2020acsmi" # required
+# 
+#   ## The value of this tag will be used to determine the database. If this
+#   ## tag is not set the 'database' option is used as the default.
+#   # database_tag = ""
+# 
+#   ## If true, no CREATE DATABASE queries will be sent.  Set to true when using
+#   ## Telegraf with a user without permissions to create databases or when the
+#   ## database already exists.
+#   # skip_database_creation = false
+# 
+#   ## Name of existing retention policy to write to.  Empty string writes to
+#   ## the default retention policy.  Only takes effect when using HTTP.
+#   # retention_policy = ""
+# 
+#   ## Write consistency (clusters only), can be: "any", "one", "quorum", "all".
+#   ## Only takes effect when using HTTP.
+#   # write_consistency = "any"
+# 
+#   ## Timeout for HTTP messages.
+#   # timeout = "5s"
+# 
+#   ## HTTP Basic Auth
+#   # username = "telegraf"
+#   # password = "metricsmetricsmetricsmetrics"
+# 
+#   ## HTTP User-Agent
+#   # user_agent = "telegraf"
+# 
+#   ## UDP payload size is the maximum packet size to send.
+#   # udp_payload = "512B"
+# 
+#   ## Optional TLS Config for use on HTTP connections.
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#   ## Use TLS but skip chain & host verification
+#   # insecure_skip_verify = false
+# 
+#   ## HTTP Proxy override, if unset values the standard proxy environment
+#   ## variables are consulted to determine which proxy, if any, should be used.
+#   # http_proxy = "http://corporate.proxy:3128"
+# 
+#   ## Additional HTTP headers
+#   # http_headers = {"X-Special-Header" = "Special-Value"}
+# 
+#   ## HTTP Content-Encoding for write request body, can be set to "gzip" to
+#   ## compress body or "identity" to apply no encoding.
+#   # content_encoding = "identity"
+# 
+#   ## When true, Telegraf will output unsigned integers as unsigned values,
+#   ## i.e.: "42u".  You will need a version of InfluxDB supporting unsigned
+#   ## integer values.  Enabling this option will result in field type errors if
+#   ## existing data has been written.
+#   # influx_uint_support = false
 
 
-# Telegraf Configuration
+# # Read metrics about cpu usage
+# [[inputs.cpu]]
+#   ## Whether to report per-cpu stats or not
+#   # percpu = true
+#   ## Whether to report total system cpu stats or not
+#   # totalcpu = true
+#   ## If true, collect raw CPU time metrics.
+#   # collect_cpu_time = false
+#   ## If true, compute and report the sum of all non-idle CPU states.
+#   # report_active = false
+
+
+# Read metrics about disk usage by mount point
+# [[inputs.disk]]
+#   ## By default stats will be gathered for all mount points.
+#   ## Set mount_points will restrict the stats to only the specified mount points.
+#   # mount_points = ["/"]
+# 
+#   ## Ignore mount points by filesystem type.
+#   # ignore_fs = ["tmpfs", "devtmpfs", "devfs", "overlay", "aufs", "squashfs"]
+
+
+# Read metrics about memory usage
+# [[inputs.mem]]
+#   # no configuration
+
+
+# # HTTP/HTTPS request given an address a method and a timeout
+# [[inputs.http_response]]
+#   ## Server address (default http://localhost)
+#   # address = "http://localhost"
 #
-# Telegraf is entirely plugin driven. All metrics are gathered from the
-# declared inputs, and sent to the declared outputs.
+#   ## Set http_proxy (telegraf uses the system wide proxy settings if it's is not set)
+#   # http_proxy = "http://localhost:8888"
 #
-# Plugins must be declared in here to be active.
-# To deactivate a plugin, comment out the name and any variables.
+#   ## Set response_timeout (default 5 seconds)
+#   # response_timeout = "5s"
 #
-# Use 'telegraf -config telegraf.conf -test' to see what metrics a config
-# file would generate.
+#   ## HTTP Request Method
+#   # method = "GET"
 #
-# Environment variables can be used anywhere in this config file, simply prepend
-# them with $. For strings the variable must be within quotes (ie, "$STR_VAR"),
-# for numbers and booleans they should be plain (ie, $INT_VAR, $BOOL_VAR)
-
+#   ## Whether to follow redirects from the server (defaults to false)
+#   # follow_redirects = false
+#
+#   ## Optional HTTP Request Body
+#   # body = '''
+#   # {'fake':'data'}
+#   # '''
+#
+#   ## Optional substring or regex match in body of the response
+#   # response_string_match = "\"service_status\": \"up\""
+#   # response_string_match = "ok"
+#   # response_string_match = "\".*_status\".?:.?\"up\""
+#
+#   ## Optional TLS Config
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#   ## Use TLS but skip chain & host verification
+#   # insecure_skip_verify = false
+#
+#   ## HTTP Request Headers (all values must be strings)
+#   # [inputs.http_response.headers]
+#   #   Host = "github.com"
 
-###############################################################################
-#                            INPUT PLUGINS                                    #
-###############################################################################
 
 # # Ping given url(s) and return statistics
 # [[inputs.ping]]
-#   ## NOTE: this plugin forks the ping command. You may need to set capabilities
-#   ## via setcap cap_net_raw+p /bin/ping
-#   #
 #   ## List of urls to ping
-#   urls = ["www.google.com"]    # required
-#   ## number of pings to send per collection (ping -c <COUNT>)
-#   count = 1
-#   ## interval, in s, at which to ping. 0 == default (ping -i <PING_INTERVAL>)
-#   ping_interval = 1.0
-#   ## per-ping timeout, in s. 0 == no timeout (ping -W <TIMEOUT>)
-#   timeout = 1.5
-#   ## interface to send ping from (ping -I <INTERFACE>)
-#   interface = ""
-
-
+#   # urls = ["example.org"]
+#
+#   ## Number of pings to send per collection (ping -c <COUNT>)
+#   # count = 1
+#
+#   ## Interval, in s, at which to ping. 0 == default (ping -i <PING_INTERVAL>)
+#   ## Not available in Windows.
+#   # ping_interval = 1.0
+#
+#   ## Per-ping timeout, in s. 0 == no timeout (ping -W <TIMEOUT>)
+#   # timeout = 1.0
+#
+#   ## Total-ping deadline, in s. 0 == no deadline (ping -w <DEADLINE>)
+#   # deadline = 10
+#
+#   ## Interface or source address to send ping from (ping -I <INTERFACE/SRC_ADDR>)
+#   ## on Darwin and Freebsd only source address possible: (ping -S <SRC_ADDR>)
+#   # interface = ""
+#
+#   ## Specify the ping executable binary, default is "ping"
+#   # binary = "ping"
+#
+#   ## Arguments for ping command
+#   ## when arguments is not empty, other options (ping_interval, timeout, etc) will be ignored
+#   # arguments = ["-c", "3"]
\ No newline at end of file
diff --git a/ACSmI/Telegraf_ConfigParser/resources/telegraf.conf_new_template b/ACSmI/Telegraf_ConfigParser/resources/telegraf.conf_new_template
new file mode 100644
index 0000000000000000000000000000000000000000..ef69cd29437920dd8d744fc6377e9b9d9ad406f1
--- /dev/null
+++ b/ACSmI/Telegraf_ConfigParser/resources/telegraf.conf_new_template
@@ -0,0 +1,168 @@
+# Global tags can be specified here in key="value" format.
+[global_tags]
+  dc = "us-east-1" # will tag all metrics with dc=us-east-1
+  # rack = "1a"
+  ## Environment variables can be used as tags, and throughout the config file
+  # user = "$USER"
+
+# # Configuration for sending metrics to InfluxDB
+# [[outputs.influxdb]]
+#   ## The full HTTP or UDP URL for your InfluxDB instance.
+#   ##
+#   ## Multiple URLs can be specified for a single cluster, only ONE of the
+#   ## urls will be written to each interval.
+#   # urls = ["http://acsmi.influxdb:8086"] # required
+# 
+#   ## The target database for metrics; will be created as needed.
+#   ## For UDP url endpoint database needs to be configured on server side.
+#   # database = "decideh2020acsmi" # required
+# 
+#   ## The value of this tag will be used to determine the database. If this
+#   ## tag is not set the 'database' option is used as the default.
+#   # database_tag = ""
+# 
+#   ## If true, no CREATE DATABASE queries will be sent.  Set to true when using
+#   ## Telegraf with a user without permissions to create databases or when the
+#   ## database already exists.
+#   # skip_database_creation = false
+# 
+#   ## Name of existing retention policy to write to.  Empty string writes to
+#   ## the default retention policy.  Only takes effect when using HTTP.
+#   # retention_policy = ""
+# 
+#   ## Write consistency (clusters only), can be: "any", "one", "quorum", "all".
+#   ## Only takes effect when using HTTP.
+#   # write_consistency = "any"
+# 
+#   ## Timeout for HTTP messages.
+#   # timeout = "5s"
+# 
+#   ## HTTP Basic Auth
+#   # username = "telegraf"
+#   # password = "metricsmetricsmetricsmetrics"
+# 
+#   ## HTTP User-Agent
+#   # user_agent = "telegraf"
+# 
+#   ## UDP payload size is the maximum packet size to send.
+#   # udp_payload = "512B"
+# 
+#   ## Optional TLS Config for use on HTTP connections.
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#   ## Use TLS but skip chain & host verification
+#   # insecure_skip_verify = false
+# 
+#   ## HTTP Proxy override, if unset values the standard proxy environment
+#   ## variables are consulted to determine which proxy, if any, should be used.
+#   # http_proxy = "http://corporate.proxy:3128"
+# 
+#   ## Additional HTTP headers
+#   # http_headers = {"X-Special-Header" = "Special-Value"}
+# 
+#   ## HTTP Content-Encoding for write request body, can be set to "gzip" to
+#   ## compress body or "identity" to apply no encoding.
+#   # content_encoding = "identity"
+# 
+#   ## When true, Telegraf will output unsigned integers as unsigned values,
+#   ## i.e.: "42u".  You will need a version of InfluxDB supporting unsigned
+#   ## integer values.  Enabling this option will result in field type errors if
+#   ## existing data has been written.
+#   # influx_uint_support = false
+
+
+# # Read metrics about cpu usage
+# [[inputs.cpu]]
+#   ## Whether to report per-cpu stats or not
+#   # percpu = true
+#   ## Whether to report total system cpu stats or not
+#   # totalcpu = true
+#   ## If true, collect raw CPU time metrics.
+#   # collect_cpu_time = false
+#   ## If true, compute and report the sum of all non-idle CPU states.
+#   # report_active = false
+
+
+# Read metrics about disk usage by mount point
+# [[inputs.disk]]
+#   ## By default stats will be gathered for all mount points.
+#   ## Set mount_points will restrict the stats to only the specified mount points.
+#   # mount_points = ["/"]
+# 
+#   ## Ignore mount points by filesystem type.
+#   # ignore_fs = ["tmpfs", "devtmpfs", "devfs", "overlay", "aufs", "squashfs"]
+
+
+# Read metrics about memory usage
+# [[inputs.mem]]
+#   # no configuration
+
+
+# # HTTP/HTTPS request given an address a method and a timeout
+# [[inputs.http_response]]
+#   ## Server address (default http://localhost)
+#   # address = "http://localhost"
+#
+#   ## Set http_proxy (telegraf uses the system wide proxy settings if it's is not set)
+#   # http_proxy = "http://localhost:8888"
+#
+#   ## Set response_timeout (default 5 seconds)
+#   # response_timeout = "5s"
+#
+#   ## HTTP Request Method
+#   # method = "GET"
+#
+#   ## Whether to follow redirects from the server (defaults to false)
+#   # follow_redirects = false
+#
+#   ## Optional HTTP Request Body
+#   # body = '''
+#   # {'fake':'data'}
+#   # '''
+#
+#   ## Optional substring or regex match in body of the response
+#   # response_string_match = "\"service_status\": \"up\""
+#   # response_string_match = "ok"
+#   # response_string_match = "\".*_status\".?:.?\"up\""
+#
+#   ## Optional TLS Config
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#   ## Use TLS but skip chain & host verification
+#   # insecure_skip_verify = false
+#
+#   ## HTTP Request Headers (all values must be strings)
+#   # [inputs.http_response.headers]
+#   #   Host = "github.com"
+
+
+# # Ping given url(s) and return statistics
+# [[inputs.ping]]
+#   ## List of urls to ping
+#   # urls = ["example.org"]
+#
+#   ## Number of pings to send per collection (ping -c <COUNT>)
+#   # count = 1
+#
+#   ## Interval, in s, at which to ping. 0 == default (ping -i <PING_INTERVAL>)
+#   ## Not available in Windows.
+#   # ping_interval = 1.0
+#
+#   ## Per-ping timeout, in s. 0 == no timeout (ping -W <TIMEOUT>)
+#   # timeout = 1.0
+#
+#   ## Total-ping deadline, in s. 0 == no deadline (ping -w <DEADLINE>)
+#   # deadline = 10
+#
+#   ## Interface or source address to send ping from (ping -I <INTERFACE/SRC_ADDR>)
+#   ## on Darwin and Freebsd only source address possible: (ping -S <SRC_ADDR>)
+#   # interface = ""
+#
+#   ## Specify the ping executable binary, default is "ping"
+#   # binary = "ping"
+#
+#   ## Arguments for ping command
+#   ## when arguments is not empty, other options (ping_interval, timeout, etc) will be ignored
+#   # arguments = ["-c", "3"]
\ No newline at end of file
diff --git a/ACSmI/Telegraf_ConfigParser/resources/telegraf.conf_oldversion b/ACSmI/Telegraf_ConfigParser/resources/telegraf.conf_oldversion
new file mode 100644
index 0000000000000000000000000000000000000000..d2242f230b059c7355d05d4a59622394ae76690a
--- /dev/null
+++ b/ACSmI/Telegraf_ConfigParser/resources/telegraf.conf_oldversion
@@ -0,0 +1,47 @@
+# HTTP/HTTPS request given an address a method and a timeout
+[[inputs.http_response]]
+  ## Server address (default http://localhost) Sock Shop Front End
+  address = "http://sockshop.integration.decideh2020.lan.esilab.org:8082/customers"
+  ## Set response_timeout (default 5 seconds)
+  response_timeout = "5s"
+  ## HTTP Request Method
+  method = "GET"
+  ## Whether to follow redirects from the server (defaults to false)
+  follow_redirects = true
+  ## HTTP Request Headers (all values must be strings)
+  # [inputs.http_response.headers]
+  #   Host = "github.com"
+  
+  ## Optional HTTP Request Body
+  # body = '''
+  # {'fake':'data'}
+  # '''
+  
+  ## Optional substring or regex match in body of the response
+  ## response_string_match = "\"service_status\": \"up\""
+  ## response_string_match = "ok"
+  ## response_string_match = "\".*_status\".?:.?\"up\""
+  
+  ## Optional SSL Config
+  # ssl_ca = "/etc/telegraf/ca.pem"
+  # ssl_cert = "/etc/telegraf/cert.pem"
+  # ssl_key = "/etc/telegraf/key.pem"
+  ## Use SSL but skip chain & host verification
+  # insecure_skip_verify = false
+
+  
+# # Ping given url(s) and return statistics
+# [[inputs.ping]]
+#   ## NOTE: this plugin forks the ping command. You may need to set capabilities
+#   ## via setcap cap_net_raw+p /bin/ping
+#   #
+#   ## List of urls to ping
+#   urls = ["www.google.com"]    # required
+#   ## number of pings to send per collection (ping -c <COUNT>)
+#   count = 1
+#   ## interval, in s, at which to ping. 0 == default (ping -i <PING_INTERVAL>)
+#   ping_interval = 1.0
+#   ## per-ping timeout, in s. 0 == no timeout (ping -W <TIMEOUT>)
+#   timeout = 1.5
+#   ## interface to send ping from (ping -I <INTERFACE>)
+#   interface = ""
\ No newline at end of file
diff --git a/ACSmI/Telegraf_ConfigParser/resources/telegraf.conf_original b/ACSmI/Telegraf_ConfigParser/resources/telegraf.conf_original
new file mode 100644
index 0000000000000000000000000000000000000000..9b865fc12442b7653b34b2ba9d6f5736ddb3af6b
--- /dev/null
+++ b/ACSmI/Telegraf_ConfigParser/resources/telegraf.conf_original
@@ -0,0 +1,5247 @@
+# Telegraf Configuration
+#
+# Telegraf is entirely plugin driven. All metrics are gathered from the
+# declared inputs, and sent to the declared outputs.
+#
+# Plugins must be declared in here to be active.
+# To deactivate a plugin, comment out the name and any variables.
+#
+# Use 'telegraf -config telegraf.conf -test' to see what metrics a config
+# file would generate.
+#
+# Environment variables can be used anywhere in this config file, simply prepend
+# them with $. For strings the variable must be within quotes (ie, "$STR_VAR"),
+# for numbers and booleans they should be plain (ie, $INT_VAR, $BOOL_VAR)
+
+
+# Global tags can be specified here in key="value" format.
+[global_tags]
+  # dc = "us-east-1" # will tag all metrics with dc=us-east-1
+  # rack = "1a"
+  ## Environment variables can be used as tags, and throughout the config file
+  # user = "$USER"
+
+
+# Configuration for telegraf agent
+[agent]
+  ## Default data collection interval for all inputs
+  interval = "10s"
+  ## Rounds collection interval to 'interval'
+  ## ie, if interval="10s" then always collect on :00, :10, :20, etc.
+  round_interval = true
+
+  ## Telegraf will send metrics to outputs in batches of at most
+  ## metric_batch_size metrics.
+  ## This controls the size of writes that Telegraf sends to output plugins.
+  metric_batch_size = 1000
+
+  ## For failed writes, telegraf will cache metric_buffer_limit metrics for each
+  ## output, and will flush this buffer on a successful write. Oldest metrics
+  ## are dropped first when this buffer fills.
+  ## This buffer only fills when writes fail to output plugin(s).
+  metric_buffer_limit = 10000
+
+  ## Collection jitter is used to jitter the collection by a random amount.
+  ## Each plugin will sleep for a random time within jitter before collecting.
+  ## This can be used to avoid many plugins querying things like sysfs at the
+  ## same time, which can have a measurable effect on the system.
+  collection_jitter = "0s"
+
+  ## Default flushing interval for all outputs. Maximum flush_interval will be
+  ## flush_interval + flush_jitter
+  flush_interval = "10s"
+  ## Jitter the flush interval by a random amount. This is primarily to avoid
+  ## large write spikes for users running a large number of telegraf instances.
+  ## ie, a jitter of 5s and interval 10s means flushes will happen every 10-15s
+  flush_jitter = "0s"
+
+  ## By default or when set to "0s", precision will be set to the same
+  ## timestamp order as the collection interval, with the maximum being 1s.
+  ##   ie, when interval = "10s", precision will be "1s"
+  ##       when interval = "250ms", precision will be "1ms"
+  ## Precision will NOT be used for service inputs. It is up to each individual
+  ## service input to set the timestamp at the appropriate precision.
+  ## Valid time units are "ns", "us" (or "µs"), "ms", "s".
+  precision = ""
+
+  ## Logging configuration:
+  ## Run telegraf with debug log messages.
+  debug = false
+  ## Run telegraf in quiet mode (error log messages only).
+  quiet = false
+  ## Specify the log file name. The empty string means to log to stderr.
+  logfile = ""
+
+  ## Override default hostname, if empty use os.Hostname()
+  hostname = ""
+  ## If set to true, do no set the "host" tag in the telegraf agent.
+  omit_hostname = false
+
+
+###############################################################################
+#                            OUTPUT PLUGINS                                   #
+###############################################################################
+
+# Configuration for sending metrics to InfluxDB
+[[outputs.influxdb]]
+  ## The full HTTP or UDP URL for your InfluxDB instance.
+  ##
+  ## Multiple URLs can be specified for a single cluster, only ONE of the
+  ## urls will be written to each interval.
+  # urls = ["unix:///var/run/influxdb.sock"]
+  # urls = ["udp://127.0.0.1:8089"]
+  # urls = ["http://127.0.0.1:8086"]
+  urls = ["http://acsmi.influxdb:8086"] 
+
+  ## The target database for metrics; will be created as needed.
+  ## For UDP url endpoint database needs to be configured on server side.
+  # database = "telegraf"
+  database = "decideh2020acsmi"                                      # required
+
+  ## The value of this tag will be used to determine the database.  If this
+  ## tag is not set the 'database' option is used as the default.
+  # database_tag = ""
+
+  ## If true, no CREATE DATABASE queries will be sent.  Set to true when using
+  ## Telegraf with a user without permissions to create databases or when the
+  ## database already exists.
+  # skip_database_creation = false
+
+  ## Name of existing retention policy to write to.  Empty string writes to
+  ## the default retention policy.  Only takes effect when using HTTP.
+  # retention_policy = ""
+
+  ## Write consistency (clusters only), can be: "any", "one", "quorum", "all".
+  ## Only takes effect when using HTTP.
+  # write_consistency = "any"
+
+  ## Timeout for HTTP messages.
+  # timeout = "5s"
+
+  ## HTTP Basic Auth
+  # username = "telegraf"
+  # password = "metricsmetricsmetricsmetrics"
+
+  ## HTTP User-Agent
+  # user_agent = "telegraf"
+
+  ## UDP payload size is the maximum packet size to send.
+  # udp_payload = "512B"
+
+  ## Optional TLS Config for use on HTTP connections.
+  # tls_ca = "/etc/telegraf/ca.pem"
+  # tls_cert = "/etc/telegraf/cert.pem"
+  # tls_key = "/etc/telegraf/key.pem"
+  ## Use TLS but skip chain & host verification
+  # insecure_skip_verify = false
+
+  ## HTTP Proxy override, if unset values the standard proxy environment
+  ## variables are consulted to determine which proxy, if any, should be used.
+  # http_proxy = "http://corporate.proxy:3128"
+
+  ## Additional HTTP headers
+  # http_headers = {"X-Special-Header" = "Special-Value"}
+
+  ## HTTP Content-Encoding for write request body, can be set to "gzip" to
+  ## compress body or "identity" to apply no encoding.
+  # content_encoding = "identity"
+
+  ## When true, Telegraf will output unsigned integers as unsigned values,
+  ## i.e.: "42u".  You will need a version of InfluxDB supporting unsigned
+  ## integer values.  Enabling this option will result in field type errors if
+  ## existing data has been written.
+  # influx_uint_support = false
+
+
+# # Configuration for Amon Server to send metrics to.
+# [[outputs.amon]]
+#   ## Amon Server Key
+#   server_key = "my-server-key" # required.
+#
+#   ## Amon Instance URL
+#   amon_instance = "https://youramoninstance" # required
+#
+#   ## Connection timeout.
+#   # timeout = "5s"
+
+
+# # Publishes metrics to an AMQP broker
+# [[outputs.amqp]]
+#   ## Broker to publish to.
+#   ##   deprecated in 1.7; use the brokers option
+#   # url = "amqp://localhost:5672/influxdb"
+#
+#   ## Brokers to publish to.  If multiple brokers are specified a random broker
+#   ## will be selected anytime a connection is established.  This can be
+#   ## helpful for load balancing when not using a dedicated load balancer.
+#   brokers = ["amqp://localhost:5672/influxdb"]
+#
+#   ## Maximum messages to send over a connection.  Once this is reached, the
+#   ## connection is closed and a new connection is made.  This can be helpful for
+#   ## load balancing when not using a dedicated load balancer.
+#   # max_messages = 0
+#
+#   ## Exchange to declare and publish to.
+#   exchange = "telegraf"
+#
+#   ## Exchange type; common types are "direct", "fanout", "topic", "header", "x-consistent-hash".
+#   # exchange_type = "topic"
+#
+#   ## If true, exchange will be passively declared.
+#   # exchange_declare_passive = false
+#
+#   ## Exchange durability can be either "transient" or "durable".
+#   # exchange_durability = "durable"
+#
+#   ## Additional exchange arguments.
+#   # exchange_arguments = { }
+#   # exchange_arguments = {"hash_propery" = "timestamp"}
+#
+#   ## Authentication credentials for the PLAIN auth_method.
+#   # username = ""
+#   # password = ""
+#
+#   ## Auth method. PLAIN and EXTERNAL are supported
+#   ## Using EXTERNAL requires enabling the rabbitmq_auth_mechanism_ssl plugin as
+#   ## described here: https://www.rabbitmq.com/plugins.html
+#   # auth_method = "PLAIN"
+#
+#   ## Metric tag to use as a routing key.
+#   ##   ie, if this tag exists, its value will be used as the routing key
+#   # routing_tag = "host"
+#
+#   ## Static routing key.  Used when no routing_tag is set or as a fallback
+#   ## when the tag specified in routing tag is not found.
+#   # routing_key = ""
+#   # routing_key = "telegraf"
+#
+#   ## Delivery Mode controls if a published message is persistent.
+#   ##   One of "transient" or "persistent".
+#   # delivery_mode = "transient"
+#
+#   ## InfluxDB database added as a message header.
+#   ##   deprecated in 1.7; use the headers option
+#   # database = "telegraf"
+#
+#   ## InfluxDB retention policy added as a message header
+#   ##   deprecated in 1.7; use the headers option
+#   # retention_policy = "default"
+#
+#   ## Static headers added to each published message.
+#   # headers = { }
+#   # headers = {"database" = "telegraf", "retention_policy" = "default"}
+#
+#   ## Connection timeout.  If not provided, will default to 5s.  0s means no
+#   ## timeout (not recommended).
+#   # timeout = "5s"
+#
+#   ## Optional TLS Config
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#   ## Use TLS but skip chain & host verification
+#   # insecure_skip_verify = false
+#
+#   ## If true use batch serialization format instead of line based delimiting.
+#   ## Only applies to data formats which are not line based such as JSON.
+#   ## Recommended to set to true.
+#   # use_batch_format = false
+#
+#   ## Data format to output.
+#   ## Each data format has its own unique set of configuration options, read
+#   ## more about them here:
+#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md
+#   # data_format = "influx"
+
+
+# # Send metrics to Azure Application Insights
+# [[outputs.application_insights]]
+#   ## Instrumentation key of the Application Insights resource.
+#   instrumentation_key = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx"
+#
+#   ## Timeout for closing (default: 5s).
+#   # timeout = "5s"
+#
+#   ## Enable additional diagnostic logging.
+#   # enable_diagnostic_logging = false
+#
+#   ## Context Tag Sources add Application Insights context tags to a tag value.
+#   ##
+#   ## For list of allowed context tag keys see:
+#   ## https://github.com/Microsoft/ApplicationInsights-Go/blob/master/appinsights/contracts/contexttagkeys.go
+#   # [outputs.application_insights.context_tag_sources]
+#   #   "ai.cloud.role" = "kubernetes_container_name"
+#   #   "ai.cloud.roleInstance" = "kubernetes_pod_name"
+
+
+# # Send aggregate metrics to Azure Monitor
+# [[outputs.azure_monitor]]
+#   ## Timeout for HTTP writes.
+#   # timeout = "20s"
+#
+#   ## Set the namespace prefix, defaults to "Telegraf/<input-name>".
+#   # namespace_prefix = "Telegraf/"
+#
+#   ## Azure Monitor doesn't have a string value type, so convert string
+#   ## fields to dimensions (a.k.a. tags) if enabled. Azure Monitor allows
+#   ## a maximum of 10 dimensions so Telegraf will only send the first 10
+#   ## alphanumeric dimensions.
+#   # strings_as_dimensions = false
+#
+#   ## Both region and resource_id must be set or be available via the
+#   ## Instance Metadata service on Azure Virtual Machines.
+#   #
+#   ## Azure Region to publish metrics against.
+#   ##   ex: region = "southcentralus"
+#   # region = ""
+#   #
+#   ## The Azure Resource ID against which metric will be logged, e.g.
+#   ##   ex: resource_id = "/subscriptions/<subscription_id>/resourceGroups/<resource_group>/providers/Microsoft.Compute/virtualMachines/<vm_name>"
+#   # resource_id = ""
+#
+#   ## Optionally, if in Azure US Government, China or other sovereign
+#   ## cloud environment, set appropriate REST endpoint for receiving
+#   ## metrics. (Note: region may be unused in this context)
+#   # endpoint_url = "https://monitoring.core.usgovcloudapi.net"
+
+
+# # Publish Telegraf metrics to a Google Cloud PubSub topic
+# [[outputs.cloud_pubsub]]
+#   ## Required. Name of Google Cloud Platform (GCP) Project that owns
+#   ## the given PubSub topic.
+#   project = "my-project"
+#
+#   ## Required. Name of PubSub topic to publish metrics to.
+#   topic = "my-topic"
+#
+#   ## Required. Data format to consume.
+#   ## Each data format has its own unique set of configuration options.
+#   ## Read more about them here:
+#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md
+#   data_format = "influx"
+#
+#   ## Optional. Filepath for GCP credentials JSON file to authorize calls to
+#   ## PubSub APIs. If not set explicitly, Telegraf will attempt to use
+#   ## Application Default Credentials, which is preferred.
+#   # credentials_file = "path/to/my/creds.json"
+#
+#   ## Optional. If true, will send all metrics per write in one PubSub message.
+#   # send_batched = true
+#
+#   ## The following publish_* parameters specifically configures batching
+#   ## requests made to the GCP Cloud PubSub API via the PubSub Golang library. Read
+#   ## more here: https://godoc.org/cloud.google.com/go/pubsub#PublishSettings
+#
+#   ## Optional. Send a request to PubSub (i.e. actually publish a batch)
+#   ## when it has this many PubSub messages. If send_batched is true,
+#   ## this is ignored and treated as if it were 1.
+#   # publish_count_threshold = 1000
+#
+#   ## Optional. Send a request to PubSub (i.e. actually publish a batch)
+#   ## when it has this many PubSub messages. If send_batched is true,
+#   ## this is ignored and treated as if it were 1
+#   # publish_byte_threshold = 1000000
+#
+#   ## Optional. Specifically configures requests made to the PubSub API.
+#   # publish_num_go_routines = 2
+#
+#   ## Optional. Specifies a timeout for requests to the PubSub API.
+#   # publish_timeout = "30s"
+#
+#   ## Optional. PubSub attributes to add to metrics.
+#   # [[inputs.pubsub.attributes]]
+#   #   my_attr = "tag_value"
+
+
+# # Configuration for AWS CloudWatch output.
+# [[outputs.cloudwatch]]
+#   ## Amazon REGION
+#   region = "us-east-1"
+#
+#   ## Amazon Credentials
+#   ## Credentials are loaded in the following order
+#   ## 1) Assumed credentials via STS if role_arn is specified
+#   ## 2) explicit credentials from 'access_key' and 'secret_key'
+#   ## 3) shared profile from 'profile'
+#   ## 4) environment variables
+#   ## 5) shared credentials file
+#   ## 6) EC2 Instance Profile
+#   #access_key = ""
+#   #secret_key = ""
+#   #token = ""
+#   #role_arn = ""
+#   #profile = ""
+#   #shared_credential_file = ""
+#
+#   ## Endpoint to make request against, the correct endpoint is automatically
+#   ## determined and this option should only be set if you wish to override the
+#   ## default.
+#   ##   ex: endpoint_url = "http://localhost:8000"
+#   # endpoint_url = ""
+#
+#   ## Namespace for the CloudWatch MetricDatums
+#   namespace = "InfluxData/Telegraf"
+#
+#   ## If you have a large amount of metrics, you should consider to send statistic
+#   ## values instead of raw metrics which could not only improve performance but
+#   ## also save AWS API cost. If enable this flag, this plugin would parse the required
+#   ## CloudWatch statistic fields (count, min, max, and sum) and send them to CloudWatch.
+#   ## You could use basicstats aggregator to calculate those fields. If not all statistic
+#   ## fields are available, all fields would still be sent as raw metrics.
+#   # write_statistics = false
+
+
+# # Configuration for CrateDB to send metrics to.
+# [[outputs.cratedb]]
+#   # A github.com/jackc/pgx connection string.
+#   # See https://godoc.org/github.com/jackc/pgx#ParseDSN
+#   url = "postgres://user:password@localhost/schema?sslmode=disable"
+#   # Timeout for all CrateDB queries.
+#   timeout = "5s"
+#   # Name of the table to store metrics in.
+#   table = "metrics"
+#   # If true, and the metrics table does not exist, create it automatically.
+#   table_create = true
+
+
+# # Configuration for DataDog API to send metrics to.
+# [[outputs.datadog]]
+#   ## Datadog API key
+#   apikey = "my-secret-key" # required.
+#
+#   # The base endpoint URL can optionally be specified but it defaults to:
+#   #url = "https://app.datadoghq.com/api/v1/series"
+#
+#   ## Connection timeout.
+#   # timeout = "5s"
+
+
+# # Send metrics to nowhere at all
+# [[outputs.discard]]
+#   # no configuration
+
+
+# # Configuration for Elasticsearch to send metrics to.
+# [[outputs.elasticsearch]]
+#   ## The full HTTP endpoint URL for your Elasticsearch instance
+#   ## Multiple urls can be specified as part of the same cluster,
+#   ## this means that only ONE of the urls will be written to each interval.
+#   urls = [ "http://node1.es.example.com:9200" ] # required.
+#   ## Elasticsearch client timeout, defaults to "5s" if not set.
+#   timeout = "5s"
+#   ## Set to true to ask Elasticsearch a list of all cluster nodes,
+#   ## thus it is not necessary to list all nodes in the urls config option.
+#   enable_sniffer = false
+#   ## Set the interval to check if the Elasticsearch nodes are available
+#   ## Setting to "0s" will disable the health check (not recommended in production)
+#   health_check_interval = "10s"
+#   ## HTTP basic authentication details (eg. when using Shield)
+#   # username = "telegraf"
+#   # password = "mypassword"
+#
+#   ## Index Config
+#   ## The target index for metrics (Elasticsearch will create if it not exists).
+#   ## You can use the date specifiers below to create indexes per time frame.
+#   ## The metric timestamp will be used to decide the destination index name
+#   # %Y - year (2016)
+#   # %y - last two digits of year (00..99)
+#   # %m - month (01..12)
+#   # %d - day of month (e.g., 01)
+#   # %H - hour (00..23)
+#   # %V - week of the year (ISO week) (01..53)
+#   ## Additionally, you can specify a tag name using the notation {{tag_name}}
+#   ## which will be used as part of the index name. If the tag does not exist,
+#   ## the default tag value will be used.
+#   # index_name = "telegraf-{{host}}-%Y.%m.%d"
+#   # default_tag_value = "none"
+#   index_name = "telegraf-%Y.%m.%d" # required.
+#
+#   ## Optional TLS Config
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#   ## Use TLS but skip chain & host verification
+#   # insecure_skip_verify = false
+#
+#   ## Template Config
+#   ## Set to true if you want telegraf to manage its index template.
+#   ## If enabled it will create a recommended index template for telegraf indexes
+#   manage_template = true
+#   ## The template name used for telegraf indexes
+#   template_name = "telegraf"
+#   ## Set to true if you want telegraf to overwrite an existing template
+#   overwrite_template = false
+
+
+# # Send telegraf metrics to file(s)
+# [[outputs.file]]
+#   ## Files to write to, "stdout" is a specially handled file.
+#   files = ["stdout", "/tmp/metrics.out"]
+#
+#   ## Data format to output.
+#   ## Each data format has its own unique set of configuration options, read
+#   ## more about them here:
+#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md
+#   data_format = "influx"
+
+
+# # Configuration for Graphite server to send metrics to
+# [[outputs.graphite]]
+#   ## TCP endpoint for your graphite instance.
+#   ## If multiple endpoints are configured, output will be load balanced.
+#   ## Only one of the endpoints will be written to with each iteration.
+#   servers = ["localhost:2003"]
+#   ## Prefix metrics name
+#   prefix = ""
+#   ## Graphite output template
+#   ## see https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md
+#   template = "host.tags.measurement.field"
+#
+#   ## Enable Graphite tags support
+#   # graphite_tag_support = false
+#
+#   ## timeout in seconds for the write connection to graphite
+#   timeout = 2
+#
+#   ## Optional TLS Config
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#   ## Use TLS but skip chain & host verification
+#   # insecure_skip_verify = false
+
+
+# # Send telegraf metrics to graylog(s)
+# [[outputs.graylog]]
+#   ## UDP endpoint for your graylog instance.
+#   servers = ["127.0.0.1:12201", "192.168.1.1:12201"]
+
+
+# # A plugin that can transmit metrics over HTTP
+# [[outputs.http]]
+#   ## URL is the address to send metrics to
+#   url = "http://127.0.0.1:8080/metric"
+#
+#   ## Timeout for HTTP message
+#   # timeout = "5s"
+#
+#   ## HTTP method, one of: "POST" or "PUT"
+#   # method = "POST"
+#
+#   ## HTTP Basic Auth credentials
+#   # username = "username"
+#   # password = "pa$$word"
+#
+#   ## OAuth2 Client Credentials Grant
+#   # client_id = "clientid"
+#   # client_secret = "secret"
+#   # token_url = "https://indentityprovider/oauth2/v1/token"
+#   # scopes = ["urn:opc:idm:__myscopes__"]
+#
+#   ## Optional TLS Config
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#   ## Use TLS but skip chain & host verification
+#   # insecure_skip_verify = false
+#
+#   ## Data format to output.
+#   ## Each data format has it's own unique set of configuration options, read
+#   ## more about them here:
+#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md
+#   # data_format = "influx"
+#
+#   ## Additional HTTP headers
+#   # [outputs.http.headers]
+#   #   # Should be set manually to "application/json" for json data_format
+#   #   Content-Type = "text/plain; charset=utf-8"
+#
+#   ## HTTP Content-Encoding for write request body, can be set to "gzip" to
+#   ## compress body or "identity" to apply no encoding.
+#   # content_encoding = "identity"
+
+
+# # Configuration for sending metrics to InfluxDB
+# [[outputs.influxdb_v2]]
+#   ## The URLs of the InfluxDB cluster nodes.
+#   ##
+#   ## Multiple URLs can be specified for a single cluster, only ONE of the
+#   ## urls will be written to each interval.
+#   urls = ["http://127.0.0.1:9999"]
+#
+#   ## Token for authentication.
+#   token = ""
+#
+#   ## Organization is the name of the organization you wish to write to; must exist.
+#   organization = ""
+#
+#   ## Destination bucket to write into.
+#   bucket = ""
+#
+#   ## The value of this tag will be used to determine the bucket.  If this
+#   ## tag is not set the 'bucket' option is used as the default.
+#   # bucket_tag = ""
+#
+#   ## Timeout for HTTP messages.
+#   # timeout = "5s"
+#
+#   ## Additional HTTP headers
+#   # http_headers = {"X-Special-Header" = "Special-Value"}
+#
+#   ## HTTP Proxy override, if unset values the standard proxy environment
+#   ## variables are consulted to determine which proxy, if any, should be used.
+#   # http_proxy = "http://corporate.proxy:3128"
+#
+#   ## HTTP User-Agent
+#   # user_agent = "telegraf"
+#
+#   ## Content-Encoding for write request body, can be set to "gzip" to
+#   ## compress body or "identity" to apply no encoding.
+#   # content_encoding = "gzip"
+#
+#   ## Enable or disable uint support for writing uints influxdb 2.0.
+#   # influx_uint_support = false
+#
+#   ## Optional TLS Config for use on HTTP connections.
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#   ## Use TLS but skip chain & host verification
+#   # insecure_skip_verify = false
+
+
+# # Configuration for sending metrics to an Instrumental project
+# [[outputs.instrumental]]
+#   ## Project API Token (required)
+#   api_token = "API Token" # required
+#   ## Prefix the metrics with a given name
+#   prefix = ""
+#   ## Stats output template (Graphite formatting)
+#   ## see https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md#graphite
+#   template = "host.tags.measurement.field"
+#   ## Timeout in seconds to connect
+#   timeout = "2s"
+#   ## Display Communcation to Instrumental
+#   debug = false
+
+
+# # Configuration for the Kafka server to send metrics to
+# [[outputs.kafka]]
+#   ## URLs of kafka brokers
+#   brokers = ["localhost:9092"]
+#   ## Kafka topic for producer messages
+#   topic = "telegraf"
+#
+#   ## Optional Client id
+#   # client_id = "Telegraf"
+#
+#   ## Set the minimal supported Kafka version.  Setting this enables the use of new
+#   ## Kafka features and APIs.  Of particular interest, lz4 compression
+#   ## requires at least version 0.10.0.0.
+#   ##   ex: version = "1.1.0"
+#   # version = ""
+#
+#   ## Optional topic suffix configuration.
+#   ## If the section is omitted, no suffix is used.
+#   ## Following topic suffix methods are supported:
+#   ##   measurement - suffix equals to separator + measurement's name
+#   ##   tags        - suffix equals to separator + specified tags' values
+#   ##                 interleaved with separator
+#
+#   ## Suffix equals to "_" + measurement name
+#   # [outputs.kafka.topic_suffix]
+#   #   method = "measurement"
+#   #   separator = "_"
+#
+#   ## Suffix equals to "__" + measurement's "foo" tag value.
+#   ##   If there's no such a tag, suffix equals to an empty string
+#   # [outputs.kafka.topic_suffix]
+#   #   method = "tags"
+#   #   keys = ["foo"]
+#   #   separator = "__"
+#
+#   ## Suffix equals to "_" + measurement's "foo" and "bar"
+#   ##   tag values, separated by "_". If there is no such tags,
+#   ##   their values treated as empty strings.
+#   # [outputs.kafka.topic_suffix]
+#   #   method = "tags"
+#   #   keys = ["foo", "bar"]
+#   #   separator = "_"
+#
+#   ## Telegraf tag to use as a routing key
+#   ##  ie, if this tag exists, its value will be used as the routing key
+#   routing_tag = "host"
+#
+#   ## Static routing key.  Used when no routing_tag is set or as a fallback
+#   ## when the tag specified in routing tag is not found.  If set to "random",
+#   ## a random value will be generated for each message.
+#   ##   ex: routing_key = "random"
+#   ##       routing_key = "telegraf"
+#   # routing_key = ""
+#
+#   ## CompressionCodec represents the various compression codecs recognized by
+#   ## Kafka in messages.
+#   ##  0 : No compression
+#   ##  1 : Gzip compression
+#   ##  2 : Snappy compression
+#   ##  3 : LZ4 compression
+#   # compression_codec = 0
+#
+#   ##  RequiredAcks is used in Produce Requests to tell the broker how many
+#   ##  replica acknowledgements it must see before responding
+#   ##   0 : the producer never waits for an acknowledgement from the broker.
+#   ##       This option provides the lowest latency but the weakest durability
+#   ##       guarantees (some data will be lost when a server fails).
+#   ##   1 : the producer gets an acknowledgement after the leader replica has
+#   ##       received the data. This option provides better durability as the
+#   ##       client waits until the server acknowledges the request as successful
+#   ##       (only messages that were written to the now-dead leader but not yet
+#   ##       replicated will be lost).
+#   ##   -1: the producer gets an acknowledgement after all in-sync replicas have
+#   ##       received the data. This option provides the best durability, we
+#   ##       guarantee that no messages will be lost as long as at least one in
+#   ##       sync replica remains.
+#   # required_acks = -1
+#
+#   ## The maximum number of times to retry sending a metric before failing
+#   ## until the next flush.
+#   # max_retry = 3
+#
+#   ## The maximum permitted size of a message. Should be set equal to or
+#   ## smaller than the broker's 'message.max.bytes'.
+#   # max_message_bytes = 1000000
+#
+#   ## Optional TLS Config
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#   ## Use TLS but skip chain & host verification
+#   # insecure_skip_verify = false
+#
+#   ## Optional SASL Config
+#   # sasl_username = "kafka"
+#   # sasl_password = "secret"
+#
+#   ## Data format to output.
+#   ## Each data format has its own unique set of configuration options, read
+#   ## more about them here:
+#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md
+#   # data_format = "influx"
+
+
+# # Configuration for the AWS Kinesis output.
+# [[outputs.kinesis]]
+#   ## Amazon REGION of kinesis endpoint.
+#   region = "ap-southeast-2"
+#
+#   ## Amazon Credentials
+#   ## Credentials are loaded in the following order
+#   ## 1) Assumed credentials via STS if role_arn is specified
+#   ## 2) explicit credentials from 'access_key' and 'secret_key'
+#   ## 3) shared profile from 'profile'
+#   ## 4) environment variables
+#   ## 5) shared credentials file
+#   ## 6) EC2 Instance Profile
+#   #access_key = ""
+#   #secret_key = ""
+#   #token = ""
+#   #role_arn = ""
+#   #profile = ""
+#   #shared_credential_file = ""
+#
+#   ## Endpoint to make request against, the correct endpoint is automatically
+#   ## determined and this option should only be set if you wish to override the
+#   ## default.
+#   ##   ex: endpoint_url = "http://localhost:8000"
+#   # endpoint_url = ""
+#
+#   ## Kinesis StreamName must exist prior to starting telegraf.
+#   streamname = "StreamName"
+#   ## DEPRECATED: PartitionKey as used for sharding data.
+#   partitionkey = "PartitionKey"
+#   ## DEPRECATED: If set the paritionKey will be a random UUID on every put.
+#   ## This allows for scaling across multiple shards in a stream.
+#   ## This will cause issues with ordering.
+#   use_random_partitionkey = false
+#   ## The partition key can be calculated using one of several methods:
+#   ##
+#   ## Use a static value for all writes:
+#   #  [outputs.kinesis.partition]
+#   #    method = "static"
+#   #    key = "howdy"
+#   #
+#   ## Use a random partition key on each write:
+#   #  [outputs.kinesis.partition]
+#   #    method = "random"
+#   #
+#   ## Use the measurement name as the partition key:
+#   #  [outputs.kinesis.partition]
+#   #    method = "measurement"
+#   #
+#   ## Use the value of a tag for all writes, if the tag is not set the empty
+#   ## default option will be used. When no default, defaults to "telegraf"
+#   #  [outputs.kinesis.partition]
+#   #    method = "tag"
+#   #    key = "host"
+#   #    default = "mykey"
+#
+#
+#   ## Data format to output.
+#   ## Each data format has its own unique set of configuration options, read
+#   ## more about them here:
+#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md
+#   data_format = "influx"
+#
+#   ## debug will show upstream aws messages.
+#   debug = false
+
+
+# # Configuration for Librato API to send metrics to.
+# [[outputs.librato]]
+#   ## Librator API Docs
+#   ## http://dev.librato.com/v1/metrics-authentication
+#   ## Librato API user
+#   api_user = "telegraf@influxdb.com" # required.
+#   ## Librato API token
+#   api_token = "my-secret-token" # required.
+#   ## Debug
+#   # debug = false
+#   ## Connection timeout.
+#   # timeout = "5s"
+#   ## Output source Template (same as graphite buckets)
+#   ## see https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md#graphite
+#   ## This template is used in librato's source (not metric's name)
+#   template = "host"
+#
+
+
+# # Configuration for MQTT server to send metrics to
+# [[outputs.mqtt]]
+#   servers = ["localhost:1883"] # required.
+#
+#   ## MQTT outputs send metrics to this topic format
+#   ##    "<topic_prefix>/<hostname>/<pluginname>/"
+#   ##   ex: prefix/web01.example.com/mem
+#   topic_prefix = "telegraf"
+#
+#   ## QoS policy for messages
+#   ##   0 = at most once
+#   ##   1 = at least once
+#   ##   2 = exactly once
+#   # qos = 2
+#
+#   ## username and password to connect MQTT server.
+#   # username = "telegraf"
+#   # password = "metricsmetricsmetricsmetrics"
+#
+#   ## client ID, if not set a random ID is generated
+#   # client_id = ""
+#
+#   ## Timeout for write operations. default: 5s
+#   # timeout = "5s"
+#
+#   ## Optional TLS Config
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#   ## Use TLS but skip chain & host verification
+#   # insecure_skip_verify = false
+#
+#   ## When true, metrics will be sent in one MQTT message per flush.  Otherwise,
+#   ## metrics are written one metric per MQTT message.
+#   # batch = false
+#
+#   ## When true, metric will have RETAIN flag set, making broker cache entries until someone
+#   ## actually reads it
+#   # retain = false
+#
+#   ## Data format to output.
+#   ## Each data format has its own unique set of configuration options, read
+#   ## more about them here:
+#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md
+#   data_format = "influx"
+
+
+# # Send telegraf measurements to NATS
+# [[outputs.nats]]
+#   ## URLs of NATS servers
+#   servers = ["nats://localhost:4222"]
+#   ## Optional credentials
+#   # username = ""
+#   # password = ""
+#   ## NATS subject for producer messages
+#   subject = "telegraf"
+#
+#   ## Optional TLS Config
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#   ## Use TLS but skip chain & host verification
+#   # insecure_skip_verify = false
+#
+#   ## Data format to output.
+#   ## Each data format has its own unique set of configuration options, read
+#   ## more about them here:
+#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md
+#   data_format = "influx"
+
+
+# # Send telegraf measurements to NSQD
+# [[outputs.nsq]]
+#   ## Location of nsqd instance listening on TCP
+#   server = "localhost:4150"
+#   ## NSQ topic for producer messages
+#   topic = "telegraf"
+#
+#   ## Data format to output.
+#   ## Each data format has its own unique set of configuration options, read
+#   ## more about them here:
+#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md
+#   data_format = "influx"
+
+
+# # Configuration for OpenTSDB server to send metrics to
+# [[outputs.opentsdb]]
+#   ## prefix for metrics keys
+#   prefix = "my.specific.prefix."
+#
+#   ## DNS name of the OpenTSDB server
+#   ## Using "opentsdb.example.com" or "tcp://opentsdb.example.com" will use the
+#   ## telnet API. "http://opentsdb.example.com" will use the Http API.
+#   host = "opentsdb.example.com"
+#
+#   ## Port of the OpenTSDB server
+#   port = 4242
+#
+#   ## Number of data points to send to OpenTSDB in Http requests.
+#   ## Not used with telnet API.
+#   http_batch_size = 50
+#
+#   ## URI Path for Http requests to OpenTSDB.
+#   ## Used in cases where OpenTSDB is located behind a reverse proxy.
+#   http_path = "/api/put"
+#
+#   ## Debug true - Prints OpenTSDB communication
+#   debug = false
+#
+#   ## Separator separates measurement name from field
+#   separator = "_"
+
+
+# # Configuration for the Prometheus client to spawn
+# [[outputs.prometheus_client]]
+#   ## Address to listen on
+#   listen = ":9273"
+#
+#   ## Use HTTP Basic Authentication.
+#   # basic_username = "Foo"
+#   # basic_password = "Bar"
+#
+#   ## If set, the IP Ranges which are allowed to access metrics.
+#   ##   ex: ip_range = ["192.168.0.0/24", "192.168.1.0/30"]
+#   # ip_range = []
+#
+#   ## Path to publish the metrics on.
+#   # path = "/metrics"
+#
+#   ## Expiration interval for each metric. 0 == no expiration
+#   # expiration_interval = "60s"
+#
+#   ## Collectors to enable, valid entries are "gocollector" and "process".
+#   ## If unset, both are enabled.
+#   # collectors_exclude = ["gocollector", "process"]
+#
+#   ## Send string metrics as Prometheus labels.
+#   ## Unless set to false all string metrics will be sent as labels.
+#   # string_as_label = true
+#
+#   ## If set, enable TLS with the given certificate.
+#   # tls_cert = "/etc/ssl/telegraf.crt"
+#   # tls_key = "/etc/ssl/telegraf.key"
+#
+#   ## Set one or more allowed client CA certificate file names to
+#   ## enable mutually authenticated TLS connections
+#   # tls_allowed_cacerts = ["/etc/telegraf/clientca.pem"]
+#
+#   ## Export metric collection time.
+#   # export_timestamp = false
+
+
+# # Configuration for the Riemann server to send metrics to
+# [[outputs.riemann]]
+#   ## The full TCP or UDP URL of the Riemann server
+#   url = "tcp://localhost:5555"
+#
+#   ## Riemann event TTL, floating-point time in seconds.
+#   ## Defines how long that an event is considered valid for in Riemann
+#   # ttl = 30.0
+#
+#   ## Separator to use between measurement and field name in Riemann service name
+#   ## This does not have any effect if 'measurement_as_attribute' is set to 'true'
+#   separator = "/"
+#
+#   ## Set measurement name as Riemann attribute 'measurement', instead of prepending it to the Riemann service name
+#   # measurement_as_attribute = false
+#
+#   ## Send string metrics as Riemann event states.
+#   ## Unless enabled all string metrics will be ignored
+#   # string_as_state = false
+#
+#   ## A list of tag keys whose values get sent as Riemann tags.
+#   ## If empty, all Telegraf tag values will be sent as tags
+#   # tag_keys = ["telegraf","custom_tag"]
+#
+#   ## Additional Riemann tags to send.
+#   # tags = ["telegraf-output"]
+#
+#   ## Description for Riemann event
+#   # description_text = "metrics collected from telegraf"
+#
+#   ## Riemann client write timeout, defaults to "5s" if not set.
+#   # timeout = "5s"
+
+
+# # Configuration for the Riemann server to send metrics to
+# [[outputs.riemann_legacy]]
+#   ## URL of server
+#   url = "localhost:5555"
+#   ## transport protocol to use either tcp or udp
+#   transport = "tcp"
+#   ## separator to use between input name and field name in Riemann service name
+#   separator = " "
+
+
+# # Generic socket writer capable of handling multiple socket types.
+# [[outputs.socket_writer]]
+#   ## URL to connect to
+#   # address = "tcp://127.0.0.1:8094"
+#   # address = "tcp://example.com:http"
+#   # address = "tcp4://127.0.0.1:8094"
+#   # address = "tcp6://127.0.0.1:8094"
+#   # address = "tcp6://[2001:db8::1]:8094"
+#   # address = "udp://127.0.0.1:8094"
+#   # address = "udp4://127.0.0.1:8094"
+#   # address = "udp6://127.0.0.1:8094"
+#   # address = "unix:///tmp/telegraf.sock"
+#   # address = "unixgram:///tmp/telegraf.sock"
+#
+#   ## Optional TLS Config
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#   ## Use TLS but skip chain & host verification
+#   # insecure_skip_verify = false
+#
+#   ## Period between keep alive probes.
+#   ## Only applies to TCP sockets.
+#   ## 0 disables keep alive probes.
+#   ## Defaults to the OS configuration.
+#   # keep_alive_period = "5m"
+#
+#   ## Data format to generate.
+#   ## Each data format has its own unique set of configuration options, read
+#   ## more about them here:
+#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md
+#   # data_format = "influx"
+
+
+# # Configuration for Google Cloud Stackdriver to send metrics to
+# [[outputs.stackdriver]]
+#   ## GCP Project
+#   project = "erudite-bloom-151019"
+#
+#   ## The namespace for the metric descriptor
+#   namespace = "telegraf"
+#
+#   ## Custom resource type
+#   # resource_type = "generic_node"
+#
+#   ## Additonal resource labels
+#   # [outputs.stackdriver.resource_labels]
+#   #   node_id = "$HOSTNAME"
+#   #   namespace = "myapp"
+#   #   location = "eu-north0"
+
+
+# # Configuration for Wavefront server to send metrics to
+# [[outputs.wavefront]]
+#   ## Url for Wavefront Direct Ingestion or using HTTP with Wavefront Proxy
+#   ## If using Wavefront Proxy, also specify port. example: http://proxyserver:2878
+#   url = "https://metrics.wavefront.com"
+#
+#   ## Authentication Token for Wavefront. Only required if using Direct Ingestion
+#   #token = "DUMMY_TOKEN"
+#
+#   ## DNS name of the wavefront proxy server. Do not use if url is specified
+#   #host = "wavefront.example.com"
+#
+#   ## Port that the Wavefront proxy server listens on. Do not use if url is specified
+#   #port = 2878
+#
+#   ## prefix for metrics keys
+#   #prefix = "my.specific.prefix."
+#
+#   ## whether to use "value" for name of simple fields. default is false
+#   #simple_fields = false
+#
+#   ## character to use between metric and field name.  default is . (dot)
+#   #metric_separator = "."
+#
+#   ## Convert metric name paths to use metricSeparator character
+#   ## When true will convert all _ (underscore) characters in final metric name. default is true
+#   #convert_paths = true
+#
+#   ## Use Regex to sanitize metric and tag names from invalid characters
+#   ## Regex is more thorough, but significantly slower. default is false
+#   #use_regex = false
+#
+#   ## point tags to use as the source name for Wavefront (if none found, host will be used)
+#   #source_override = ["hostname", "address", "agent_host", "node_host"]
+#
+#   ## whether to convert boolean values to numeric values, with false -> 0.0 and true -> 1.0. default is true
+#   #convert_bool = true
+#
+#   ## Define a mapping, namespaced by metric prefix, from string values to numeric values
+#   ##   deprecated in 1.9; use the enum processor plugin
+#   #[[outputs.wavefront.string_to_number.elasticsearch]]
+#   #  green = 1.0
+#   #  yellow = 0.5
+#   #  red = 0.0
+
+
+
+###############################################################################
+#                            PROCESSOR PLUGINS                                #
+###############################################################################
+
+# # Convert values to another metric value type
+# [[processors.converter]]
+#   ## Tags to convert
+#   ##
+#   ## The table key determines the target type, and the array of key-values
+#   ## select the keys to convert.  The array may contain globs.
+#   ##   <target-type> = [<tag-key>...]
+#   [processors.converter.tags]
+#     string = []
+#     integer = []
+#     unsigned = []
+#     boolean = []
+#     float = []
+#
+#   ## Fields to convert
+#   ##
+#   ## The table key determines the target type, and the array of key-values
+#   ## select the keys to convert.  The array may contain globs.
+#   ##   <target-type> = [<field-key>...]
+#   [processors.converter.fields]
+#     tag = []
+#     string = []
+#     integer = []
+#     unsigned = []
+#     boolean = []
+#     float = []
+
+
+# # Map enum values according to given table.
+# [[processors.enum]]
+#   [[processors.enum.mapping]]
+#     ## Name of the field to map
+#     field = "status"
+#
+#     ## Destination field to be used for the mapped value.  By default the source
+#     ## field is used, overwriting the original value.
+#     # dest = "status_code"
+#
+#     ## Default value to be used for all values not contained in the mapping
+#     ## table.  When unset, the unmodified value for the field will be used if no
+#     ## match is found.
+#     # default = 0
+#
+#     ## Table of mappings
+#     [processors.enum.mapping.value_mappings]
+#       green = 1
+#       yellow = 2
+#       red = 3
+
+
+# # Apply metric modifications using override semantics.
+# [[processors.override]]
+#   ## All modifications on inputs and aggregators can be overridden:
+#   # name_override = "new_name"
+#   # name_prefix = "new_name_prefix"
+#   # name_suffix = "new_name_suffix"
+#
+#   ## Tags to be added (all values must be strings)
+#   # [processors.override.tags]
+#   #   additional_tag = "tag_value"
+
+
+# # Parse a value in a specified field/tag(s) and add the result in a new metric
+# [[processors.parser]]
+#   ## The name of the fields whose value will be parsed.
+#   parse_fields = []
+#
+#   ## If true, incoming metrics are not emitted.
+#   drop_original = false
+#
+#   ## If set to override, emitted metrics will be merged by overriding the
+#   ## original metric using the newly parsed metrics.
+#   merge = "override"
+#
+#   ## The dataformat to be read from files
+#   ## Each data format has its own unique set of configuration options, read
+#   ## more about them here:
+#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md
+#   data_format = "influx"
+
+
+# # Print all metrics that pass through this filter.
+# [[processors.printer]]
+
+
+# # Transforms tag and field values with regex pattern
+# [[processors.regex]]
+#   ## Tag and field conversions defined in a separate sub-tables
+#   # [[processors.regex.tags]]
+#   #   ## Tag to change
+#   #   key = "resp_code"
+#   #   ## Regular expression to match on a tag value
+#   #   pattern = "^(\\d)\\d\\d$"
+#   #   ## Pattern for constructing a new value (${1} represents first subgroup)
+#   #   replacement = "${1}xx"
+#
+#   # [[processors.regex.fields]]
+#   #   key = "request"
+#   #   ## All the power of the Go regular expressions available here
+#   #   ## For example, named subgroups
+#   #   pattern = "^/api(?P<method>/[\\w/]+)\\S*"
+#   #   replacement = "${method}"
+#   #   ## If result_key is present, a new field will be created
+#   #   ## instead of changing existing field
+#   #   result_key = "method"
+#
+#   ## Multiple conversions may be applied for one field sequentially
+#   ## Let's extract one more value
+#   # [[processors.regex.fields]]
+#   #   key = "request"
+#   #   pattern = ".*category=(\\w+).*"
+#   #   replacement = "${1}"
+#   #   result_key = "search_category"
+
+
+# # Rename measurements, tags, and fields that pass through this filter.
+# [[processors.rename]]
+
+
+# # Perform string processing on tags, fields, and measurements
+# [[processors.strings]]
+#   ## Convert a tag value to uppercase
+#   # [[processors.strings.uppercase]]
+#   #   tag = "method"
+#
+#   ## Convert a field value to lowercase and store in a new field
+#   # [[processors.strings.lowercase]]
+#   #   field = "uri_stem"
+#   #   dest = "uri_stem_normalised"
+#
+#   ## Trim leading and trailing whitespace using the default cutset
+#   # [[processors.strings.trim]]
+#   #   field = "message"
+#
+#   ## Trim leading characters in cutset
+#   # [[processors.strings.trim_left]]
+#   #   field = "message"
+#   #   cutset = "\t"
+#
+#   ## Trim trailing characters in cutset
+#   # [[processors.strings.trim_right]]
+#   #   field = "message"
+#   #   cutset = "\r\n"
+#
+#   ## Trim the given prefix from the field
+#   # [[processors.strings.trim_prefix]]
+#   #   field = "my_value"
+#   #   prefix = "my_"
+#
+#   ## Trim the given suffix from the field
+#   # [[processors.strings.trim_suffix]]
+#   #   field = "read_count"
+#   #   suffix = "_count"
+#
+#   ## Replace all non-overlapping instances of old with new
+#   # [[processors.strings.replace]]
+#   #   measurement = "*"
+#   #   old = ":"
+#   #   new = "_"
+
+
+# # Print all metrics that pass through this filter.
+# [[processors.topk]]
+#   ## How many seconds between aggregations
+#   # period = 10
+#
+#   ## How many top metrics to return
+#   # k = 10
+#
+#   ## Over which tags should the aggregation be done. Globs can be specified, in
+#   ## which case any tag matching the glob will aggregated over. If set to an
+#   ## empty list is no aggregation over tags is done
+#   # group_by = ['*']
+#
+#   ## Over which fields are the top k are calculated
+#   # fields = ["value"]
+#
+#   ## What aggregation to use. Options: sum, mean, min, max
+#   # aggregation = "mean"
+#
+#   ## Instead of the top k largest metrics, return the bottom k lowest metrics
+#   # bottomk = false
+#
+#   ## The plugin assigns each metric a GroupBy tag generated from its name and
+#   ## tags. If this setting is different than "" the plugin will add a
+#   ## tag (which name will be the value of this setting) to each metric with
+#   ## the value of the calculated GroupBy tag. Useful for debugging
+#   # add_groupby_tag = ""
+#
+#   ## These settings provide a way to know the position of each metric in
+#   ## the top k. The 'add_rank_field' setting allows to specify for which
+#   ## fields the position is required. If the list is non empty, then a field
+#   ## will be added to each and every metric for each string present in this
+#   ## setting. This field will contain the ranking of the group that
+#   ## the metric belonged to when aggregated over that field.
+#   ## The name of the field will be set to the name of the aggregation field,
+#   ## suffixed with the string '_topk_rank'
+#   # add_rank_fields = []
+#
+#   ## These settings provide a way to know what values the plugin is generating
+#   ## when aggregating metrics. The 'add_agregate_field' setting allows to
+#   ## specify for which fields the final aggregation value is required. If the
+#   ## list is non empty, then a field will be added to each every metric for
+#   ## each field present in this setting. This field will contain
+#   ## the computed aggregation for the group that the metric belonged to when
+#   ## aggregated over that field.
+#   ## The name of the field will be set to the name of the aggregation field,
+#   ## suffixed with the string '_topk_aggregate'
+#   # add_aggregate_fields = []
+
+
+
+###############################################################################
+#                            AGGREGATOR PLUGINS                               #
+###############################################################################
+
+# # Keep the aggregate basicstats of each metric passing through.
+# [[aggregators.basicstats]]
+#   ## The period on which to flush & clear the aggregator.
+#   period = "30s"
+#   ## If true, the original metric will be dropped by the
+#   ## aggregator and will not get sent to the output plugins.
+#   drop_original = false
+#
+#   ## Configures which basic stats to push as fields
+#   # stats = ["count", "min", "max", "mean", "stdev", "s2", "sum"]
+
+
+# # Create aggregate histograms.
+# [[aggregators.histogram]]
+#   ## The period in which to flush the aggregator.
+#   period = "30s"
+#
+#   ## If true, the original metric will be dropped by the
+#   ## aggregator and will not get sent to the output plugins.
+#   drop_original = false
+#
+#   ## Example config that aggregates all fields of the metric.
+#   # [[aggregators.histogram.config]]
+#   #   ## The set of buckets.
+#   #   buckets = [0.0, 15.6, 34.5, 49.1, 71.5, 80.5, 94.5, 100.0]
+#   #   ## The name of metric.
+#   #   measurement_name = "cpu"
+#
+#   ## Example config that aggregates only specific fields of the metric.
+#   # [[aggregators.histogram.config]]
+#   #   ## The set of buckets.
+#   #   buckets = [0.0, 10.0, 20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 80.0, 90.0, 100.0]
+#   #   ## The name of metric.
+#   #   measurement_name = "diskio"
+#   #   ## The concrete fields of metric
+#   #   fields = ["io_time", "read_time", "write_time"]
+
+
+# # Keep the aggregate min/max of each metric passing through.
+# [[aggregators.minmax]]
+#   ## General Aggregator Arguments:
+#   ## The period on which to flush & clear the aggregator.
+#   period = "30s"
+#   ## If true, the original metric will be dropped by the
+#   ## aggregator and will not get sent to the output plugins.
+#   drop_original = false
+
+
+# # Count the occurrence of values in fields.
+# [[aggregators.valuecounter]]
+#   ## General Aggregator Arguments:
+#   ## The period on which to flush & clear the aggregator.
+#   period = "30s"
+#   ## If true, the original metric will be dropped by the
+#   ## aggregator and will not get sent to the output plugins.
+#   drop_original = false
+#   ## The fields for which the values will be counted
+#   fields = []
+
+
+
+###############################################################################
+#                            INPUT PLUGINS                                    #
+###############################################################################
+
+# Read metrics about cpu usage
+[[inputs.cpu]]
+  ## Whether to report per-cpu stats or not
+  percpu = true
+  ## Whether to report total system cpu stats or not
+  totalcpu = true
+  ## If true, collect raw CPU time metrics.
+  collect_cpu_time = false
+  ## If true, compute and report the sum of all non-idle CPU states.
+  report_active = false
+
+
+# Read metrics about disk usage by mount point
+[[inputs.disk]]
+  ## By default stats will be gathered for all mount points.
+  ## Set mount_points will restrict the stats to only the specified mount points.
+  # mount_points = ["/"]
+
+  ## Ignore mount points by filesystem type.
+  ignore_fs = ["tmpfs", "devtmpfs", "devfs", "overlay", "aufs", "squashfs"]
+
+
+# Read metrics about disk IO by device
+[[inputs.diskio]]
+  ## By default, telegraf will gather stats for all devices including
+  ## disk partitions.
+  ## Setting devices will restrict the stats to the specified devices.
+  # devices = ["sda", "sdb", "vd*"]
+  ## Uncomment the following line if you need disk serial numbers.
+  # skip_serial_number = false
+  #
+  ## On systems which support it, device metadata can be added in the form of
+  ## tags.
+  ## Currently only Linux is supported via udev properties. You can view
+  ## available properties for a device by running:
+  ## 'udevadm info -q property -n /dev/sda'
+  ## Note: Most, but not all, udev properties can be accessed this way. Properties
+  ## that are currently inaccessible include DEVTYPE, DEVNAME, and DEVPATH.
+  # device_tags = ["ID_FS_TYPE", "ID_FS_USAGE"]
+  #
+  ## Using the same metadata source as device_tags, you can also customize the
+  ## name of the device via templates.
+  ## The 'name_templates' parameter is a list of templates to try and apply to
+  ## the device. The template may contain variables in the form of '$PROPERTY' or
+  ## '${PROPERTY}'. The first template which does not contain any variables not
+  ## present for the device is used as the device name tag.
+  ## The typical use case is for LVM volumes, to get the VG/LV name instead of
+  ## the near-meaningless DM-0 name.
+  # name_templates = ["$ID_FS_LABEL","$DM_VG_NAME/$DM_LV_NAME"]
+
+
+# Get kernel statistics from /proc/stat
+[[inputs.kernel]]
+  # no configuration
+
+
+# Read metrics about memory usage
+[[inputs.mem]]
+  # no configuration
+
+
+# Get the number of processes and group them by status
+[[inputs.processes]]
+  # no configuration
+
+
+# Read metrics about swap memory usage
+[[inputs.swap]]
+  # no configuration
+
+
+# Read metrics about system load & uptime
+# [[inputs.system]]
+#  # no configuration
+
+
+# # Gather ActiveMQ metrics
+# [[inputs.activemq]]
+#   ## Required ActiveMQ Endpoint
+#   # server = "192.168.50.10"
+#
+#   ## Required ActiveMQ port
+#   # port = 8161
+#
+#   ## Credentials for basic HTTP authentication
+#   # username = "admin"
+#   # password = "admin"
+#
+#   ## Required ActiveMQ webadmin root path
+#   # webadmin = "admin"
+#
+#   ## Maximum time to receive response.
+#   # response_timeout = "5s"
+#
+#   ## Optional TLS Config
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#   ## Use TLS but skip chain & host verification
+
+
+# # Read stats from aerospike server(s)
+# [[inputs.aerospike]]
+#   ## Aerospike servers to connect to (with port)
+#   ## This plugin will query all namespaces the aerospike
+#   ## server has configured and get stats for them.
+#   servers = ["localhost:3000"]
+#
+#   # username = "telegraf"
+#   # password = "pa$$word"
+#
+#   ## Optional TLS Config
+#   # enable_tls = false
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#   ## If false, skip chain & host verification
+#   # insecure_skip_verify = true
+
+
+# # Read Apache status information (mod_status)
+# [[inputs.apache]]
+#   ## An array of URLs to gather from, must be directed at the machine
+#   ## readable version of the mod_status page including the auto query string.
+#   ## Default is "http://localhost/server-status?auto".
+#   urls = ["http://localhost/server-status?auto"]
+#
+#   ## Credentials for basic HTTP authentication.
+#   # username = "myuser"
+#   # password = "mypassword"
+#
+#   ## Maximum time to receive response.
+#   # response_timeout = "5s"
+#
+#   ## Optional TLS Config
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#   ## Use TLS but skip chain & host verification
+#   # insecure_skip_verify = false
+
+
+# # Gather metrics from Apache Aurora schedulers
+# [[inputs.aurora]]
+#   ## Schedulers are the base addresses of your Aurora Schedulers
+#   schedulers = ["http://127.0.0.1:8081"]
+#
+#   ## Set of role types to collect metrics from.
+#   ##
+#   ## The scheduler roles are checked each interval by contacting the
+#   ## scheduler nodes; zookeeper is not contacted.
+#   # roles = ["leader", "follower"]
+#
+#   ## Timeout is the max time for total network operations.
+#   # timeout = "5s"
+#
+#   ## Username and password are sent using HTTP Basic Auth.
+#   # username = "username"
+#   # password = "pa$$word"
+#
+#   ## Optional TLS Config
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#   ## Use TLS but skip chain & host verification
+#   # insecure_skip_verify = false
+
+
+# # Read metrics of bcache from stats_total and dirty_data
+# [[inputs.bcache]]
+#   ## Bcache sets path
+#   ## If not specified, then default is:
+#   bcachePath = "/sys/fs/bcache"
+#
+#   ## By default, telegraf gather stats for all bcache devices
+#   ## Setting devices will restrict the stats to the specified
+#   ## bcache devices.
+#   bcacheDevs = ["bcache0"]
+
+
+# # Collects Beanstalkd server and tubes stats
+# [[inputs.beanstalkd]]
+#   ## Server to collect data from
+#   server = "localhost:11300"
+#
+#   ## List of tubes to gather stats about.
+#   ## If no tubes specified then data gathered for each tube on server reported by list-tubes command
+#   tubes = ["notifications"]
+
+
+# # Collect bond interface status, slaves statuses and failures count
+# [[inputs.bond]]
+#   ## Sets 'proc' directory path
+#   ## If not specified, then default is /proc
+#   # host_proc = "/proc"
+#
+#   ## By default, telegraf gather stats for all bond interfaces
+#   ## Setting interfaces will restrict the stats to the specified
+#   ## bond interfaces.
+#   # bond_interfaces = ["bond0"]
+
+
+# # Collect Kafka topics and consumers status from Burrow HTTP API.
+# [[inputs.burrow]]
+#   ## Burrow API endpoints in format "schema://host:port".
+#   ## Default is "http://localhost:8000".
+#   servers = ["http://localhost:8000"]
+#
+#   ## Override Burrow API prefix.
+#   ## Useful when Burrow is behind reverse-proxy.
+#   # api_prefix = "/v3/kafka"
+#
+#   ## Maximum time to receive response.
+#   # response_timeout = "5s"
+#
+#   ## Limit per-server concurrent connections.
+#   ## Useful in case of large number of topics or consumer groups.
+#   # concurrent_connections = 20
+#
+#   ## Filter clusters, default is no filtering.
+#   ## Values can be specified as glob patterns.
+#   # clusters_include = []
+#   # clusters_exclude = []
+#
+#   ## Filter consumer groups, default is no filtering.
+#   ## Values can be specified as glob patterns.
+#   # groups_include = []
+#   # groups_exclude = []
+#
+#   ## Filter topics, default is no filtering.
+#   ## Values can be specified as glob patterns.
+#   # topics_include = []
+#   # topics_exclude = []
+#
+#   ## Credentials for basic HTTP authentication.
+#   # username = ""
+#   # password = ""
+#
+#   ## Optional SSL config
+#   # ssl_ca = "/etc/telegraf/ca.pem"
+#   # ssl_cert = "/etc/telegraf/cert.pem"
+#   # ssl_key = "/etc/telegraf/key.pem"
+#   # insecure_skip_verify = false
+
+
+# # Collects performance metrics from the MON and OSD nodes in a Ceph storage cluster.
+# [[inputs.ceph]]
+#   ## This is the recommended interval to poll.  Too frequent and you will lose
+#   ## data points due to timeouts during rebalancing and recovery
+#   interval = '1m'
+#
+#   ## All configuration values are optional, defaults are shown below
+#
+#   ## location of ceph binary
+#   ceph_binary = "/usr/bin/ceph"
+#
+#   ## directory in which to look for socket files
+#   socket_dir = "/var/run/ceph"
+#
+#   ## prefix of MON and OSD socket files, used to determine socket type
+#   mon_prefix = "ceph-mon"
+#   osd_prefix = "ceph-osd"
+#
+#   ## suffix used to identify socket files
+#   socket_suffix = "asok"
+#
+#   ## Ceph user to authenticate as
+#   ceph_user = "client.admin"
+#
+#   ## Ceph configuration to use to locate the cluster
+#   ceph_config = "/etc/ceph/ceph.conf"
+#
+#   ## Whether to gather statistics via the admin socket
+#   gather_admin_socket_stats = true
+#
+#   ## Whether to gather statistics via ceph commands
+#   gather_cluster_stats = false
+
+
+# # Read specific statistics per cgroup
+# [[inputs.cgroup]]
+#   ## Directories in which to look for files, globs are supported.
+#   ## Consider restricting paths to the set of cgroups you really
+#   ## want to monitor if you have a large number of cgroups, to avoid
+#   ## any cardinality issues.
+#   # paths = [
+#   #   "/cgroup/memory",
+#   #   "/cgroup/memory/child1",
+#   #   "/cgroup/memory/child2/*",
+#   # ]
+#   ## cgroup stat fields, as file names, globs are supported.
+#   ## these file names are appended to each path from above.
+#   # files = ["memory.*usage*", "memory.limit_in_bytes"]
+
+
+# # Get standard chrony metrics, requires chronyc executable.
+# [[inputs.chrony]]
+#   ## If true, chronyc tries to perform a DNS lookup for the time server.
+#   # dns_lookup = false
+
+
+# # Pull Metric Statistics from Amazon CloudWatch
+# [[inputs.cloudwatch]]
+#   ## Amazon Region
+#   region = "us-east-1"
+#
+#   ## Amazon Credentials
+#   ## Credentials are loaded in the following order
+#   ## 1) Assumed credentials via STS if role_arn is specified
+#   ## 2) explicit credentials from 'access_key' and 'secret_key'
+#   ## 3) shared profile from 'profile'
+#   ## 4) environment variables
+#   ## 5) shared credentials file
+#   ## 6) EC2 Instance Profile
+#   #access_key = ""
+#   #secret_key = ""
+#   #token = ""
+#   #role_arn = ""
+#   #profile = ""
+#   #shared_credential_file = ""
+#
+#   ## Endpoint to make request against, the correct endpoint is automatically
+#   ## determined and this option should only be set if you wish to override the
+#   ## default.
+#   ##   ex: endpoint_url = "http://localhost:8000"
+#   # endpoint_url = ""
+#
+#   # The minimum period for Cloudwatch metrics is 1 minute (60s). However not all
+#   # metrics are made available to the 1 minute period. Some are collected at
+#   # 3 minute, 5 minute, or larger intervals. See https://aws.amazon.com/cloudwatch/faqs/#monitoring.
+#   # Note that if a period is configured that is smaller than the minimum for a
+#   # particular metric, that metric will not be returned by the Cloudwatch API
+#   # and will not be collected by Telegraf.
+#   #
+#   ## Requested CloudWatch aggregation Period (required - must be a multiple of 60s)
+#   period = "5m"
+#
+#   ## Collection Delay (required - must account for metrics availability via CloudWatch API)
+#   delay = "5m"
+#
+#   ## Recommended: use metric 'interval' that is a multiple of 'period' to avoid
+#   ## gaps or overlap in pulled data
+#   interval = "5m"
+#
+#   ## Configure the TTL for the internal cache of metrics.
+#   ## Defaults to 1 hr if not specified
+#   #cache_ttl = "10m"
+#
+#   ## Metric Statistic Namespace (required)
+#   namespace = "AWS/ELB"
+#
+#   ## Maximum requests per second. Note that the global default AWS rate limit is
+#   ## 400 reqs/sec, so if you define multiple namespaces, these should add up to a
+#   ## maximum of 400. Optional - default value is 200.
+#   ## See http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_limits.html
+#   ratelimit = 200
+#
+#   ## Metrics to Pull (optional)
+#   ## Defaults to all Metrics in Namespace if nothing is provided
+#   ## Refreshes Namespace available metrics every 1h
+#   #[[inputs.cloudwatch.metrics]]
+#   #  names = ["Latency", "RequestCount"]
+#   #
+#   #  ## Dimension filters for Metric.  These are optional however all dimensions
+#   #  ## defined for the metric names must be specified in order to retrieve
+#   #  ## the metric statistics.
+#   #  [[inputs.cloudwatch.metrics.dimensions]]
+#   #    name = "LoadBalancerName"
+#   #    value = "p-example"
+
+
+# # Collects conntrack stats from the configured directories and files.
+# [[inputs.conntrack]]
+#    ## The following defaults would work with multiple versions of conntrack.
+#    ## Note the nf_ and ip_ filename prefixes are mutually exclusive across
+#    ## kernel versions, as are the directory locations.
+#
+#    ## Superset of filenames to look for within the conntrack dirs.
+#    ## Missing files will be ignored.
+#    files = ["ip_conntrack_count","ip_conntrack_max",
+#             "nf_conntrack_count","nf_conntrack_max"]
+#
+#    ## Directories to search within for the conntrack files above.
+#    ## Missing directrories will be ignored.
+#    dirs = ["/proc/sys/net/ipv4/netfilter","/proc/sys/net/netfilter"]
+
+
+# # Gather health check statuses from services registered in Consul
+# [[inputs.consul]]
+#   ## Consul server address
+#   # address = "localhost"
+#
+#   ## URI scheme for the Consul server, one of "http", "https"
+#   # scheme = "http"
+#
+#   ## ACL token used in every request
+#   # token = ""
+#
+#   ## HTTP Basic Authentication username and password.
+#   # username = ""
+#   # password = ""
+#
+#   ## Data center to query the health checks from
+#   # datacenter = ""
+#
+#   ## Optional TLS Config
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#   ## Use TLS but skip chain & host verification
+#   # insecure_skip_verify = true
+#
+#   ## Consul checks' tag splitting
+#   # When tags are formatted like "key:value" with ":" as a delimiter then
+#   # they will be splitted and reported as proper key:value in Telegraf
+#   # tag_delimiter = ":"
+
+
+# # Read metrics from one or many couchbase clusters
+# [[inputs.couchbase]]
+#   ## specify servers via a url matching:
+#   ##  [protocol://][:password]@address[:port]
+#   ##  e.g.
+#   ##    http://couchbase-0.example.com/
+#   ##    http://admin:secret@couchbase-0.example.com:8091/
+#   ##
+#   ## If no servers are specified, then localhost is used as the host.
+#   ## If no protocol is specified, HTTP is used.
+#   ## If no port is specified, 8091 is used.
+#   servers = ["http://localhost:8091"]
+
+
+# # Read CouchDB Stats from one or more servers
+# [[inputs.couchdb]]
+#   ## Works with CouchDB stats endpoints out of the box
+#   ## Multiple Hosts from which to read CouchDB stats:
+#   hosts = ["http://localhost:8086/_stats"]
+#
+#   ## Use HTTP Basic Authentication.
+#   # basic_username = "telegraf"
+#   # basic_password = "p@ssw0rd"
+
+
+# # Input plugin for DC/OS metrics
+# [[inputs.dcos]]
+#   ## The DC/OS cluster URL.
+#   cluster_url = "https://dcos-ee-master-1"
+#
+#   ## The ID of the service account.
+#   service_account_id = "telegraf"
+#   ## The private key file for the service account.
+#   service_account_private_key = "/etc/telegraf/telegraf-sa-key.pem"
+#
+#   ## Path containing login token.  If set, will read on every gather.
+#   # token_file = "/home/dcos/.dcos/token"
+#
+#   ## In all filter options if both include and exclude are empty all items
+#   ## will be collected.  Arrays may contain glob patterns.
+#   ##
+#   ## Node IDs to collect metrics from.  If a node is excluded, no metrics will
+#   ## be collected for its containers or apps.
+#   # node_include = []
+#   # node_exclude = []
+#   ## Container IDs to collect container metrics from.
+#   # container_include = []
+#   # container_exclude = []
+#   ## Container IDs to collect app metrics from.
+#   # app_include = []
+#   # app_exclude = []
+#
+#   ## Maximum concurrent connections to the cluster.
+#   # max_connections = 10
+#   ## Maximum time to receive a response from cluster.
+#   # response_timeout = "20s"
+#
+#   ## Optional TLS Config
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#   ## If false, skip chain & host verification
+#   # insecure_skip_verify = true
+#
+#   ## Recommended filtering to reduce series cardinality.
+#   # [inputs.dcos.tagdrop]
+#   #   path = ["/var/lib/mesos/slave/slaves/*"]
+
+
+# # Read metrics from one or many disque servers
+# [[inputs.disque]]
+#   ## An array of URI to gather stats about. Specify an ip or hostname
+#   ## with optional port and password.
+#   ## ie disque://localhost, disque://10.10.3.33:18832, 10.0.0.1:10000, etc.
+#   ## If no servers are specified, then localhost is used as the host.
+#   servers = ["localhost"]
+
+
+# # Provide a native collection for dmsetup based statistics for dm-cache
+# [[inputs.dmcache]]
+#   ## Whether to report per-device stats or not
+#   per_device = true
+
+
+# # Query given DNS server and gives statistics
+# [[inputs.dns_query]]
+#   ## servers to query
+#   servers = ["8.8.8.8"]
+#
+#   ## Network is the network protocol name.
+#   # network = "udp"
+#
+#   ## Domains or subdomains to query.
+#   # domains = ["."]
+#
+#   ## Query record type.
+#   ## Posible values: A, AAAA, CNAME, MX, NS, PTR, TXT, SOA, SPF, SRV.
+#   # record_type = "A"
+#
+#   ## Dns server port.
+#   # port = 53
+#
+#   ## Query timeout in seconds.
+#   # timeout = 2
+
+
+# # Read metrics about docker containers
+# [[inputs.docker]]
+#   ## Docker Endpoint
+#   ##   To use TCP, set endpoint = "tcp://[ip]:[port]"
+#   ##   To use environment variables (ie, docker-machine), set endpoint = "ENV"
+#   endpoint = "unix:///var/run/docker.sock"
+#
+#   ## Set to true to collect Swarm metrics(desired_replicas, running_replicas)
+#   gather_services = false
+#
+#   ## Only collect metrics for these containers, collect all if empty
+#   container_names = []
+#
+#   ## Containers to include and exclude. Globs accepted.
+#   ## Note that an empty array for both will include all containers
+#   container_name_include = []
+#   container_name_exclude = []
+#
+#   ## Container states to include and exclude. Globs accepted.
+#   ## When empty only containers in the "running" state will be captured.
+#   # container_state_include = []
+#   # container_state_exclude = []
+#
+#   ## Timeout for docker list, info, and stats commands
+#   timeout = "5s"
+#
+#   ## Whether to report for each container per-device blkio (8:0, 8:1...) and
+#   ## network (eth0, eth1, ...) stats or not
+#   perdevice = true
+#   ## Whether to report for each container total blkio and network stats or not
+#   total = false
+#   ## Which environment variables should we use as a tag
+#   ##tag_env = ["JAVA_HOME", "HEAP_SIZE"]
+#
+#   ## docker labels to include and exclude as tags.  Globs accepted.
+#   ## Note that an empty array for both will include all labels as tags
+#   docker_label_include = []
+#   docker_label_exclude = []
+#
+#   ## Optional TLS Config
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#   ## Use TLS but skip chain & host verification
+#   # insecure_skip_verify = false
+
+
+# # Read statistics from one or many dovecot servers
+# [[inputs.dovecot]]
+#   ## specify dovecot servers via an address:port list
+#   ##  e.g.
+#   ##    localhost:24242
+#   ##
+#   ## If no servers are specified, then localhost is used as the host.
+#   servers = ["localhost:24242"]
+#   ## Type is one of "user", "domain", "ip", or "global"
+#   type = "global"
+#   ## Wildcard matches like "*.com". An empty string "" is same as "*"
+#   ## If type = "ip" filters should be <IP/network>
+#   filters = [""]
+
+
+# # Read stats from one or more Elasticsearch servers or clusters
+# [[inputs.elasticsearch]]
+#   ## specify a list of one or more Elasticsearch servers
+#   # you can add username and password to your url to use basic authentication:
+#   # servers = ["http://user:pass@localhost:9200"]
+#   servers = ["http://localhost:9200"]
+#
+#   ## Timeout for HTTP requests to the elastic search server(s)
+#   http_timeout = "5s"
+#
+#   ## When local is true (the default), the node will read only its own stats.
+#   ## Set local to false when you want to read the node stats from all nodes
+#   ## of the cluster.
+#   local = true
+#
+#   ## Set cluster_health to true when you want to also obtain cluster health stats
+#   cluster_health = false
+#
+#   ## Adjust cluster_health_level when you want to also obtain detailed health stats
+#   ## The options are
+#   ##  - indices (default)
+#   ##  - cluster
+#   # cluster_health_level = "indices"
+#
+#   ## Set cluster_stats to true when you want to also obtain cluster stats.
+#   cluster_stats = false
+#
+#   ## Only gather cluster_stats from the master node. To work this require local = true
+#   cluster_stats_only_from_master = true
+#
+#   ## node_stats is a list of sub-stats that you want to have gathered. Valid options
+#   ## are "indices", "os", "process", "jvm", "thread_pool", "fs", "transport", "http",
+#   ## "breaker". Per default, all stats are gathered.
+#   # node_stats = ["jvm", "http"]
+#
+#   ## Optional TLS Config
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#   ## Use TLS but skip chain & host verification
+#   # insecure_skip_verify = false
+
+
+# # Read metrics from one or more commands that can output to stdout
+# [[inputs.exec]]
+#   ## Commands array
+#   commands = [
+#     "/tmp/test.sh",
+#     "/usr/bin/mycollector --foo=bar",
+#     "/tmp/collect_*.sh"
+#   ]
+#
+#   ## Timeout for each command to complete.
+#   timeout = "5s"
+#
+#   ## measurement name suffix (for separating different commands)
+#   name_suffix = "_mycollector"
+#
+#   ## Data format to consume.
+#   ## Each data format has its own unique set of configuration options, read
+#   ## more about them here:
+#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md
+#   data_format = "influx"
+
+
+# # Read metrics from fail2ban.
+# [[inputs.fail2ban]]
+#   ## Use sudo to run fail2ban-client
+#   use_sudo = false
+
+
+# # Read devices value(s) from a Fibaro controller
+# [[inputs.fibaro]]
+#   ## Required Fibaro controller address/hostname.
+#   ## Note: at the time of writing this plugin, Fibaro only implemented http - no https available
+#   url = "http://<controller>:80"
+#
+#   ## Required credentials to access the API (http://<controller/api/<component>)
+#   username = "<username>"
+#   password = "<password>"
+#
+#   ## Amount of time allowed to complete the HTTP request
+#   # timeout = "5s"
+
+
+# # Reload and gather from file[s] on telegraf's interval.
+# [[inputs.file]]
+#   ## Files to parse each interval.
+#   ## These accept standard unix glob matching rules, but with the addition of
+#   ## ** as a "super asterisk". ie:
+#   ##   /var/log/**.log     -> recursively find all .log files in /var/log
+#   ##   /var/log/*/*.log    -> find all .log files with a parent dir in /var/log
+#   ##   /var/log/apache.log -> only read the apache log file
+#   files = ["/var/log/apache/access.log"]
+#
+#   ## The dataformat to be read from files
+#   ## Each data format has its own unique set of configuration options, read
+#   ## more about them here:
+#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md
+#   data_format = "influx"
+
+
+# # Count files in a directory
+# [[inputs.filecount]]
+#   ## Directory to gather stats about.
+#   ##   deprecated in 1.9; use the directories option
+#   # directory = "/var/cache/apt/archives"
+#
+#   ## Directories to gather stats about.
+#   ## This accept standard unit glob matching rules, but with the addition of
+#   ## ** as a "super asterisk". ie:
+#   ##   /var/log/**    -> recursively find all directories in /var/log and count files in each directories
+#   ##   /var/log/*/*   -> find all directories with a parent dir in /var/log and count files in each directories
+#   ##   /var/log       -> count all files in /var/log and all of its subdirectories
+#   directories = ["/var/cache/apt/archives"]
+#
+#   ## Only count files that match the name pattern. Defaults to "*".
+#   name = "*.deb"
+#
+#   ## Count files in subdirectories. Defaults to true.
+#   recursive = false
+#
+#   ## Only count regular files. Defaults to true.
+#   regular_only = true
+#
+#   ## Only count files that are at least this size. If size is
+#   ## a negative number, only count files that are smaller than the
+#   ## absolute value of size. Acceptable units are B, KiB, MiB, KB, ...
+#   ## Without quotes and units, interpreted as size in bytes.
+#   size = "0B"
+#
+#   ## Only count files that have not been touched for at least this
+#   ## duration. If mtime is negative, only count files that have been
+#   ## touched in this duration. Defaults to "0s".
+#   mtime = "0s"
+
+
+# # Read stats about given file(s)
+# [[inputs.filestat]]
+#   ## Files to gather stats about.
+#   ## These accept standard unix glob matching rules, but with the addition of
+#   ## ** as a "super asterisk". ie:
+#   ##   "/var/log/**.log"  -> recursively find all .log files in /var/log
+#   ##   "/var/log/*/*.log" -> find all .log files with a parent dir in /var/log
+#   ##   "/var/log/apache.log" -> just tail the apache log file
+#   ##
+#   ## See https://github.com/gobwas/glob for more examples
+#   ##
+#   files = ["/var/log/**.log"]
+#   ## If true, read the entire file and calculate an md5 checksum.
+#   md5 = false
+
+
+# # Read metrics exposed by fluentd in_monitor plugin
+# [[inputs.fluentd]]
+#   ## This plugin reads information exposed by fluentd (using /api/plugins.json endpoint).
+#   ##
+#   ## Endpoint:
+#   ## - only one URI is allowed
+#   ## - https is not supported
+#   endpoint = "http://localhost:24220/api/plugins.json"
+#
+#   ## Define which plugins have to be excluded (based on "type" field - e.g. monitor_agent)
+#   exclude = [
+# 	  "monitor_agent",
+# 	  "dummy",
+#   ]
+
+
+# # Read flattened metrics from one or more GrayLog HTTP endpoints
+# [[inputs.graylog]]
+#   ## API endpoint, currently supported API:
+#   ##
+#   ##   - multiple  (Ex http://<host>:12900/system/metrics/multiple)
+#   ##   - namespace (Ex http://<host>:12900/system/metrics/namespace/{namespace})
+#   ##
+#   ## For namespace endpoint, the metrics array will be ignored for that call.
+#   ## Endpoint can contain namespace and multiple type calls.
+#   ##
+#   ## Please check http://[graylog-server-ip]:12900/api-browser for full list
+#   ## of endpoints
+#   servers = [
+#     "http://[graylog-server-ip]:12900/system/metrics/multiple",
+#   ]
+#
+#   ## Metrics list
+#   ## List of metrics can be found on Graylog webservice documentation.
+#   ## Or by hitting the the web service api at:
+#   ##   http://[graylog-host]:12900/system/metrics
+#   metrics = [
+#     "jvm.cl.loaded",
+#     "jvm.memory.pools.Metaspace.committed"
+#   ]
+#
+#   ## Username and password
+#   username = ""
+#   password = ""
+#
+#   ## Optional TLS Config
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#   ## Use TLS but skip chain & host verification
+#   # insecure_skip_verify = false
+
+
+# # Read metrics of haproxy, via socket or csv stats page
+# [[inputs.haproxy]]
+#   ## An array of address to gather stats about. Specify an ip on hostname
+#   ## with optional port. ie localhost, 10.10.3.33:1936, etc.
+#   ## Make sure you specify the complete path to the stats endpoint
+#   ## including the protocol, ie http://10.10.3.33:1936/haproxy?stats
+#
+#   ## If no servers are specified, then default to 127.0.0.1:1936/haproxy?stats
+#   servers = ["http://myhaproxy.com:1936/haproxy?stats"]
+#
+#   ## Credentials for basic HTTP authentication
+#   # username = "admin"
+#   # password = "admin"
+#
+#   ## You can also use local socket with standard wildcard globbing.
+#   ## Server address not starting with 'http' will be treated as a possible
+#   ## socket, so both examples below are valid.
+#   # servers = ["socket:/run/haproxy/admin.sock", "/run/haproxy/*.sock"]
+#
+#   ## By default, some of the fields are renamed from what haproxy calls them.
+#   ## Setting this option to true results in the plugin keeping the original
+#   ## field names.
+#   # keep_field_names = false
+#
+#   ## Optional TLS Config
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#   ## Use TLS but skip chain & host verification
+#   # insecure_skip_verify = false
+
+
+# # Monitor disks' temperatures using hddtemp
+# [[inputs.hddtemp]]
+#   ## By default, telegraf gathers temps data from all disks detected by the
+#   ## hddtemp.
+#   ##
+#   ## Only collect temps from the selected disks.
+#   ##
+#   ## A * as the device name will return the temperature values of all disks.
+#   ##
+#   # address = "127.0.0.1:7634"
+#   # devices = ["sda", "*"]
+
+
+# # Read formatted metrics from one or more HTTP endpoints
+# [[inputs.http]]
+#   ## One or more URLs from which to read formatted metrics
+#   urls = [
+#     "http://localhost/metrics"
+#   ]
+#
+#   ## HTTP method
+#   # method = "GET"
+#
+#   ## Optional HTTP headers
+#   # headers = {"X-Special-Header" = "Special-Value"}
+#
+#   ## Optional HTTP Basic Auth Credentials
+#   # username = "username"
+#   # password = "pa$$word"
+#
+#   ## HTTP entity-body to send with POST/PUT requests.
+#   # body = ""
+#
+#   ## HTTP Content-Encoding for write request body, can be set to "gzip" to
+#   ## compress body or "identity" to apply no encoding.
+#   # content_encoding = "identity"
+#
+#   ## Optional TLS Config
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#   ## Use TLS but skip chain & host verification
+#   # insecure_skip_verify = false
+#
+#   ## Amount of time allowed to complete the HTTP request
+#   # timeout = "5s"
+#
+#   ## Data format to consume.
+#   ## Each data format has its own unique set of configuration options, read
+#   ## more about them here:
+#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md
+#   # data_format = "influx"
+
+
+# # HTTP/HTTPS request given an address a method and a timeout
+# [[inputs.http_response]]
+#   ## Server address (default http://localhost)
+#   # address = "http://localhost"
+#
+#   ## Set http_proxy (telegraf uses the system wide proxy settings if it's is not set)
+#   # http_proxy = "http://localhost:8888"
+#
+#   ## Set response_timeout (default 5 seconds)
+#   # response_timeout = "5s"
+#
+#   ## HTTP Request Method
+#   # method = "GET"
+#
+#   ## Whether to follow redirects from the server (defaults to false)
+#   # follow_redirects = false
+#
+#   ## Optional HTTP Request Body
+#   # body = '''
+#   # {'fake':'data'}
+#   # '''
+#
+#   ## Optional substring or regex match in body of the response
+#   # response_string_match = "\"service_status\": \"up\""
+#   # response_string_match = "ok"
+#   # response_string_match = "\".*_status\".?:.?\"up\""
+#
+#   ## Optional TLS Config
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#   ## Use TLS but skip chain & host verification
+#   # insecure_skip_verify = false
+#
+#   ## HTTP Request Headers (all values must be strings)
+#   # [inputs.http_response.headers]
+#   #   Host = "github.com"
+
+
+# # Read flattened metrics from one or more JSON HTTP endpoints
+# [[inputs.httpjson]]
+#   ## NOTE This plugin only reads numerical measurements, strings and booleans
+#   ## will be ignored.
+#
+#   ## Name for the service being polled.  Will be appended to the name of the
+#   ## measurement e.g. httpjson_webserver_stats
+#   ##
+#   ## Deprecated (1.3.0): Use name_override, name_suffix, name_prefix instead.
+#   name = "webserver_stats"
+#
+#   ## URL of each server in the service's cluster
+#   servers = [
+#     "http://localhost:9999/stats/",
+#     "http://localhost:9998/stats/",
+#   ]
+#   ## Set response_timeout (default 5 seconds)
+#   response_timeout = "5s"
+#
+#   ## HTTP method to use: GET or POST (case-sensitive)
+#   method = "GET"
+#
+#   ## List of tag names to extract from top-level of JSON server response
+#   # tag_keys = [
+#   #   "my_tag_1",
+#   #   "my_tag_2"
+#   # ]
+#
+#   ## Optional TLS Config
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#   ## Use TLS but skip chain & host verification
+#   # insecure_skip_verify = false
+#
+#   ## HTTP parameters (all values must be strings).  For "GET" requests, data
+#   ## will be included in the query.  For "POST" requests, data will be included
+#   ## in the request body as "x-www-form-urlencoded".
+#   # [inputs.httpjson.parameters]
+#   #   event_type = "cpu_spike"
+#   #   threshold = "0.75"
+#
+#   ## HTTP Headers (all values must be strings)
+#   # [inputs.httpjson.headers]
+#   #   X-Auth-Token = "my-xauth-token"
+#   #   apiVersion = "v1"
+
+
+# # Gather Icinga2 status
+# [[inputs.icinga2]]
+#   ## Required Icinga2 server address (default: "https://localhost:5665")
+#   # server = "https://localhost:5665"
+#
+#   ## Required Icinga2 object type ("services" or "hosts, default "services")
+#   # object_type = "services"
+#
+#   ## Credentials for basic HTTP authentication
+#   # username = "admin"
+#   # password = "admin"
+#
+#   ## Maximum time to receive response.
+#   # response_timeout = "5s"
+#
+#   ## Optional TLS Config
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#   ## Use TLS but skip chain & host verification
+#   # insecure_skip_verify = true
+
+
+# # Read InfluxDB-formatted JSON metrics from one or more HTTP endpoints
+# [[inputs.influxdb]]
+#   ## Works with InfluxDB debug endpoints out of the box,
+#   ## but other services can use this format too.
+#   ## See the influxdb plugin's README for more details.
+#
+#   ## Multiple URLs from which to read InfluxDB-formatted JSON
+#   ## Default is "http://localhost:8086/debug/vars".
+#   urls = [
+#     "http://localhost:8086/debug/vars"
+#   ]
+#
+#   ## Optional TLS Config
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#   ## Use TLS but skip chain & host verification
+#   # insecure_skip_verify = false
+#
+#   ## http request & header timeout
+#   timeout = "5s"
+
+
+# # Collect statistics about itself
+# [[inputs.internal]]
+#   ## If true, collect telegraf memory stats.
+#   # collect_memstats = true
+
+
+# # This plugin gathers interrupts data from /proc/interrupts and /proc/softirqs.
+# [[inputs.interrupts]]
+#   ## When set to true, cpu metrics are tagged with the cpu.  Otherwise cpu is
+#   ## stored as a field.
+#   ##
+#   ## The default is false for backwards compatibility, and will be changed to
+#   ## true in a future version.  It is recommended to set to true on new
+#   ## deployments.
+#   # cpu_as_tag = false
+#
+#   ## To filter which IRQs to collect, make use of tagpass / tagdrop, i.e.
+#   # [inputs.interrupts.tagdrop]
+#   #   irq = [ "NET_RX", "TASKLET" ]
+
+
+# # Read metrics from the bare metal servers via IPMI
+# [[inputs.ipmi_sensor]]
+#   ## optionally specify the path to the ipmitool executable
+#   # path = "/usr/bin/ipmitool"
+#   ##
+#   ## optionally force session privilege level. Can be CALLBACK, USER, OPERATOR, ADMINISTRATOR
+#   # privilege = "ADMINISTRATOR"
+#   ##
+#   ## optionally specify one or more servers via a url matching
+#   ##  [username[:password]@][protocol[(address)]]
+#   ##  e.g.
+#   ##    root:passwd@lan(127.0.0.1)
+#   ##
+#   ## if no servers are specified, local machine sensor stats will be queried
+#   ##
+#   # servers = ["USERID:PASSW0RD@lan(192.168.1.1)"]
+#
+#   ## Recommended: use metric 'interval' that is a multiple of 'timeout' to avoid
+#   ## gaps or overlap in pulled data
+#   interval = "30s"
+#
+#   ## Timeout for the ipmitool command to complete
+#   timeout = "20s"
+#
+#   ## Schema Version: (Optional, defaults to version 1)
+#   metric_version = 2
+
+
+# # Gather packets and bytes counters from Linux ipsets
+# [[inputs.ipset]]
+#   ## By default, we only show sets which have already matched at least 1 packet.
+#   ## set include_unmatched_sets = true to gather them all.
+#   include_unmatched_sets = false
+#   ## Adjust your sudo settings appropriately if using this option ("sudo ipset save")
+#   use_sudo = false
+#   ## The default timeout of 1s for ipset execution can be overridden here:
+#   # timeout = "1s"
+
+
+# # Gather packets and bytes throughput from iptables
+# [[inputs.iptables]]
+#   ## iptables require root access on most systems.
+#   ## Setting 'use_sudo' to true will make use of sudo to run iptables.
+#   ## Users must configure sudo to allow telegraf user to run iptables with no password.
+#   ## iptables can be restricted to only list command "iptables -nvL".
+#   use_sudo = false
+#   ## Setting 'use_lock' to true runs iptables with the "-w" option.
+#   ## Adjust your sudo settings appropriately if using this option ("iptables -wnvl")
+#   use_lock = false
+#   ## Define an alternate executable, such as "ip6tables". Default is "iptables".
+#   # binary = "ip6tables"
+#   ## defines the table to monitor:
+#   table = "filter"
+#   ## defines the chains to monitor.
+#   ## NOTE: iptables rules without a comment will not be monitored.
+#   ## Read the plugin documentation for more information.
+#   chains = [ "INPUT" ]
+
+
+# # Collect virtual and real server stats from Linux IPVS
+# [[inputs.ipvs]]
+#   # no configuration
+
+
+# # Read jobs and cluster metrics from Jenkins instances
+# [[inputs.jenkins]]
+#   ## The Jenkins URL
+#   url = "http://my-jenkins-instance:8080"
+#   # username = "admin"
+#   # password = "admin"
+#
+#   ## Set response_timeout
+#   response_timeout = "5s"
+#
+#   ## Optional TLS Config
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#   ## Use SSL but skip chain & host verification
+#   # insecure_skip_verify = false
+#
+#   ## Optional Max Job Build Age filter
+#   ## Default 1 hour, ignore builds older than max_build_age
+#   # max_build_age = "1h"
+#
+#   ## Optional Sub Job Depth filter
+#   ## Jenkins can have unlimited layer of sub jobs
+#   ## This config will limit the layers of pulling, default value 0 means
+#   ## unlimited pulling until no more sub jobs
+#   # max_subjob_depth = 0
+#
+#   ## Optional Sub Job Per Layer
+#   ## In workflow-multibranch-plugin, each branch will be created as a sub job.
+#   ## This config will limit to call only the lasted branches in each layer,
+#   ## empty will use default value 10
+#   # max_subjob_per_layer = 10
+#
+#   ## Jobs to exclude from gathering
+#   # job_exclude = [ "job1", "job2/subjob1/subjob2", "job3/*"]
+#
+#   ## Nodes to exclude from gathering
+#   # node_exclude = [ "node1", "node2" ]
+#
+#   ## Worker pool for jenkins plugin only
+#   ## Empty this field will use default value 5
+#   # max_connections = 5
+
+
+# # Read JMX metrics through Jolokia
+# [[inputs.jolokia]]
+#   # DEPRECATED: the jolokia plugin has been deprecated in favor of the
+#   # jolokia2 plugin
+#   # see https://github.com/influxdata/telegraf/tree/master/plugins/inputs/jolokia2
+#
+#   ## This is the context root used to compose the jolokia url
+#   ## NOTE that Jolokia requires a trailing slash at the end of the context root
+#   ## NOTE that your jolokia security policy must allow for POST requests.
+#   context = "/jolokia/"
+#
+#   ## This specifies the mode used
+#   # mode = "proxy"
+#   #
+#   ## When in proxy mode this section is used to specify further
+#   ## proxy address configurations.
+#   ## Remember to change host address to fit your environment.
+#   # [inputs.jolokia.proxy]
+#   #   host = "127.0.0.1"
+#   #   port = "8080"
+#
+#   ## Optional http timeouts
+#   ##
+#   ## response_header_timeout, if non-zero, specifies the amount of time to wait
+#   ## for a server's response headers after fully writing the request.
+#   # response_header_timeout = "3s"
+#   ##
+#   ## client_timeout specifies a time limit for requests made by this client.
+#   ## Includes connection time, any redirects, and reading the response body.
+#   # client_timeout = "4s"
+#
+#   ## Attribute delimiter
+#   ##
+#   ## When multiple attributes are returned for a single
+#   ## [inputs.jolokia.metrics], the field name is a concatenation of the metric
+#   ## name, and the attribute name, separated by the given delimiter.
+#   # delimiter = "_"
+#
+#   ## List of servers exposing jolokia read service
+#   [[inputs.jolokia.servers]]
+#     name = "as-server-01"
+#     host = "127.0.0.1"
+#     port = "8080"
+#     # username = "myuser"
+#     # password = "mypassword"
+#
+#   ## List of metrics collected on above servers
+#   ## Each metric consists in a name, a jmx path and either
+#   ## a pass or drop slice attribute.
+#   ## This collect all heap memory usage metrics.
+#   [[inputs.jolokia.metrics]]
+#     name = "heap_memory_usage"
+#     mbean  = "java.lang:type=Memory"
+#     attribute = "HeapMemoryUsage"
+#
+#   ## This collect thread counts metrics.
+#   [[inputs.jolokia.metrics]]
+#     name = "thread_count"
+#     mbean  = "java.lang:type=Threading"
+#     attribute = "TotalStartedThreadCount,ThreadCount,DaemonThreadCount,PeakThreadCount"
+#
+#   ## This collect number of class loaded/unloaded counts metrics.
+#   [[inputs.jolokia.metrics]]
+#     name = "class_count"
+#     mbean  = "java.lang:type=ClassLoading"
+#     attribute = "LoadedClassCount,UnloadedClassCount,TotalLoadedClassCount"
+
+
+# # Read JMX metrics from a Jolokia REST agent endpoint
+# [[inputs.jolokia2_agent]]
+#   # default_tag_prefix      = ""
+#   # default_field_prefix    = ""
+#   # default_field_separator = "."
+#
+#   # Add agents URLs to query
+#   urls = ["http://localhost:8080/jolokia"]
+#   # username = ""
+#   # password = ""
+#   # response_timeout = "5s"
+#
+#   ## Optional TLS config
+#   # tls_ca   = "/var/private/ca.pem"
+#   # tls_cert = "/var/private/client.pem"
+#   # tls_key  = "/var/private/client-key.pem"
+#   # insecure_skip_verify = false
+#
+#   ## Add metrics to read
+#   [[inputs.jolokia2_agent.metric]]
+#     name  = "java_runtime"
+#     mbean = "java.lang:type=Runtime"
+#     paths = ["Uptime"]
+
+
+# # Read JMX metrics from a Jolokia REST proxy endpoint
+# [[inputs.jolokia2_proxy]]
+#   # default_tag_prefix      = ""
+#   # default_field_prefix    = ""
+#   # default_field_separator = "."
+#
+#   ## Proxy agent
+#   url = "http://localhost:8080/jolokia"
+#   # username = ""
+#   # password = ""
+#   # response_timeout = "5s"
+#
+#   ## Optional TLS config
+#   # tls_ca   = "/var/private/ca.pem"
+#   # tls_cert = "/var/private/client.pem"
+#   # tls_key  = "/var/private/client-key.pem"
+#   # insecure_skip_verify = false
+#
+#   ## Add proxy targets to query
+#   # default_target_username = ""
+#   # default_target_password = ""
+#   [[inputs.jolokia2_proxy.target]]
+#     url = "service:jmx:rmi:///jndi/rmi://targethost:9999/jmxrmi"
+#     # username = ""
+#     # password = ""
+#
+#   ## Add metrics to read
+#   [[inputs.jolokia2_proxy.metric]]
+#     name  = "java_runtime"
+#     mbean = "java.lang:type=Runtime"
+#     paths = ["Uptime"]
+
+
+# # Read Kapacitor-formatted JSON metrics from one or more HTTP endpoints
+# [[inputs.kapacitor]]
+#   ## Multiple URLs from which to read Kapacitor-formatted JSON
+#   ## Default is "http://localhost:9092/kapacitor/v1/debug/vars".
+#   urls = [
+#     "http://localhost:9092/kapacitor/v1/debug/vars"
+#   ]
+#
+#   ## Time limit for http requests
+#   timeout = "5s"
+#
+#   ## Optional TLS Config
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#   ## Use TLS but skip chain & host verification
+#   # insecure_skip_verify = false
+
+
+# # Get kernel statistics from /proc/vmstat
+# [[inputs.kernel_vmstat]]
+#   # no configuration
+
+
+# # Read status information from one or more Kibana servers
+# [[inputs.kibana]]
+#   ## specify a list of one or more Kibana servers
+#   servers = ["http://localhost:5601"]
+#
+#   ## Timeout for HTTP requests
+#   timeout = "5s"
+#
+#   ## HTTP Basic Auth credentials
+#   # username = "username"
+#   # password = "pa$$word"
+#
+#   ## Optional TLS Config
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#   ## Use TLS but skip chain & host verification
+#   # insecure_skip_verify = false
+
+
+# # Read metrics from the Kubernetes api
+# [[inputs.kube_inventory]]
+#   ## URL for the Kubernetes API
+#   url = "https://127.0.0.1"
+#
+#   ## Namespace to use. Set to "" to use all namespaces.
+#   # namespace = "default"
+#
+#   ## Use bearer token for authorization. ('bearer_token' takes priority)
+#   # bearer_token = "/path/to/bearer/token"
+#   ## OR
+#   # bearer_token_string = "abc_123"
+#
+#   ## Set response_timeout (default 5 seconds)
+#   # response_timeout = "5s"
+#
+#   ## Optional Resources to exclude from gathering
+#   ## Leave them with blank with try to gather everything available.
+#   ## Values can be - "daemonsets", deployments", "nodes", "persistentvolumes",
+#   ## "persistentvolumeclaims", "pods", "statefulsets"
+#   # resource_exclude = [ "deployments", "nodes", "statefulsets" ]
+#
+#   ## Optional Resources to include when gathering
+#   ## Overrides resource_exclude if both set.
+#   # resource_include = [ "deployments", "nodes", "statefulsets" ]
+#
+#   ## Optional TLS Config
+#   # tls_ca = "/path/to/cafile"
+#   # tls_cert = "/path/to/certfile"
+#   # tls_key = "/path/to/keyfile"
+#   ## Use TLS but skip chain & host verification
+#   # insecure_skip_verify = false
+
+
+# # Read metrics from the kubernetes kubelet api
+# [[inputs.kubernetes]]
+#   ## URL for the kubelet
+#   url = "http://127.0.0.1:10255"
+#
+#   ## Use bearer token for authorization. ('bearer_token' takes priority)
+#   # bearer_token = "/path/to/bearer/token"
+#   ## OR
+#   # bearer_token_string = "abc_123"
+#
+#   ## Set response_timeout (default 5 seconds)
+#   # response_timeout = "5s"
+#
+#   ## Optional TLS Config
+#   # tls_ca = /path/to/cafile
+#   # tls_cert = /path/to/certfile
+#   # tls_key = /path/to/keyfile
+#   ## Use TLS but skip chain & host verification
+#   # insecure_skip_verify = false
+
+
+# # Read metrics from a LeoFS Server via SNMP
+# [[inputs.leofs]]
+#   ## An array of URLs of the form:
+#   ##   host [ ":" port]
+#   servers = ["127.0.0.1:4020"]
+
+
+# # Provides Linux sysctl fs metrics
+# [[inputs.linux_sysctl_fs]]
+#   # no configuration
+
+
+# # Read metrics from local Lustre service on OST, MDS
+# [[inputs.lustre2]]
+#   ## An array of /proc globs to search for Lustre stats
+#   ## If not specified, the default will work on Lustre 2.5.x
+#   ##
+#   # ost_procfiles = [
+#   #   "/proc/fs/lustre/obdfilter/*/stats",
+#   #   "/proc/fs/lustre/osd-ldiskfs/*/stats",
+#   #   "/proc/fs/lustre/obdfilter/*/job_stats",
+#   # ]
+#   # mds_procfiles = [
+#   #   "/proc/fs/lustre/mdt/*/md_stats",
+#   #   "/proc/fs/lustre/mdt/*/job_stats",
+#   # ]
+
+
+# # Gathers metrics from the /3.0/reports MailChimp API
+# [[inputs.mailchimp]]
+#   ## MailChimp API key
+#   ## get from https://admin.mailchimp.com/account/api/
+#   api_key = "" # required
+#   ## Reports for campaigns sent more than days_old ago will not be collected.
+#   ## 0 means collect all.
+#   days_old = 0
+#   ## Campaign ID to get, if empty gets all campaigns, this option overrides days_old
+#   # campaign_id = ""
+
+
+# # Read metrics from one or many mcrouter servers
+# [[inputs.mcrouter]]
+#   ## An array of address to gather stats about. Specify an ip or hostname
+#   ## with port. ie tcp://localhost:11211, tcp://10.0.0.1:11211, etc.
+# 	servers = ["tcp://localhost:11211", "unix:///var/run/mcrouter.sock"]
+#
+# 	## Timeout for metric collections from all servers.  Minimum timeout is "1s".
+#   # timeout = "5s"
+
+
+# # Read metrics from one or many memcached servers
+# [[inputs.memcached]]
+#   ## An array of address to gather stats about. Specify an ip on hostname
+#   ## with optional port. ie localhost, 10.0.0.1:11211, etc.
+#   servers = ["localhost:11211"]
+#   # unix_sockets = ["/var/run/memcached.sock"]
+
+
+# # Telegraf plugin for gathering metrics from N Mesos masters
+# [[inputs.mesos]]
+#   ## Timeout, in ms.
+#   timeout = 100
+#   ## A list of Mesos masters.
+#   masters = ["http://localhost:5050"]
+#   ## Master metrics groups to be collected, by default, all enabled.
+#   master_collections = [
+#     "resources",
+#     "master",
+#     "system",
+#     "agents",
+#     "frameworks",
+#     "tasks",
+#     "messages",
+#     "evqueue",
+#     "registrar",
+#   ]
+#   ## A list of Mesos slaves, default is []
+#   # slaves = []
+#   ## Slave metrics groups to be collected, by default, all enabled.
+#   # slave_collections = [
+#   #   "resources",
+#   #   "agent",
+#   #   "system",
+#   #   "executors",
+#   #   "tasks",
+#   #   "messages",
+#   # ]
+#
+#   ## Optional TLS Config
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#   ## Use TLS but skip chain & host verification
+#   # insecure_skip_verify = false
+
+
+# # Collects scores from a minecraft server's scoreboard using the RCON protocol
+# [[inputs.minecraft]]
+#   ## server address for minecraft
+#   # server = "localhost"
+#   ## port for RCON
+#   # port = "25575"
+#   ## password RCON for mincraft server
+#   # password = ""
+
+
+# # Read metrics from one or many MongoDB servers
+# [[inputs.mongodb]]
+#   ## An array of URLs of the form:
+#   ##   "mongodb://" [user ":" pass "@"] host [ ":" port]
+#   ## For example:
+#   ##   mongodb://user:auth_key@10.10.3.30:27017,
+#   ##   mongodb://10.10.3.33:18832,
+#   servers = ["mongodb://127.0.0.1:27017"]
+#
+#   ## When true, collect per database stats
+#   # gather_perdb_stats = false
+#
+#   ## Optional TLS Config
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#   ## Use TLS but skip chain & host verification
+#   # insecure_skip_verify = false
+
+
+# # Aggregates the contents of multiple files into a single point
+# [[inputs.multifile]]
+#   ## Base directory where telegraf will look for files.
+#   ## Omit this option to use absolute paths.
+#   base_dir = "/sys/bus/i2c/devices/1-0076/iio:device0"
+#
+#   ## If true, Telegraf discard all data when a single file can't be read.
+#   ## Else, Telegraf omits the field generated from this file.
+#   # fail_early = true
+#
+#   ## Files to parse each interval.
+#   [[inputs.multifile.file]]
+#     file = "in_pressure_input"
+#     dest = "pressure"
+#     conversion = "float"
+#   [[inputs.multifile.file]]
+#     file = "in_temp_input"
+#     dest = "temperature"
+#     conversion = "float(3)"
+#   [[inputs.multifile.file]]
+#     file = "in_humidityrelative_input"
+#     dest = "humidityrelative"
+#     conversion = "float(3)"
+
+
+# # Read metrics from one or many mysql servers
+# [[inputs.mysql]]
+#   ## specify servers via a url matching:
+#   ##  [username[:password]@][protocol[(address)]]/[?tls=[true|false|skip-verify|custom]]
+#   ##  see https://github.com/go-sql-driver/mysql#dsn-data-source-name
+#   ##  e.g.
+#   ##    servers = ["user:passwd@tcp(127.0.0.1:3306)/?tls=false"]
+#   ##    servers = ["user@tcp(127.0.0.1:3306)/?tls=false"]
+#   #
+#   ## If no servers are specified, then localhost is used as the host.
+#   servers = ["tcp(127.0.0.1:3306)/"]
+#
+#   ## Selects the metric output format.
+#   ##
+#   ## This option exists to maintain backwards compatibility, if you have
+#   ## existing metrics do not set or change this value until you are ready to
+#   ## migrate to the new format.
+#   ##
+#   ## If you do not have existing metrics from this plugin set to the latest
+#   ## version.
+#   ##
+#   ## Telegraf >=1.6: metric_version = 2
+#   ##           <1.6: metric_version = 1 (or unset)
+#   metric_version = 2
+#
+#   ## the limits for metrics form perf_events_statements
+#   perf_events_statements_digest_text_limit  = 120
+#   perf_events_statements_limit              = 250
+#   perf_events_statements_time_limit         = 86400
+#   #
+#   ## if the list is empty, then metrics are gathered from all databasee tables
+#   table_schema_databases                    = []
+#   #
+#   ## gather metrics from INFORMATION_SCHEMA.TABLES for databases provided above list
+#   gather_table_schema                       = false
+#   #
+#   ## gather thread state counts from INFORMATION_SCHEMA.PROCESSLIST
+#   gather_process_list                       = true
+#   #
+#   ## gather user statistics from INFORMATION_SCHEMA.USER_STATISTICS
+#   gather_user_statistics                    = true
+#   #
+#   ## gather auto_increment columns and max values from information schema
+#   gather_info_schema_auto_inc               = true
+#   #
+#   ## gather metrics from INFORMATION_SCHEMA.INNODB_METRICS
+#   gather_innodb_metrics                     = true
+#   #
+#   ## gather metrics from SHOW SLAVE STATUS command output
+#   gather_slave_status                       = true
+#   #
+#   ## gather metrics from SHOW BINARY LOGS command output
+#   gather_binary_logs                        = false
+#   #
+#   ## gather metrics from PERFORMANCE_SCHEMA.TABLE_IO_WAITS_SUMMARY_BY_TABLE
+#   gather_table_io_waits                     = false
+#   #
+#   ## gather metrics from PERFORMANCE_SCHEMA.TABLE_LOCK_WAITS
+#   gather_table_lock_waits                   = false
+#   #
+#   ## gather metrics from PERFORMANCE_SCHEMA.TABLE_IO_WAITS_SUMMARY_BY_INDEX_USAGE
+#   gather_index_io_waits                     = false
+#   #
+#   ## gather metrics from PERFORMANCE_SCHEMA.EVENT_WAITS
+#   gather_event_waits                        = false
+#   #
+#   ## gather metrics from PERFORMANCE_SCHEMA.FILE_SUMMARY_BY_EVENT_NAME
+#   gather_file_events_stats                  = false
+#   #
+#   ## gather metrics from PERFORMANCE_SCHEMA.EVENTS_STATEMENTS_SUMMARY_BY_DIGEST
+#   gather_perf_events_statements             = false
+#   #
+#   ## Some queries we may want to run less often (such as SHOW GLOBAL VARIABLES)
+#   interval_slow                   = "30m"
+#
+#   ## Optional TLS Config (will be used if tls=custom parameter specified in server uri)
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#   ## Use TLS but skip chain & host verification
+#   # insecure_skip_verify = false
+
+
+# # Provides metrics about the state of a NATS server
+# [[inputs.nats]]
+#   ## The address of the monitoring endpoint of the NATS server
+#   server = "http://localhost:8222"
+#
+#   ## Maximum time to receive response
+#   # response_timeout = "5s"
+
+
+# # Neptune Apex data collector
+# [[inputs.neptune_apex]]
+#   ## The Neptune Apex plugin reads the publicly available status.xml data from a local Apex.
+#   ## Measurements will be logged under "apex".
+#
+#   ## The base URL of the local Apex(es). If you specify more than one server, they will
+#   ## be differentiated by the "source" tag.
+#   servers = [
+#     "http://apex.local",
+#   ]
+#
+#   ## The response_timeout specifies how long to wait for a reply from the Apex.
+#   #response_timeout = "5s"
+
+
+# # Read metrics about network interface usage
+# [[inputs.net]]
+#   ## By default, telegraf gathers stats from any up interface (excluding loopback)
+#   ## Setting interfaces will tell it to gather these explicit interfaces,
+#   ## regardless of status.
+#   ##
+#   # interfaces = ["eth0"]
+#   ##
+#   ## On linux systems telegraf also collects protocol stats.
+#   ## Setting ignore_protocol_stats to true will skip reporting of protocol metrics.
+#   ##
+#   # ignore_protocol_stats = false
+#   ##
+
+
+# # Collect response time of a TCP or UDP connection
+# [[inputs.net_response]]
+#   ## Protocol, must be "tcp" or "udp"
+#   ## NOTE: because the "udp" protocol does not respond to requests, it requires
+#   ## a send/expect string pair (see below).
+#   protocol = "tcp"
+#   ## Server address (default localhost)
+#   address = "localhost:80"
+#
+#   ## Set timeout
+#   # timeout = "1s"
+#
+#   ## Set read timeout (only used if expecting a response)
+#   # read_timeout = "1s"
+#
+#   ## The following options are required for UDP checks. For TCP, they are
+#   ## optional. The plugin will send the given string to the server and then
+#   ## expect to receive the given 'expect' string back.
+#   ## string sent to the server
+#   # send = "ssh"
+#   ## expected string in answer
+#   # expect = "ssh"
+#
+#   ## Uncomment to remove deprecated fields
+#   # fieldexclude = ["result_type", "string_found"]
+
+
+# # Read TCP metrics such as established, time wait and sockets counts.
+# [[inputs.netstat]]
+#   # no configuration
+
+
+# # Read Nginx's basic status information (ngx_http_stub_status_module)
+# [[inputs.nginx]]
+#   # An array of Nginx stub_status URI to gather stats.
+#   urls = ["http://localhost/server_status"]
+#
+#   ## Optional TLS Config
+#   tls_ca = "/etc/telegraf/ca.pem"
+#   tls_cert = "/etc/telegraf/cert.cer"
+#   tls_key = "/etc/telegraf/key.key"
+#   ## Use TLS but skip chain & host verification
+#   insecure_skip_verify = false
+#
+#   # HTTP response timeout (default: 5s)
+#   response_timeout = "5s"
+
+
+# # Read Nginx Plus' full status information (ngx_http_status_module)
+# [[inputs.nginx_plus]]
+#   ## An array of ngx_http_status_module or status URI to gather stats.
+#   urls = ["http://localhost/status"]
+#
+#   # HTTP response timeout (default: 5s)
+#   response_timeout = "5s"
+
+
+# # Read Nginx Plus Api documentation
+# [[inputs.nginx_plus_api]]
+#   ## An array of API URI to gather stats.
+#   urls = ["http://localhost/api"]
+#
+#   # Nginx API version, default: 3
+#   # api_version = 3
+#
+#   # HTTP response timeout (default: 5s)
+#   response_timeout = "5s"
+
+
+# # Read nginx_upstream_check module status information (https://github.com/yaoweibin/nginx_upstream_check_module)
+# [[inputs.nginx_upstream_check]]
+#   ## An URL where Nginx Upstream check module is enabled
+#   ## It should be set to return a JSON formatted response
+#   url = "http://127.0.0.1/status?format=json"
+#
+#   ## HTTP method
+#   # method = "GET"
+#
+#   ## Optional HTTP headers
+#   # headers = {"X-Special-Header" = "Special-Value"}
+#
+#   ## Override HTTP "Host" header
+#   # host_header = "check.example.com"
+#
+#   ## Timeout for HTTP requests
+#   timeout = "5s"
+#
+#   ## Optional HTTP Basic Auth credentials
+#   # username = "username"
+#   # password = "pa$$word"
+#
+#   ## Optional TLS Config
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#   ## Use TLS but skip chain & host verification
+#   # insecure_skip_verify = false
+
+
+# # Read Nginx virtual host traffic status module information (nginx-module-vts)
+# [[inputs.nginx_vts]]
+#   ## An array of ngx_http_status_module or status URI to gather stats.
+#   urls = ["http://localhost/status"]
+#
+#   ## HTTP response timeout (default: 5s)
+#   response_timeout = "5s"
+
+
+# # Read NSQ topic and channel statistics.
+# [[inputs.nsq]]
+#   ## An array of NSQD HTTP API endpoints
+#   endpoints  = ["http://localhost:4151"]
+#
+#   ## Optional TLS Config
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#   ## Use TLS but skip chain & host verification
+#   # insecure_skip_verify = false
+
+
+# # Collect kernel snmp counters and network interface statistics
+# [[inputs.nstat]]
+#   ## file paths for proc files. If empty default paths will be used:
+#   ##    /proc/net/netstat, /proc/net/snmp, /proc/net/snmp6
+#   ## These can also be overridden with env variables, see README.
+#   proc_net_netstat = "/proc/net/netstat"
+#   proc_net_snmp = "/proc/net/snmp"
+#   proc_net_snmp6 = "/proc/net/snmp6"
+#   ## dump metrics with 0 values too
+#   dump_zeros       = true
+
+
+# # Get standard NTP query metrics, requires ntpq executable.
+# [[inputs.ntpq]]
+#   ## If false, set the -n ntpq flag. Can reduce metric gather time.
+#   dns_lookup = true
+
+
+# # Pulls statistics from nvidia GPUs attached to the host
+# [[inputs.nvidia_smi]]
+#   ## Optional: path to nvidia-smi binary, defaults to $PATH via exec.LookPath
+#   # bin_path = "/usr/bin/nvidia-smi"
+#
+#   ## Optional: timeout for GPU polling
+#   # timeout = "5s"
+
+
+# # OpenLDAP cn=Monitor plugin
+# [[inputs.openldap]]
+#   host = "localhost"
+#   port = 389
+#
+#   # ldaps, starttls, or no encryption. default is an empty string, disabling all encryption.
+#   # note that port will likely need to be changed to 636 for ldaps
+#   # valid options: "" | "starttls" | "ldaps"
+#   tls = ""
+#
+#   # skip peer certificate verification. Default is false.
+#   insecure_skip_verify = false
+#
+#   # Path to PEM-encoded Root certificate to use to verify server certificate
+#   tls_ca = "/etc/ssl/certs.pem"
+#
+#   # dn/password to bind with. If bind_dn is empty, an anonymous bind is performed.
+#   bind_dn = ""
+#   bind_password = ""
+#
+#   # Reverse metric names so they sort more naturally. Recommended.
+#   # This defaults to false if unset, but is set to true when generating a new config
+#   reverse_metric_names = true
+
+
+# # A plugin to collect stats from Opensmtpd - a validating, recursive, and caching DNS resolver 
+# [[inputs.opensmtpd]]
+#   ## If running as a restricted user you can prepend sudo for additional access:
+#   #use_sudo = false
+#
+#   ## The default location of the smtpctl binary can be overridden with:
+#   binary = "/usr/sbin/smtpctl"
+#
+#   ## The default timeout of 1000ms can be overriden with (in milliseconds):
+#   timeout = 1000
+
+
+# # Read metrics of passenger using passenger-status
+# [[inputs.passenger]]
+#   ## Path of passenger-status.
+#   ##
+#   ## Plugin gather metric via parsing XML output of passenger-status
+#   ## More information about the tool:
+#   ##   https://www.phusionpassenger.com/library/admin/apache/overall_status_report.html
+#   ##
+#   ## If no path is specified, then the plugin simply execute passenger-status
+#   ## hopefully it can be found in your PATH
+#   command = "passenger-status -v --show=xml"
+
+
+# # Gather counters from PF
+# [[inputs.pf]]
+#   ## PF require root access on most systems.
+#   ## Setting 'use_sudo' to true will make use of sudo to run pfctl.
+#   ## Users must configure sudo to allow telegraf user to run pfctl with no password.
+#   ## pfctl can be restricted to only list command "pfctl -s info".
+#   use_sudo = false
+
+
+# # Read metrics of phpfpm, via HTTP status page or socket
+# [[inputs.phpfpm]]
+#   ## An array of addresses to gather stats about. Specify an ip or hostname
+#   ## with optional port and path
+#   ##
+#   ## Plugin can be configured in three modes (either can be used):
+#   ##   - http: the URL must start with http:// or https://, ie:
+#   ##       "http://localhost/status"
+#   ##       "http://192.168.130.1/status?full"
+#   ##
+#   ##   - unixsocket: path to fpm socket, ie:
+#   ##       "/var/run/php5-fpm.sock"
+#   ##      or using a custom fpm status path:
+#   ##       "/var/run/php5-fpm.sock:fpm-custom-status-path"
+#   ##
+#   ##   - fcgi: the URL must start with fcgi:// or cgi://, and port must be present, ie:
+#   ##       "fcgi://10.0.0.12:9000/status"
+#   ##       "cgi://10.0.10.12:9001/status"
+#   ##
+#   ## Example of multiple gathering from local socket and remove host
+#   ## urls = ["http://192.168.1.20/status", "/tmp/fpm.sock"]
+#   urls = ["http://localhost/status"]
+
+
+# # Ping given url(s) and return statistics
+# [[inputs.ping]]
+#   ## List of urls to ping
+#   urls = ["example.org"]
+#
+#   ## Number of pings to send per collection (ping -c <COUNT>)
+#   # count = 1
+#
+#   ## Interval, in s, at which to ping. 0 == default (ping -i <PING_INTERVAL>)
+#   ## Not available in Windows.
+#   # ping_interval = 1.0
+#
+#   ## Per-ping timeout, in s. 0 == no timeout (ping -W <TIMEOUT>)
+#   # timeout = 1.0
+#
+#   ## Total-ping deadline, in s. 0 == no deadline (ping -w <DEADLINE>)
+#   # deadline = 10
+#
+#   ## Interface or source address to send ping from (ping -I <INTERFACE/SRC_ADDR>)
+#   ## on Darwin and Freebsd only source address possible: (ping -S <SRC_ADDR>)
+#   # interface = ""
+#
+#   ## Specify the ping executable binary, default is "ping"
+#   # binary = "ping"
+#
+#   ## Arguments for ping command
+#   ## when arguments is not empty, other options (ping_interval, timeout, etc) will be ignored
+#   # arguments = ["-c", "3"]
+
+
+# # Measure postfix queue statistics
+# [[inputs.postfix]]
+#   ## Postfix queue directory. If not provided, telegraf will try to use
+#   ## 'postconf -h queue_directory' to determine it.
+#   # queue_directory = "/var/spool/postfix"
+
+
+# # Read metrics from one or many PowerDNS servers
+# [[inputs.powerdns]]
+#   ## An array of sockets to gather stats about.
+#   ## Specify a path to unix socket.
+#   unix_sockets = ["/var/run/pdns.controlsocket"]
+
+
+# # Monitor process cpu and memory usage
+# [[inputs.procstat]]
+#   ## PID file to monitor process
+#   pid_file = "/var/run/nginx.pid"
+#   ## executable name (ie, pgrep <exe>)
+#   # exe = "nginx"
+#   ## pattern as argument for pgrep (ie, pgrep -f <pattern>)
+#   # pattern = "nginx"
+#   ## user as argument for pgrep (ie, pgrep -u <user>)
+#   # user = "nginx"
+#   ## Systemd unit name
+#   # systemd_unit = "nginx.service"
+#   ## CGroup name or path
+#   # cgroup = "systemd/system.slice/nginx.service"
+#
+#   ## Windows service name
+#   # win_service = ""
+#
+#   ## override for process_name
+#   ## This is optional; default is sourced from /proc/<pid>/status
+#   # process_name = "bar"
+#
+#   ## Field name prefix
+#   # prefix = ""
+#
+#   ## Add PID as a tag instead of a field; useful to differentiate between
+#   ## processes whose tags are otherwise the same.  Can create a large number
+#   ## of series, use judiciously.
+#   # pid_tag = false
+#
+#   ## Method to use when finding process IDs.  Can be one of 'pgrep', or
+#   ## 'native'.  The pgrep finder calls the pgrep executable in the PATH while
+#   ## the native finder performs the search directly in a manor dependent on the
+#   ## platform.  Default is 'pgrep'
+#   # pid_finder = "pgrep"
+
+
+# # Reads last_run_summary.yaml file and converts to measurments
+# [[inputs.puppetagent]]
+#   ## Location of puppet last run summary file
+#   location = "/var/lib/puppet/state/last_run_summary.yaml"
+
+
+# # Reads metrics from RabbitMQ servers via the Management Plugin
+# [[inputs.rabbitmq]]
+#   ## Management Plugin url. (default: http://localhost:15672)
+#   # url = "http://localhost:15672"
+#   ## Tag added to rabbitmq_overview series; deprecated: use tags
+#   # name = "rmq-server-1"
+#   ## Credentials
+#   # username = "guest"
+#   # password = "guest"
+#
+#   ## Optional TLS Config
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#   ## Use TLS but skip chain & host verification
+#   # insecure_skip_verify = false
+#
+#   ## Optional request timeouts
+#   ##
+#   ## ResponseHeaderTimeout, if non-zero, specifies the amount of time to wait
+#   ## for a server's response headers after fully writing the request.
+#   # header_timeout = "3s"
+#   ##
+#   ## client_timeout specifies a time limit for requests made by this client.
+#   ## Includes connection time, any redirects, and reading the response body.
+#   # client_timeout = "4s"
+#
+#   ## A list of nodes to gather as the rabbitmq_node measurement. If not
+#   ## specified, metrics for all nodes are gathered.
+#   # nodes = ["rabbit@node1", "rabbit@node2"]
+#
+#   ## A list of queues to gather as the rabbitmq_queue measurement. If not
+#   ## specified, metrics for all queues are gathered.
+#   # queues = ["telegraf"]
+#
+#   ## A list of exchanges to gather as the rabbitmq_exchange measurement. If not
+#   ## specified, metrics for all exchanges are gathered.
+#   # exchanges = ["telegraf"]
+#
+#   ## Queues to include and exclude. Globs accepted.
+#   ## Note that an empty array for both will include all queues
+#   queue_name_include = []
+#   queue_name_exclude = []
+
+
+# # Read raindrops stats (raindrops - real-time stats for preforking Rack servers)
+# [[inputs.raindrops]]
+#   ## An array of raindrops middleware URI to gather stats.
+#   urls = ["http://localhost:8080/_raindrops"]
+
+
+# # Read metrics from one or many redis servers
+# [[inputs.redis]]
+#   ## specify servers via a url matching:
+#   ##  [protocol://][:password]@address[:port]
+#   ##  e.g.
+#   ##    tcp://localhost:6379
+#   ##    tcp://:password@192.168.99.100
+#   ##    unix:///var/run/redis.sock
+#   ##
+#   ## If no servers are specified, then localhost is used as the host.
+#   ## If no port is specified, 6379 is used
+#   servers = ["tcp://localhost:6379"]
+#
+#   ## specify server password
+#   # password = "s#cr@t%"
+#
+#   ## Optional TLS Config
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#   ## Use TLS but skip chain & host verification
+#   # insecure_skip_verify = true
+
+
+# # Read metrics from one or many RethinkDB servers
+# [[inputs.rethinkdb]]
+#   ## An array of URI to gather stats about. Specify an ip or hostname
+#   ## with optional port add password. ie,
+#   ##   rethinkdb://user:auth_key@10.10.3.30:28105,
+#   ##   rethinkdb://10.10.3.33:18832,
+#   ##   10.0.0.1:10000, etc.
+#   servers = ["127.0.0.1:28015"]
+#   ##
+#   ## If you use actual rethinkdb of > 2.3.0 with username/password authorization,
+#   ## protocol have to be named "rethinkdb2" - it will use 1_0 H.
+#   # servers = ["rethinkdb2://username:password@127.0.0.1:28015"]
+#   ##
+#   ## If you use older versions of rethinkdb (<2.2) with auth_key, protocol
+#   ## have to be named "rethinkdb".
+#   # servers = ["rethinkdb://username:auth_key@127.0.0.1:28015"]
+
+
+# # Read metrics one or many Riak servers
+# [[inputs.riak]]
+#   # Specify a list of one or more riak http servers
+#   servers = ["http://localhost:8098"]
+
+
+# # Read API usage and limits for a Salesforce organisation
+# [[inputs.salesforce]]
+#   ## specify your credentials
+#   ##
+#   username = "your_username"
+#   password = "your_password"
+#   ##
+#   ## (optional) security token
+#   # security_token = "your_security_token"
+#   ##
+#   ## (optional) environment type (sandbox or production)
+#   ## default is: production
+#   ##
+#   # environment = "production"
+#   ##
+#   ## (optional) API version (default: "39.0")
+#   ##
+#   # version = "39.0"
+
+
+# # Monitor sensors, requires lm-sensors package
+# [[inputs.sensors]]
+#   ## Remove numbers from field names.
+#   ## If true, a field name like 'temp1_input' will be changed to 'temp_input'.
+#   # remove_numbers = true
+#
+#   ## Timeout is the maximum amount of time that the sensors command can run.
+#   # timeout = "5s"
+
+
+# # Read metrics from storage devices supporting S.M.A.R.T.
+# [[inputs.smart]]
+#   ## Optionally specify the path to the smartctl executable
+#   # path = "/usr/bin/smartctl"
+#   #
+#   ## On most platforms smartctl requires root access.
+#   ## Setting 'use_sudo' to true will make use of sudo to run smartctl.
+#   ## Sudo must be configured to to allow the telegraf user to run smartctl
+#   ## with out password.
+#   # use_sudo = false
+#   #
+#   ## Skip checking disks in this power mode. Defaults to
+#   ## "standby" to not wake up disks that have stoped rotating.
+#   ## See --nocheck in the man pages for smartctl.
+#   ## smartctl version 5.41 and 5.42 have faulty detection of
+#   ## power mode and might require changing this value to
+#   ## "never" depending on your disks.
+#   # nocheck = "standby"
+#   #
+#   ## Gather detailed metrics for each SMART Attribute.
+#   ## Defaults to "false"
+#   ##
+#   # attributes = false
+#   #
+#   ## Optionally specify devices to exclude from reporting.
+#   # excludes = [ "/dev/pass6" ]
+#   #
+#   ## Optionally specify devices and device type, if unset
+#   ## a scan (smartctl --scan) for S.M.A.R.T. devices will
+#   ## done and all found will be included except for the
+#   ## excluded in excludes.
+#   # devices = [ "/dev/ada0 -d atacam" ]
+
+
+# # Retrieves SNMP values from remote agents
+# [[inputs.snmp]]
+#   agents = [ "127.0.0.1:161" ]
+#   ## Timeout for each SNMP query.
+#   timeout = "5s"
+#   ## Number of retries to attempt within timeout.
+#   retries = 3
+#   ## SNMP version, values can be 1, 2, or 3
+#   version = 2
+#
+#   ## SNMP community string.
+#   community = "public"
+#
+#   ## The GETBULK max-repetitions parameter
+#   max_repetitions = 10
+#
+#   ## SNMPv3 auth parameters
+#   #sec_name = "myuser"
+#   #auth_protocol = "md5"      # Values: "MD5", "SHA", ""
+#   #auth_password = "pass"
+#   #sec_level = "authNoPriv"   # Values: "noAuthNoPriv", "authNoPriv", "authPriv"
+#   #context_name = ""
+#   #priv_protocol = ""         # Values: "DES", "AES", ""
+#   #priv_password = ""
+#
+#   ## measurement name
+#   name = "system"
+#   [[inputs.snmp.field]]
+#     name = "hostname"
+#     oid = ".1.0.0.1.1"
+#   [[inputs.snmp.field]]
+#     name = "uptime"
+#     oid = ".1.0.0.1.2"
+#   [[inputs.snmp.field]]
+#     name = "load"
+#     oid = ".1.0.0.1.3"
+#   [[inputs.snmp.field]]
+#     oid = "HOST-RESOURCES-MIB::hrMemorySize"
+#
+#   [[inputs.snmp.table]]
+#     ## measurement name
+#     name = "remote_servers"
+#     inherit_tags = [ "hostname" ]
+#     [[inputs.snmp.table.field]]
+#       name = "server"
+#       oid = ".1.0.0.0.1.0"
+#       is_tag = true
+#     [[inputs.snmp.table.field]]
+#       name = "connections"
+#       oid = ".1.0.0.0.1.1"
+#     [[inputs.snmp.table.field]]
+#       name = "latency"
+#       oid = ".1.0.0.0.1.2"
+#
+#   [[inputs.snmp.table]]
+#     ## auto populate table's fields using the MIB
+#     oid = "HOST-RESOURCES-MIB::hrNetworkTable"
+
+
+# # DEPRECATED! PLEASE USE inputs.snmp INSTEAD.
+# [[inputs.snmp_legacy]]
+#   ## Use 'oids.txt' file to translate oids to names
+#   ## To generate 'oids.txt' you need to run:
+#   ##   snmptranslate -m all -Tz -On | sed -e 's/"//g' > /tmp/oids.txt
+#   ## Or if you have an other MIB folder with custom MIBs
+#   ##   snmptranslate -M /mycustommibfolder -Tz -On -m all | sed -e 's/"//g' > oids.txt
+#   snmptranslate_file = "/tmp/oids.txt"
+#   [[inputs.snmp.host]]
+#     address = "192.168.2.2:161"
+#     # SNMP community
+#     community = "public" # default public
+#     # SNMP version (1, 2 or 3)
+#     # Version 3 not supported yet
+#     version = 2 # default 2
+#     # SNMP response timeout
+#     timeout = 2.0 # default 2.0
+#     # SNMP request retries
+#     retries = 2 # default 2
+#     # Which get/bulk do you want to collect for this host
+#     collect = ["mybulk", "sysservices", "sysdescr"]
+#     # Simple list of OIDs to get, in addition to "collect"
+#     get_oids = []
+#
+#   [[inputs.snmp.host]]
+#     address = "192.168.2.3:161"
+#     community = "public"
+#     version = 2
+#     timeout = 2.0
+#     retries = 2
+#     collect = ["mybulk"]
+#     get_oids = [
+#         "ifNumber",
+#         ".1.3.6.1.2.1.1.3.0",
+#     ]
+#
+#   [[inputs.snmp.get]]
+#     name = "ifnumber"
+#     oid = "ifNumber"
+#
+#   [[inputs.snmp.get]]
+#     name = "interface_speed"
+#     oid = "ifSpeed"
+#     instance = "0"
+#
+#   [[inputs.snmp.get]]
+#     name = "sysuptime"
+#     oid = ".1.3.6.1.2.1.1.3.0"
+#     unit = "second"
+#
+#   [[inputs.snmp.bulk]]
+#     name = "mybulk"
+#     max_repetition = 127
+#     oid = ".1.3.6.1.2.1.1"
+#
+#   [[inputs.snmp.bulk]]
+#     name = "ifoutoctets"
+#     max_repetition = 127
+#     oid = "ifOutOctets"
+#
+#   [[inputs.snmp.host]]
+#     address = "192.168.2.13:161"
+#     #address = "127.0.0.1:161"
+#     community = "public"
+#     version = 2
+#     timeout = 2.0
+#     retries = 2
+#     #collect = ["mybulk", "sysservices", "sysdescr", "systype"]
+#     collect = ["sysuptime" ]
+#     [[inputs.snmp.host.table]]
+#       name = "iftable3"
+#       include_instances = ["enp5s0", "eth1"]
+#
+#   # SNMP TABLEs
+#   # table without mapping neither subtables
+#   [[inputs.snmp.table]]
+#     name = "iftable1"
+#     oid = ".1.3.6.1.2.1.31.1.1.1"
+#
+#   # table without mapping but with subtables
+#   [[inputs.snmp.table]]
+#     name = "iftable2"
+#     oid = ".1.3.6.1.2.1.31.1.1.1"
+#     sub_tables = [".1.3.6.1.2.1.2.2.1.13"]
+#
+#   # table with mapping but without subtables
+#   [[inputs.snmp.table]]
+#     name = "iftable3"
+#     oid = ".1.3.6.1.2.1.31.1.1.1"
+#     # if empty. get all instances
+#     mapping_table = ".1.3.6.1.2.1.31.1.1.1.1"
+#     # if empty, get all subtables
+#
+#   # table with both mapping and subtables
+#   [[inputs.snmp.table]]
+#     name = "iftable4"
+#     oid = ".1.3.6.1.2.1.31.1.1.1"
+#     # if empty get all instances
+#     mapping_table = ".1.3.6.1.2.1.31.1.1.1.1"
+#     # if empty get all subtables
+#     # sub_tables could be not "real subtables"
+#     sub_tables=[".1.3.6.1.2.1.2.2.1.13", "bytes_recv", "bytes_send"]
+
+
+# # Read stats from one or more Solr servers or cores
+# [[inputs.solr]]
+#   ## specify a list of one or more Solr servers
+#   servers = ["http://localhost:8983"]
+#
+#   ## specify a list of one or more Solr cores (default - all)
+#   # cores = ["main"]
+
+
+# # Read metrics from Microsoft SQL Server
+# [[inputs.sqlserver]]
+#   ## Specify instances to monitor with a list of connection strings.
+#   ## All connection parameters are optional.
+#   ## By default, the host is localhost, listening on default port, TCP 1433.
+#   ##   for Windows, the user is the currently running AD user (SSO).
+#   ##   See https://github.com/denisenkom/go-mssqldb for detailed connection
+#   ##   parameters.
+#   # servers = [
+#   #  "Server=192.168.1.10;Port=1433;User Id=<user>;Password=<pw>;app name=telegraf;log=1;",
+#   # ]
+#
+#   ## Optional parameter, setting this to 2 will use a new version
+#   ## of the collection queries that break compatibility with the original
+#   ## dashboards.
+#   query_version = 2
+#
+#   ## If you are using AzureDB, setting this to true will gather resource utilization metrics
+#   # azuredb = false
+#
+#   ## If you would like to exclude some of the metrics queries, list them here
+#   ## Possible choices:
+#   ## - PerformanceCounters
+#   ## - WaitStatsCategorized
+#   ## - DatabaseIO
+#   ## - DatabaseProperties
+#   ## - CPUHistory
+#   ## - DatabaseSize
+#   ## - DatabaseStats
+#   ## - MemoryClerk
+#   ## - VolumeSpace
+#   ## - PerformanceMetrics
+#   # exclude_query = [ 'DatabaseIO' ]
+
+
+# # Gather timeseries from Google Cloud Platform v3 monitoring API
+# [[inputs.stackdriver]]
+#   ## GCP Project
+#   project = "erudite-bloom-151019"
+#
+#   ## Include timeseries that start with the given metric type.
+#   metric_type_prefix_include = [
+#     "compute.googleapis.com/",
+#   ]
+#
+#   ## Exclude timeseries that start with the given metric type.
+#   # metric_type_prefix_exclude = []
+#
+#   ## Many metrics are updated once per minute; it is recommended to override
+#   ## the agent level interval with a value of 1m or greater.
+#   interval = "1m"
+#
+#   ## Maximum number of API calls to make per second.  The quota for accounts
+#   ## varies, it can be viewed on the API dashboard:
+#   ##   https://cloud.google.com/monitoring/quotas#quotas_and_limits
+#   # rate_limit = 14
+#
+#   ## The delay and window options control the number of points selected on
+#   ## each gather.  When set, metrics are gathered between:
+#   ##   start: now() - delay - window
+#   ##   end:   now() - delay
+#   #
+#   ## Collection delay; if set too low metrics may not yet be available.
+#   # delay = "5m"
+#   #
+#   ## If unset, the window will start at 1m and be updated dynamically to span
+#   ## the time between calls (approximately the length of the plugin interval).
+#   # window = "1m"
+#
+#   ## TTL for cached list of metric types.  This is the maximum amount of time
+#   ## it may take to discover new metrics.
+#   # cache_ttl = "1h"
+#
+#   ## If true, raw bucket counts are collected for distribution value types.
+#   ## For a more lightweight collection, you may wish to disable and use
+#   ## distribution_aggregation_aligners instead.
+#   # gather_raw_distribution_buckets = true
+#
+#   ## Aggregate functions to be used for metrics whose value type is
+#   ## distribution.  These aggregate values are recorded in in addition to raw
+#   ## bucket counts; if they are enabled.
+#   ##
+#   ## For a list of aligner strings see:
+#   ##   https://cloud.google.com/monitoring/api/ref_v3/rpc/google.monitoring.v3#aligner
+#   # distribution_aggregation_aligners = [
+#   # 	"ALIGN_PERCENTILE_99",
+#   # 	"ALIGN_PERCENTILE_95",
+#   # 	"ALIGN_PERCENTILE_50",
+#   # ]
+#
+#   ## Filters can be added to reduce the number of time series matched.  All
+#   ## functions are supported: starts_with, ends_with, has_substring, and
+#   ## one_of.  Only the '=' operator is supported.
+#   ##
+#   ## The logical operators when combining filters are defined statically using
+#   ## the following values:
+#   ##   filter ::= <resource_labels> {AND <metric_labels>}
+#   ##   resource_labels ::= <resource_labels> {OR <resource_label>}
+#   ##   metric_labels ::= <metric_labels> {OR <metric_label>}
+#   ##
+#   ## For more details, see https://cloud.google.com/monitoring/api/v3/filters
+#   #
+#   ## Resource labels refine the time series selection with the following expression:
+#   ##   resource.labels.<key> = <value>
+#   # [[inputs.stackdriver.filter.resource_labels]]
+#   #   key = "instance_name"
+#   #   value = 'starts_with("localhost")'
+#   #
+#   ## Metric labels refine the time series selection with the following expression:
+#   ##   metric.labels.<key> = <value>
+#   #  [[inputs.stackdriver.filter.metric_labels]]
+#   #  	 key = "device_name"
+#   #  	 value = 'one_of("sda", "sdb")'
+
+
+# # Sysstat metrics collector
+# [[inputs.sysstat]]
+#   ## Path to the sadc command.
+#   #
+#   ## Common Defaults:
+#   ##   Debian/Ubuntu: /usr/lib/sysstat/sadc
+#   ##   Arch:          /usr/lib/sa/sadc
+#   ##   RHEL/CentOS:   /usr/lib64/sa/sadc
+#   sadc_path = "/usr/lib/sa/sadc" # required
+#   #
+#   #
+#   ## Path to the sadf command, if it is not in PATH
+#   # sadf_path = "/usr/bin/sadf"
+#   #
+#   #
+#   ## Activities is a list of activities, that are passed as argument to the
+#   ## sadc collector utility (e.g: DISK, SNMP etc...)
+#   ## The more activities that are added, the more data is collected.
+#   # activities = ["DISK"]
+#   #
+#   #
+#   ## Group metrics to measurements.
+#   ##
+#   ## If group is false each metric will be prefixed with a description
+#   ## and represents itself a measurement.
+#   ##
+#   ## If Group is true, corresponding metrics are grouped to a single measurement.
+#   # group = true
+#   #
+#   #
+#   ## Options for the sadf command. The values on the left represent the sadf
+#   ## options and the values on the right their description (which are used for
+#   ## grouping and prefixing metrics).
+#   ##
+#   ## Run 'sar -h' or 'man sar' to find out the supported options for your
+#   ## sysstat version.
+#   [inputs.sysstat.options]
+#     -C = "cpu"
+#     -B = "paging"
+#     -b = "io"
+#     -d = "disk"             # requires DISK activity
+#     "-n ALL" = "network"
+#     "-P ALL" = "per_cpu"
+#     -q = "queue"
+#     -R = "mem"
+#     -r = "mem_util"
+#     -S = "swap_util"
+#     -u = "cpu_util"
+#     -v = "inode"
+#     -W = "swap"
+#     -w = "task"
+#   #  -H = "hugepages"        # only available for newer linux distributions
+#   #  "-I ALL" = "interrupts" # requires INT activity
+#   #
+#   #
+#   ## Device tags can be used to add additional tags for devices.
+#   ## For example the configuration below adds a tag vg with value rootvg for
+#   ## all metrics with sda devices.
+#   # [[inputs.sysstat.device_tags.sda]]
+#   #  vg = "rootvg"
+
+
+# # Reads metrics from a Teamspeak 3 Server via ServerQuery
+# [[inputs.teamspeak]]
+#   ## Server address for Teamspeak 3 ServerQuery
+#   # server = "127.0.0.1:10011"
+#   ## Username for ServerQuery
+#   username = "serverqueryuser"
+#   ## Password for ServerQuery
+#   password = "secret"
+#   ## Array of virtual servers
+#   # virtual_servers = [1]
+
+
+# # Read metrics about temperature
+# [[inputs.temp]]
+#   # no configuration
+
+
+# # Read Tengine's basic status information (ngx_http_reqstat_module)
+# [[inputs.tengine]]
+#   # An array of Tengine reqstat module URI to gather stats.
+#   urls = ["http://127.0.0.1/us"]
+#
+#   # HTTP response timeout (default: 5s)
+#   # response_timeout = "5s"
+#
+#   ## Optional TLS Config
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.cer"
+#   # tls_key = "/etc/telegraf/key.key"
+#   ## Use TLS but skip chain & host verification
+#   # insecure_skip_verify = false
+
+
+# # Gather metrics from the Tomcat server status page.
+# [[inputs.tomcat]]
+#   ## URL of the Tomcat server status
+#   # url = "http://127.0.0.1:8080/manager/status/all?XML=true"
+#
+#   ## HTTP Basic Auth Credentials
+#   # username = "tomcat"
+#   # password = "s3cret"
+#
+#   ## Request timeout
+#   # timeout = "5s"
+#
+#   ## Optional TLS Config
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#   ## Use TLS but skip chain & host verification
+#   # insecure_skip_verify = false
+
+
+# # Inserts sine and cosine waves for demonstration purposes
+# [[inputs.trig]]
+#   ## Set the amplitude
+#   amplitude = 10.0
+
+
+# # Read Twemproxy stats data
+# [[inputs.twemproxy]]
+#   ## Twemproxy stats address and port (no scheme)
+#   addr = "localhost:22222"
+#   ## Monitor pool name
+#   pools = ["redis_pool", "mc_pool"]
+
+
+# # A plugin to collect stats from the Unbound DNS resolver
+# [[inputs.unbound]]
+#   ## Address of server to connect to, read from unbound conf default, optionally ':port'
+#   ## Will lookup IP if given a hostname
+#   server = "127.0.0.1:8953"
+#
+#   ## If running as a restricted user you can prepend sudo for additional access:
+#   # use_sudo = false
+#
+#   ## The default location of the unbound-control binary can be overridden with:
+#   # binary = "/usr/sbin/unbound-control"
+#
+#   ## The default timeout of 1s can be overriden with:
+#   # timeout = "1s"
+#
+#   ## When set to true, thread metrics are tagged with the thread id.
+#   ##
+#   ## The default is false for backwards compatibility, and will be changed to
+#   ## true in a future version.  It is recommended to set to true on new
+#   ## deployments.
+#   thread_as_tag = false
+
+
+# # A plugin to collect stats from Varnish HTTP Cache
+# [[inputs.varnish]]
+#   ## If running as a restricted user you can prepend sudo for additional access:
+#   #use_sudo = false
+#
+#   ## The default location of the varnishstat binary can be overridden with:
+#   binary = "/usr/bin/varnishstat"
+#
+#   ## By default, telegraf gather stats for 3 metric points.
+#   ## Setting stats will override the defaults shown below.
+#   ## Glob matching can be used, ie, stats = ["MAIN.*"]
+#   ## stats may also be set to ["*"], which will collect all stats
+#   stats = ["MAIN.cache_hit", "MAIN.cache_miss", "MAIN.uptime"]
+#
+#   ## Optional name for the varnish instance (or working directory) to query
+#   ## Usually appened after -n in varnish cli
+#   # instance_name = instanceName
+#
+#   ## Timeout for varnishstat command
+#   # timeout = "1s"
+
+
+# # Monitor wifi signal strength and quality
+# [[inputs.wireless]]
+#   ## Sets 'proc' directory path
+#   ## If not specified, then default is /proc
+#   # host_proc = "/proc"
+
+
+# # Reads metrics from a SSL certificate
+# [[inputs.x509_cert]]
+#   ## List certificate sources
+#   sources = ["/etc/ssl/certs/ssl-cert-snakeoil.pem", "tcp://example.org:443"]
+#
+#   ## Timeout for SSL connection
+#   # timeout = "5s"
+#
+#   ## Optional TLS Config
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#
+#   ## Use TLS but skip chain & host verification
+#   # insecure_skip_verify = false
+
+
+# # Read metrics of ZFS from arcstats, zfetchstats, vdev_cache_stats, and pools
+# [[inputs.zfs]]
+#   ## ZFS kstat path. Ignored on FreeBSD
+#   ## If not specified, then default is:
+#   # kstatPath = "/proc/spl/kstat/zfs"
+#
+#   ## By default, telegraf gather all zfs stats
+#   ## If not specified, then default is:
+#   # kstatMetrics = ["arcstats", "zfetchstats", "vdev_cache_stats"]
+#   ## For Linux, the default is:
+#   # kstatMetrics = ["abdstats", "arcstats", "dnodestats", "dbufcachestats",
+#   #   "dmu_tx", "fm", "vdev_mirror_stats", "zfetchstats", "zil"]
+#   ## By default, don't gather zpool stats
+#   # poolMetrics = false
+
+
+# # Reads 'mntr' stats from one or many zookeeper servers
+# [[inputs.zookeeper]]
+#   ## An array of address to gather stats about. Specify an ip or hostname
+#   ## with port. ie localhost:2181, 10.0.0.1:2181, etc.
+#
+#   ## If no servers are specified, then localhost is used as the host.
+#   ## If no port is specified, 2181 is used
+#   servers = [":2181"]
+#
+#   ## Timeout for metric collections from all servers.  Minimum timeout is "1s".
+#   # timeout = "5s"
+#
+#   ## Optional TLS Config
+#   # enable_tls = true
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#   ## If false, skip chain & host verification
+#   # insecure_skip_verify = true
+
+
+
+###############################################################################
+#                            SERVICE INPUT PLUGINS                            #
+###############################################################################
+
+# # AMQP consumer plugin
+# [[inputs.amqp_consumer]]
+#   ## Broker to consume from.
+#   ##   deprecated in 1.7; use the brokers option
+#   # url = "amqp://localhost:5672/influxdb"
+#
+#   ## Brokers to consume from.  If multiple brokers are specified a random broker
+#   ## will be selected anytime a connection is established.  This can be
+#   ## helpful for load balancing when not using a dedicated load balancer.
+#   brokers = ["amqp://localhost:5672/influxdb"]
+#
+#   ## Authentication credentials for the PLAIN auth_method.
+#   # username = ""
+#   # password = ""
+#
+#   ## Exchange to declare and consume from.
+#   exchange = "telegraf"
+#
+#   ## Exchange type; common types are "direct", "fanout", "topic", "header", "x-consistent-hash".
+#   # exchange_type = "topic"
+#
+#   ## If true, exchange will be passively declared.
+#   # exchange_passive = false
+#
+#   ## Exchange durability can be either "transient" or "durable".
+#   # exchange_durability = "durable"
+#
+#   ## Additional exchange arguments.
+#   # exchange_arguments = { }
+#   # exchange_arguments = {"hash_propery" = "timestamp"}
+#
+#   ## AMQP queue name.
+#   queue = "telegraf"
+#
+#   ## AMQP queue durability can be "transient" or "durable".
+#   queue_durability = "durable"
+#
+#   ## Binding Key.
+#   binding_key = "#"
+#
+#   ## Maximum number of messages server should give to the worker.
+#   # prefetch_count = 50
+#
+#   ## Maximum messages to read from the broker that have not been written by an
+#   ## output.  For best throughput set based on the number of metrics within
+#   ## each message and the size of the output's metric_batch_size.
+#   ##
+#   ## For example, if each message from the queue contains 10 metrics and the
+#   ## output metric_batch_size is 1000, setting this to 100 will ensure that a
+#   ## full batch is collected and the write is triggered immediately without
+#   ## waiting until the next flush_interval.
+#   # max_undelivered_messages = 1000
+#
+#   ## Auth method. PLAIN and EXTERNAL are supported
+#   ## Using EXTERNAL requires enabling the rabbitmq_auth_mechanism_ssl plugin as
+#   ## described here: https://www.rabbitmq.com/plugins.html
+#   # auth_method = "PLAIN"
+#
+#   ## Optional TLS Config
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#   ## Use TLS but skip chain & host verification
+#   # insecure_skip_verify = false
+#
+#   ## Data format to consume.
+#   ## Each data format has its own unique set of configuration options, read
+#   ## more about them here:
+#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md
+#   data_format = "influx"
+
+
+# # Read Cassandra metrics through Jolokia
+# [[inputs.cassandra]]
+#   ## DEPRECATED: The cassandra plugin has been deprecated.  Please use the
+#   ## jolokia2 plugin instead.
+#   ##
+#   ## see https://github.com/influxdata/telegraf/tree/master/plugins/inputs/jolokia2
+#
+#   context = "/jolokia/read"
+#   ## List of cassandra servers exposing jolokia read service
+#   servers = ["myuser:mypassword@10.10.10.1:8778","10.10.10.2:8778",":8778"]
+#   ## List of metrics collected on above servers
+#   ## Each metric consists of a jmx path.
+#   ## This will collect all heap memory usage metrics from the jvm and
+#   ## ReadLatency metrics for all keyspaces and tables.
+#   ## "type=Table" in the query works with Cassandra3.0. Older versions might
+#   ## need to use "type=ColumnFamily"
+#   metrics  = [
+#     "/java.lang:type=Memory/HeapMemoryUsage",
+#     "/org.apache.cassandra.metrics:type=Table,keyspace=*,scope=*,name=ReadLatency"
+#   ]
+
+
+# # Read metrics from Google PubSub
+# [[inputs.cloud_pubsub]]
+#   ## Required. Name of Google Cloud Platform (GCP) Project that owns
+#   ## the given PubSub subscription.
+#   project = "my-project"
+#
+#   ## Required. Name of PubSub subscription to ingest metrics from.
+#   subscription = "my-subscription"
+#
+#   ## Required. Data format to consume.
+#   ## Each data format has its own unique set of configuration options.
+#   ## Read more about them here:
+#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md
+#   data_format = "influx"
+#
+#   ## Optional. Filepath for GCP credentials JSON file to authorize calls to
+#   ## PubSub APIs. If not set explicitly, Telegraf will attempt to use
+#   ## Application Default Credentials, which is preferred.
+#   # credentials_file = "path/to/my/creds.json"
+#
+#   ## Optional. Number of seconds to wait before attempting to restart the
+#   ## PubSub subscription receiver after an unexpected error.
+#   ## If the streaming pull for a PubSub Subscription fails (receiver),
+#   ## the agent attempts to restart receiving messages after this many seconds.
+#   # retry_delay_seconds = 5
+#
+#   ## Optional. Maximum byte length of a message to consume.
+#   ## Larger messages are dropped with an error. If less than 0 or unspecified,
+#   ## treated as no limit.
+#   # max_message_len = 1000000
+#
+#   ## Optional. Maximum messages to read from PubSub that have not been written
+#   ## to an output. Defaults to 1000.
+#   ## For best throughput set based on the number of metrics within
+#   ## each message and the size of the output's metric_batch_size.
+#   ##
+#   ## For example, if each message contains 10 metrics and the output
+#   ## metric_batch_size is 1000, setting this to 100 will ensure that a
+#   ## full batch is collected and the write is triggered immediately without
+#   ## waiting until the next flush_interval.
+#   # max_undelivered_messages = 1000
+#
+#   ## The following are optional Subscription ReceiveSettings in PubSub.
+#   ## Read more about these values:
+#   ## https://godoc.org/cloud.google.com/go/pubsub#ReceiveSettings
+#
+#   ## Optional. Maximum number of seconds for which a PubSub subscription
+#   ## should auto-extend the PubSub ACK deadline for each message. If less than
+#   ## 0, auto-extension is disabled.
+#   # max_extension = 0
+#
+#   ## Optional. Maximum number of unprocessed messages in PubSub
+#   ## (unacknowledged but not yet expired in PubSub).
+#   ## A value of 0 is treated as the default PubSub value.
+#   ## Negative values will be treated as unlimited.
+#   # max_outstanding_messages = 0
+#
+#   ## Optional. Maximum size in bytes of unprocessed messages in PubSub
+#   ## (unacknowledged but not yet expired in PubSub).
+#   ## A value of 0 is treated as the default PubSub value.
+#   ## Negative values will be treated as unlimited.
+#   # max_outstanding_bytes = 0
+#
+#   ## Optional. Max number of goroutines a PubSub Subscription receiver can spawn
+#   ## to pull messages from PubSub concurrently. This limit applies to each
+#   ## subscription separately and is treated as the PubSub default if less than
+#   ## 1. Note this setting does not limit the number of messages that can be
+#   ## processed concurrently (use "max_outstanding_messages" instead).
+#   # max_receiver_go_routines = 0
+
+
+# # Google Cloud Pub/Sub Push HTTP listener
+# [[inputs.cloud_pubsub_push]]
+#   ## Address and port to host HTTP listener on
+#   service_address = ":8080"
+#
+#   ## Application secret to verify messages originate from Cloud Pub/Sub
+#   # token = ""
+#
+#   ## Path to listen to.
+#   # path = "/"
+#
+#   ## Maximum duration before timing out read of the request
+#   # read_timeout = "10s"
+#   ## Maximum duration before timing out write of the response. This should be set to a value
+#   ## large enough that you can send at least 'metric_batch_size' number of messages within the
+#   ## duration.
+#   # write_timeout = "10s"
+#
+#   ## Maximum allowed http request body size in bytes.
+#   ## 0 means to use the default of 524,288,00 bytes (500 mebibytes)
+#   # max_body_size = "500MB"
+#
+#   ## Whether to add the pubsub metadata, such as message attributes and subscription as a tag.
+#   # add_meta = false
+#
+#   ## Optional. Maximum messages to read from PubSub that have not been written
+#   ## to an output. Defaults to 1000.
+#   ## For best throughput set based on the number of metrics within
+#   ## each message and the size of the output's metric_batch_size.
+#   ##
+#   ## For example, if each message contains 10 metrics and the output
+#   ## metric_batch_size is 1000, setting this to 100 will ensure that a
+#   ## full batch is collected and the write is triggered immediately without
+#   ## waiting until the next flush_interval.
+#   # max_undelivered_messages = 1000
+#
+#   ## Set one or more allowed client CA certificate file names to
+#   ## enable mutually authenticated TLS connections
+#   # tls_allowed_cacerts = ["/etc/telegraf/clientca.pem"]
+#
+#   ## Add service certificate and key
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#
+#   ## Data format to consume.
+#   ## Each data format has its own unique set of configuration options, read
+#   ## more about them here:
+#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md
+#   data_format = "influx"
+
+
+# # Influx HTTP write listener
+# [[inputs.http_listener]]
+#   ## Address and port to host HTTP listener on
+#   service_address = ":8186"
+#
+#   ## maximum duration before timing out read of the request
+#   read_timeout = "10s"
+#   ## maximum duration before timing out write of the response
+#   write_timeout = "10s"
+#
+#   ## Maximum allowed http request body size in bytes.
+#   ## 0 means to use the default of 524,288,000 bytes (500 mebibytes)
+#   max_body_size = "500MiB"
+#
+#   ## Maximum line size allowed to be sent in bytes.
+#   ## 0 means to use the default of 65536 bytes (64 kibibytes)
+#   max_line_size = "64KiB"
+#
+#   ## Set one or more allowed client CA certificate file names to
+#   ## enable mutually authenticated TLS connections
+#   tls_allowed_cacerts = ["/etc/telegraf/clientca.pem"]
+#
+#   ## Add service certificate and key
+#   tls_cert = "/etc/telegraf/cert.pem"
+#   tls_key = "/etc/telegraf/key.pem"
+#
+#   ## Optional username and password to accept for HTTP basic authentication.
+#   ## You probably want to make sure you have TLS configured above for this.
+#   # basic_username = "foobar"
+#   # basic_password = "barfoo"
+
+
+# # Generic HTTP write listener
+# [[inputs.http_listener_v2]]
+#   ## Address and port to host HTTP listener on
+#   service_address = ":8080"
+#
+#   ## Path to listen to.
+#   # path = "/telegraf"
+#
+#   ## HTTP methods to accept.
+#   # methods = ["POST", "PUT"]
+#
+#   ## maximum duration before timing out read of the request
+#   # read_timeout = "10s"
+#   ## maximum duration before timing out write of the response
+#   # write_timeout = "10s"
+#
+#   ## Maximum allowed http request body size in bytes.
+#   ## 0 means to use the default of 524,288,00 bytes (500 mebibytes)
+#   # max_body_size = "500MB"
+#
+#   ## Set one or more allowed client CA certificate file names to
+#   ## enable mutually authenticated TLS connections
+#   # tls_allowed_cacerts = ["/etc/telegraf/clientca.pem"]
+#
+#   ## Add service certificate and key
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#
+#   ## Optional username and password to accept for HTTP basic authentication.
+#   ## You probably want to make sure you have TLS configured above for this.
+#   # basic_username = "foobar"
+#   # basic_password = "barfoo"
+#
+#   ## Data format to consume.
+#   ## Each data format has its own unique set of configuration options, read
+#   ## more about them here:
+#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md
+#   data_format = "influx"
+
+
+# # Influx HTTP write listener
+# [[inputs.influxdb_listener]]
+#   ## Address and port to host HTTP listener on
+#   service_address = ":8186"
+#
+#   ## maximum duration before timing out read of the request
+#   read_timeout = "10s"
+#   ## maximum duration before timing out write of the response
+#   write_timeout = "10s"
+#
+#   ## Maximum allowed http request body size in bytes.
+#   ## 0 means to use the default of 524,288,000 bytes (500 mebibytes)
+#   max_body_size = "500MiB"
+#
+#   ## Maximum line size allowed to be sent in bytes.
+#   ## 0 means to use the default of 65536 bytes (64 kibibytes)
+#   max_line_size = "64KiB"
+#
+#   ## Set one or more allowed client CA certificate file names to
+#   ## enable mutually authenticated TLS connections
+#   tls_allowed_cacerts = ["/etc/telegraf/clientca.pem"]
+#
+#   ## Add service certificate and key
+#   tls_cert = "/etc/telegraf/cert.pem"
+#   tls_key = "/etc/telegraf/key.pem"
+#
+#   ## Optional username and password to accept for HTTP basic authentication.
+#   ## You probably want to make sure you have TLS configured above for this.
+#   # basic_username = "foobar"
+#   # basic_password = "barfoo"
+
+
+# # Read JTI OpenConfig Telemetry from listed sensors
+# [[inputs.jti_openconfig_telemetry]]
+#   ## List of device addresses to collect telemetry from
+#   servers = ["localhost:1883"]
+#
+#   ## Authentication details. Username and password are must if device expects
+#   ## authentication. Client ID must be unique when connecting from multiple instances
+#   ## of telegraf to the same device
+#   username = "user"
+#   password = "pass"
+#   client_id = "telegraf"
+#
+#   ## Frequency to get data
+#   sample_frequency = "1000ms"
+#
+#   ## Sensors to subscribe for
+#   ## A identifier for each sensor can be provided in path by separating with space
+#   ## Else sensor path will be used as identifier
+#   ## When identifier is used, we can provide a list of space separated sensors.
+#   ## A single subscription will be created with all these sensors and data will
+#   ## be saved to measurement with this identifier name
+#   sensors = [
+#    "/interfaces/",
+#    "collection /components/ /lldp",
+#   ]
+#
+#   ## We allow specifying sensor group level reporting rate. To do this, specify the
+#   ## reporting rate in Duration at the beginning of sensor paths / collection
+#   ## name. For entries without reporting rate, we use configured sample frequency
+#   sensors = [
+#    "1000ms customReporting /interfaces /lldp",
+#    "2000ms collection /components",
+#    "/interfaces",
+#   ]
+#
+#   ## x509 Certificate to use with TLS connection. If it is not provided, an insecure
+#   ## channel will be opened with server
+#   ssl_cert = "/etc/telegraf/cert.pem"
+#
+#   ## Delay between retry attempts of failed RPC calls or streams. Defaults to 1000ms.
+#   ## Failed streams/calls will not be retried if 0 is provided
+#   retry_delay = "1000ms"
+#
+#   ## To treat all string values as tags, set this to true
+#   str_as_tags = false
+
+
+# # Read metrics from Kafka topic(s)
+# [[inputs.kafka_consumer]]
+#   ## kafka servers
+#   brokers = ["localhost:9092"]
+#   ## topic(s) to consume
+#   topics = ["telegraf"]
+#   ## Add topic as tag if topic_tag is not empty
+#   # topic_tag = ""
+#
+#   ## Optional Client id
+#   # client_id = "Telegraf"
+#
+#   ## Set the minimal supported Kafka version.  Setting this enables the use of new
+#   ## Kafka features and APIs.  Of particular interest, lz4 compression
+#   ## requires at least version 0.10.0.0.
+#   ##   ex: version = "1.1.0"
+#   # version = ""
+#
+#   ## Optional TLS Config
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#   ## Use TLS but skip chain & host verification
+#   # insecure_skip_verify = false
+#
+#   ## Optional SASL Config
+#   # sasl_username = "kafka"
+#   # sasl_password = "secret"
+#
+#   ## the name of the consumer group
+#   consumer_group = "telegraf_metrics_consumers"
+#   ## Offset (must be either "oldest" or "newest")
+#   offset = "oldest"
+#   ## Maximum length of a message to consume, in bytes (default 0/unlimited);
+#   ## larger messages are dropped
+#   max_message_len = 1000000
+#
+#   ## Maximum messages to read from the broker that have not been written by an
+#   ## output.  For best throughput set based on the number of metrics within
+#   ## each message and the size of the output's metric_batch_size.
+#   ##
+#   ## For example, if each message from the queue contains 10 metrics and the
+#   ## output metric_batch_size is 1000, setting this to 100 will ensure that a
+#   ## full batch is collected and the write is triggered immediately without
+#   ## waiting until the next flush_interval.
+#   # max_undelivered_messages = 1000
+#
+#   ## Data format to consume.
+#   ## Each data format has its own unique set of configuration options, read
+#   ## more about them here:
+#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md
+#   data_format = "influx"
+
+
+# # Read metrics from Kafka topic(s)
+# [[inputs.kafka_consumer_legacy]]
+#   ## topic(s) to consume
+#   topics = ["telegraf"]
+#   ## an array of Zookeeper connection strings
+#   zookeeper_peers = ["localhost:2181"]
+#   ## Zookeeper Chroot
+#   zookeeper_chroot = ""
+#   ## the name of the consumer group
+#   consumer_group = "telegraf_metrics_consumers"
+#   ## Offset (must be either "oldest" or "newest")
+#   offset = "oldest"
+#
+#   ## Data format to consume.
+#   ## Each data format has its own unique set of configuration options, read
+#   ## more about them here:
+#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md
+#   data_format = "influx"
+#
+#   ## Maximum length of a message to consume, in bytes (default 0/unlimited);
+#   ## larger messages are dropped
+#   max_message_len = 65536
+
+
+# # Configuration for the AWS Kinesis input.
+# [[inputs.kinesis_consumer]]
+#   ## Amazon REGION of kinesis endpoint.
+#   region = "ap-southeast-2"
+#
+#   ## Amazon Credentials
+#   ## Credentials are loaded in the following order
+#   ## 1) Assumed credentials via STS if role_arn is specified
+#   ## 2) explicit credentials from 'access_key' and 'secret_key'
+#   ## 3) shared profile from 'profile'
+#   ## 4) environment variables
+#   ## 5) shared credentials file
+#   ## 6) EC2 Instance Profile
+#   # access_key = ""
+#   # secret_key = ""
+#   # token = ""
+#   # role_arn = ""
+#   # profile = ""
+#   # shared_credential_file = ""
+#
+#   ## Endpoint to make request against, the correct endpoint is automatically
+#   ## determined and this option should only be set if you wish to override the
+#   ## default.
+#   ##   ex: endpoint_url = "http://localhost:8000"
+#   # endpoint_url = ""
+#
+#   ## Kinesis StreamName must exist prior to starting telegraf.
+#   streamname = "StreamName"
+#
+#   ## Shard iterator type (only 'TRIM_HORIZON' and 'LATEST' currently supported)
+#   # shard_iterator_type = "TRIM_HORIZON"
+#
+#   ## Maximum messages to read from the broker that have not been written by an
+#   ## output.  For best throughput set based on the number of metrics within
+#   ## each message and the size of the output's metric_batch_size.
+#   ##
+#   ## For example, if each message from the queue contains 10 metrics and the
+#   ## output metric_batch_size is 1000, setting this to 100 will ensure that a
+#   ## full batch is collected and the write is triggered immediately without
+#   ## waiting until the next flush_interval.
+#   # max_undelivered_messages = 1000
+#
+#   ## Data format to consume.
+#   ## Each data format has its own unique set of configuration options, read
+#   ## more about them here:
+#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md
+#   data_format = "influx"
+#
+#   ## Optional
+#   ## Configuration for a dynamodb checkpoint
+#   [inputs.kinesis_consumer.checkpoint_dynamodb]
+# 	## unique name for this consumer
+# 	app_name = "default"
+# 	table_name = "default"
+
+
+# # Stream and parse log file(s).
+# [[inputs.logparser]]
+#   ## Log files to parse.
+#   ## These accept standard unix glob matching rules, but with the addition of
+#   ## ** as a "super asterisk". ie:
+#   ##   /var/log/**.log     -> recursively find all .log files in /var/log
+#   ##   /var/log/*/*.log    -> find all .log files with a parent dir in /var/log
+#   ##   /var/log/apache.log -> only tail the apache log file
+#   files = ["/var/log/apache/access.log"]
+#
+#   ## Read files that currently exist from the beginning. Files that are created
+#   ## while telegraf is running (and that match the "files" globs) will always
+#   ## be read from the beginning.
+#   from_beginning = false
+#
+#   ## Method used to watch for file updates.  Can be either "inotify" or "poll".
+#   # watch_method = "inotify"
+#
+#   ## Parse logstash-style "grok" patterns:
+#   [inputs.logparser.grok]
+#     ## This is a list of patterns to check the given log file(s) for.
+#     ## Note that adding patterns here increases processing time. The most
+#     ## efficient configuration is to have one pattern per logparser.
+#     ## Other common built-in patterns are:
+#     ##   %{COMMON_LOG_FORMAT}   (plain apache & nginx access logs)
+#     ##   %{COMBINED_LOG_FORMAT} (access logs + referrer & agent)
+#     patterns = ["%{COMBINED_LOG_FORMAT}"]
+#
+#     ## Name of the outputted measurement name.
+#     measurement = "apache_access_log"
+#
+#     ## Full path(s) to custom pattern files.
+#     custom_pattern_files = []
+#
+#     ## Custom patterns can also be defined here. Put one pattern per line.
+#     custom_patterns = '''
+#     '''
+#
+#     ## Timezone allows you to provide an override for timestamps that
+#     ## don't already include an offset
+#     ## e.g. 04/06/2016 12:41:45 data one two 5.43µs
+#     ##
+#     ## Default: "" which renders UTC
+#     ## Options are as follows:
+#     ##   1. Local             -- interpret based on machine localtime
+#     ##   2. "Canada/Eastern"  -- Unix TZ values like those found in https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
+#     ##   3. UTC               -- or blank/unspecified, will return timestamp in UTC
+#     # timezone = "Canada/Eastern"
+#
+# 	## When set to "disable", timestamp will not incremented if there is a
+# 	## duplicate.
+#     # unique_timestamp = "auto"
+
+
+# # Read metrics from MQTT topic(s)
+# [[inputs.mqtt_consumer]]
+#   ## MQTT broker URLs to be used. The format should be scheme://host:port,
+#   ## schema can be tcp, ssl, or ws.
+#   servers = ["tcp://localhost:1883"]
+#
+#   ## QoS policy for messages
+#   ##   0 = at most once
+#   ##   1 = at least once
+#   ##   2 = exactly once
+#   ##
+#   ## When using a QoS of 1 or 2, you should enable persistent_session to allow
+#   ## resuming unacknowledged messages.
+#   qos = 0
+#
+#   ## Connection timeout for initial connection in seconds
+#   connection_timeout = "30s"
+#
+#   ## Maximum messages to read from the broker that have not been written by an
+#   ## output.  For best throughput set based on the number of metrics within
+#   ## each message and the size of the output's metric_batch_size.
+#   ##
+#   ## For example, if each message from the queue contains 10 metrics and the
+#   ## output metric_batch_size is 1000, setting this to 100 will ensure that a
+#   ## full batch is collected and the write is triggered immediately without
+#   ## waiting until the next flush_interval.
+#   # max_undelivered_messages = 1000
+#
+#   ## Topics to subscribe to
+#   topics = [
+#     "telegraf/host01/cpu",
+#     "telegraf/+/mem",
+#     "sensors/#",
+#   ]
+#
+#   # if true, messages that can't be delivered while the subscriber is offline
+#   # will be delivered when it comes back (such as on service restart).
+#   # NOTE: if true, client_id MUST be set
+#   persistent_session = false
+#   # If empty, a random client ID will be generated.
+#   client_id = ""
+#
+#   ## username and password to connect MQTT server.
+#   # username = "telegraf"
+#   # password = "metricsmetricsmetricsmetrics"
+#
+#   ## Optional TLS Config
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#   ## Use TLS but skip chain & host verification
+#   # insecure_skip_verify = false
+#
+#   ## Data format to consume.
+#   ## Each data format has its own unique set of configuration options, read
+#   ## more about them here:
+#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md
+#   data_format = "influx"
+
+
+# # Read metrics from NATS subject(s)
+# [[inputs.nats_consumer]]
+#   ## urls of NATS servers
+#   servers = ["nats://localhost:4222"]
+#   ## Use Transport Layer Security
+#   secure = false
+#   ## subject(s) to consume
+#   subjects = ["telegraf"]
+#   ## name a queue group
+#   queue_group = "telegraf_consumers"
+#
+#   ## Sets the limits for pending msgs and bytes for each subscription
+#   ## These shouldn't need to be adjusted except in very high throughput scenarios
+#   # pending_message_limit = 65536
+#   # pending_bytes_limit = 67108864
+#
+#   ## Maximum messages to read from the broker that have not been written by an
+#   ## output.  For best throughput set based on the number of metrics within
+#   ## each message and the size of the output's metric_batch_size.
+#   ##
+#   ## For example, if each message from the queue contains 10 metrics and the
+#   ## output metric_batch_size is 1000, setting this to 100 will ensure that a
+#   ## full batch is collected and the write is triggered immediately without
+#   ## waiting until the next flush_interval.
+#   # max_undelivered_messages = 1000
+#
+#   ## Data format to consume.
+#   ## Each data format has its own unique set of configuration options, read
+#   ## more about them here:
+#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md
+#   data_format = "influx"
+
+
+# # Read NSQ topic for metrics.
+# [[inputs.nsq_consumer]]
+#   ## Server option still works but is deprecated, we just prepend it to the nsqd array.
+#   # server = "localhost:4150"
+#   ## An array representing the NSQD TCP HTTP Endpoints
+#   nsqd = ["localhost:4150"]
+#   ## An array representing the NSQLookupd HTTP Endpoints
+#   nsqlookupd = ["localhost:4161"]
+#   topic = "telegraf"
+#   channel = "consumer"
+#   max_in_flight = 100
+#
+#   ## Maximum messages to read from the broker that have not been written by an
+#   ## output.  For best throughput set based on the number of metrics within
+#   ## each message and the size of the output's metric_batch_size.
+#   ##
+#   ## For example, if each message from the queue contains 10 metrics and the
+#   ## output metric_batch_size is 1000, setting this to 100 will ensure that a
+#   ## full batch is collected and the write is triggered immediately without
+#   ## waiting until the next flush_interval.
+#   # max_undelivered_messages = 1000
+#
+#   ## Data format to consume.
+#   ## Each data format has its own unique set of configuration options, read
+#   ## more about them here:
+#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md
+#   data_format = "influx"
+
+
+# # Read metrics from one or many pgbouncer servers
+# [[inputs.pgbouncer]]
+#   ## specify address via a url matching:
+#   ##   postgres://[pqgotest[:password]]@localhost[/dbname]\
+#   ##       ?sslmode=[disable|verify-ca|verify-full]
+#   ## or a simple string:
+#   ##   host=localhost user=pqotest password=... sslmode=... dbname=app_production
+#   ##
+#   ## All connection parameters are optional.
+#   ##
+#   address = "host=localhost user=pgbouncer sslmode=disable"
+
+
+# # Read metrics from one or many postgresql servers
+# [[inputs.postgresql]]
+#   ## specify address via a url matching:
+#   ##   postgres://[pqgotest[:password]]@localhost[/dbname]\
+#   ##       ?sslmode=[disable|verify-ca|verify-full]
+#   ## or a simple string:
+#   ##   host=localhost user=pqotest password=... sslmode=... dbname=app_production
+#   ##
+#   ## All connection parameters are optional.
+#   ##
+#   ## Without the dbname parameter, the driver will default to a database
+#   ## with the same name as the user. This dbname is just for instantiating a
+#   ## connection with the server and doesn't restrict the databases we are trying
+#   ## to grab metrics for.
+#   ##
+#   address = "host=localhost user=postgres sslmode=disable"
+#   ## A custom name for the database that will be used as the "server" tag in the
+#   ## measurement output. If not specified, a default one generated from
+#   ## the connection address is used.
+#   # outputaddress = "db01"
+#
+#   ## connection configuration.
+#   ## maxlifetime - specify the maximum lifetime of a connection.
+#   ## default is forever (0s)
+#   max_lifetime = "0s"
+#
+#   ## A  list of databases to explicitly ignore.  If not specified, metrics for all
+#   ## databases are gathered.  Do NOT use with the 'databases' option.
+#   # ignored_databases = ["postgres", "template0", "template1"]
+#
+#   ## A list of databases to pull metrics about. If not specified, metrics for all
+#   ## databases are gathered.  Do NOT use with the 'ignored_databases' option.
+#   # databases = ["app_production", "testing"]
+
+
+# # Read metrics from one or many postgresql servers
+# [[inputs.postgresql_extensible]]
+#   ## specify address via a url matching:
+#   ##   postgres://[pqgotest[:password]]@localhost[/dbname]\
+#   ##       ?sslmode=[disable|verify-ca|verify-full]
+#   ## or a simple string:
+#   ##   host=localhost user=pqotest password=... sslmode=... dbname=app_production
+#   #
+#   ## All connection parameters are optional.  #
+#   ## Without the dbname parameter, the driver will default to a database
+#   ## with the same name as the user. This dbname is just for instantiating a
+#   ## connection with the server and doesn't restrict the databases we are trying
+#   ## to grab metrics for.
+#   #
+#   address = "host=localhost user=postgres sslmode=disable"
+#
+#   ## connection configuration.
+#   ## maxlifetime - specify the maximum lifetime of a connection.
+#   ## default is forever (0s)
+#   max_lifetime = "0s"
+#
+#   ## A list of databases to pull metrics about. If not specified, metrics for all
+#   ## databases are gathered.
+#   ## databases = ["app_production", "testing"]
+#   #
+#   ## A custom name for the database that will be used as the "server" tag in the
+#   ## measurement output. If not specified, a default one generated from
+#   ## the connection address is used.
+#   # outputaddress = "db01"
+#   #
+#   ## Define the toml config where the sql queries are stored
+#   ## New queries can be added, if the withdbname is set to true and there is no
+#   ## databases defined in the 'databases field', the sql query is ended by a
+#   ## 'is not null' in order to make the query succeed.
+#   ## Example :
+#   ## The sqlquery : "SELECT * FROM pg_stat_database where datname" become
+#   ## "SELECT * FROM pg_stat_database where datname IN ('postgres', 'pgbench')"
+#   ## because the databases variable was set to ['postgres', 'pgbench' ] and the
+#   ## withdbname was true. Be careful that if the withdbname is set to false you
+#   ## don't have to define the where clause (aka with the dbname) the tagvalue
+#   ## field is used to define custom tags (separated by commas)
+#   ## The optional "measurement" value can be used to override the default
+#   ## output measurement name ("postgresql").
+#   #
+#   ## Structure :
+#   ## [[inputs.postgresql_extensible.query]]
+#   ##   sqlquery string
+#   ##   version string
+#   ##   withdbname boolean
+#   ##   tagvalue string (comma separated)
+#   ##   measurement string
+#   [[inputs.postgresql_extensible.query]]
+#     sqlquery="SELECT * FROM pg_stat_database"
+#     version=901
+#     withdbname=false
+#     tagvalue=""
+#     measurement=""
+#   [[inputs.postgresql_extensible.query]]
+#     sqlquery="SELECT * FROM pg_stat_bgwriter"
+#     version=901
+#     withdbname=false
+#     tagvalue="postgresql.stats"
+
+
+# # Read metrics from one or many prometheus clients
+# [[inputs.prometheus]]
+#   ## An array of urls to scrape metrics from.
+#   urls = ["http://localhost:9100/metrics"]
+#
+#   ## An array of Kubernetes services to scrape metrics from.
+#   # kubernetes_services = ["http://my-service-dns.my-namespace:9100/metrics"]
+#
+#   ## Kubernetes config file to create client from.
+#   # kube_config = "/path/to/kubernetes.config"
+#
+#   ## Scrape Kubernetes pods for the following prometheus annotations:
+#   ## - prometheus.io/scrape: Enable scraping for this pod
+#   ## - prometheus.io/scheme: If the metrics endpoint is secured then you will need to
+#   ##     set this to 'https' & most likely set the tls config.
+#   ## - prometheus.io/path: If the metrics path is not /metrics, define it with this annotation.
+#   ## - prometheus.io/port: If port is not 9102 use this annotation
+#   # monitor_kubernetes_pods = true
+#
+#   ## Use bearer token for authorization. ('bearer_token' takes priority)
+#   # bearer_token = "/path/to/bearer/token"
+#   ## OR
+#   # bearer_token_string = "abc_123"
+#
+#   ## Specify timeout duration for slower prometheus clients (default is 3s)
+#   # response_timeout = "3s"
+#
+#   ## Optional TLS Config
+#   # tls_ca = /path/to/cafile
+#   # tls_cert = /path/to/certfile
+#   # tls_key = /path/to/keyfile
+#   ## Use TLS but skip chain & host verification
+#   # insecure_skip_verify = false
+
+
+# # Generic socket listener capable of handling multiple socket types.
+# [[inputs.socket_listener]]
+#   ## URL to listen on
+#   # service_address = "tcp://:8094"
+#   # service_address = "tcp://127.0.0.1:http"
+#   # service_address = "tcp4://:8094"
+#   # service_address = "tcp6://:8094"
+#   # service_address = "tcp6://[2001:db8::1]:8094"
+#   # service_address = "udp://:8094"
+#   # service_address = "udp4://:8094"
+#   # service_address = "udp6://:8094"
+#   # service_address = "unix:///tmp/telegraf.sock"
+#   # service_address = "unixgram:///tmp/telegraf.sock"
+#
+#   ## Maximum number of concurrent connections.
+#   ## Only applies to stream sockets (e.g. TCP).
+#   ## 0 (default) is unlimited.
+#   # max_connections = 1024
+#
+#   ## Read timeout.
+#   ## Only applies to stream sockets (e.g. TCP).
+#   ## 0 (default) is unlimited.
+#   # read_timeout = "30s"
+#
+#   ## Optional TLS configuration.
+#   ## Only applies to stream sockets (e.g. TCP).
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key  = "/etc/telegraf/key.pem"
+#   ## Enables client authentication if set.
+#   # tls_allowed_cacerts = ["/etc/telegraf/clientca.pem"]
+#
+#   ## Maximum socket buffer size (in bytes when no unit specified).
+#   ## For stream sockets, once the buffer fills up, the sender will start backing up.
+#   ## For datagram sockets, once the buffer fills up, metrics will start dropping.
+#   ## Defaults to the OS default.
+#   # read_buffer_size = "64KiB"
+#
+#   ## Period between keep alive probes.
+#   ## Only applies to TCP sockets.
+#   ## 0 disables keep alive probes.
+#   ## Defaults to the OS configuration.
+#   # keep_alive_period = "5m"
+#
+#   ## Data format to consume.
+#   ## Each data format has its own unique set of configuration options, read
+#   ## more about them here:
+#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md
+#   # data_format = "influx"
+
+
+# # Statsd UDP/TCP Server
+# [[inputs.statsd]]
+#   ## Protocol, must be "tcp", "udp", "udp4" or "udp6" (default=udp)
+#   protocol = "udp"
+#
+#   ## MaxTCPConnection - applicable when protocol is set to tcp (default=250)
+#   max_tcp_connections = 250
+#
+#   ## Enable TCP keep alive probes (default=false)
+#   tcp_keep_alive = false
+#
+#   ## Specifies the keep-alive period for an active network connection.
+#   ## Only applies to TCP sockets and will be ignored if tcp_keep_alive is false.
+#   ## Defaults to the OS configuration.
+#   # tcp_keep_alive_period = "2h"
+#
+#   ## Address and port to host UDP listener on
+#   service_address = ":8125"
+#
+#   ## The following configuration options control when telegraf clears it's cache
+#   ## of previous values. If set to false, then telegraf will only clear it's
+#   ## cache when the daemon is restarted.
+#   ## Reset gauges every interval (default=true)
+#   delete_gauges = true
+#   ## Reset counters every interval (default=true)
+#   delete_counters = true
+#   ## Reset sets every interval (default=true)
+#   delete_sets = true
+#   ## Reset timings & histograms every interval (default=true)
+#   delete_timings = true
+#
+#   ## Percentiles to calculate for timing & histogram stats
+#   percentiles = [90]
+#
+#   ## separator to use between elements of a statsd metric
+#   metric_separator = "_"
+#
+#   ## Parses tags in the datadog statsd format
+#   ## http://docs.datadoghq.com/guides/dogstatsd/
+#   parse_data_dog_tags = false
+#
+#   ## Statsd data translation templates, more info can be read here:
+#   ## https://github.com/influxdata/telegraf/blob/master/docs/TEMPLATE_PATTERN.md
+#   # templates = [
+#   #     "cpu.* measurement*"
+#   # ]
+#
+#   ## Number of UDP messages allowed to queue up, once filled,
+#   ## the statsd server will start dropping packets
+#   allowed_pending_messages = 10000
+#
+#   ## Number of timing/histogram values to track per-measurement in the
+#   ## calculation of percentiles. Raising this limit increases the accuracy
+#   ## of percentiles but also increases the memory usage and cpu time.
+#   percentile_limit = 1000
+
+
+# # Accepts syslog messages following RFC5424 format with transports as per RFC5426, RFC5425, or RFC6587
+# [[inputs.syslog]]
+#   ## Specify an ip or hostname with port - eg., tcp://localhost:6514, tcp://10.0.0.1:6514
+#   ## Protocol, address and port to host the syslog receiver.
+#   ## If no host is specified, then localhost is used.
+#   ## If no port is specified, 6514 is used (RFC5425#section-4.1).
+#   server = "tcp://:6514"
+#
+#   ## TLS Config
+#   # tls_allowed_cacerts = ["/etc/telegraf/ca.pem"]
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#
+#   ## Period between keep alive probes.
+#   ## 0 disables keep alive probes.
+#   ## Defaults to the OS configuration.
+#   ## Only applies to stream sockets (e.g. TCP).
+#   # keep_alive_period = "5m"
+#
+#   ## Maximum number of concurrent connections (default = 0).
+#   ## 0 means unlimited.
+#   ## Only applies to stream sockets (e.g. TCP).
+#   # max_connections = 1024
+#
+#   ## Read timeout is the maximum time allowed for reading a single message (default = 5s).
+#   ## 0 means unlimited.
+#   # read_timeout = "5s"
+#
+#   ## The framing technique with which it is expected that messages are transported (default = "octet-counting").
+#   ## Whether the messages come using the octect-counting (RFC5425#section-4.3.1, RFC6587#section-3.4.1),
+#   ## or the non-transparent framing technique (RFC6587#section-3.4.2).
+#   ## Must be one of "octect-counting", "non-transparent".
+#   # framing = "octet-counting"
+#
+#   ## The trailer to be expected in case of non-trasparent framing (default = "LF").
+#   ## Must be one of "LF", or "NUL".
+#   # trailer = "LF"
+#
+#   ## Whether to parse in best effort mode or not (default = false).
+#   ## By default best effort parsing is off.
+#   # best_effort = false
+#
+#   ## Character to prepend to SD-PARAMs (default = "_").
+#   ## A syslog message can contain multiple parameters and multiple identifiers within structured data section.
+#   ## Eg., [id1 name1="val1" name2="val2"][id2 name1="val1" nameA="valA"]
+#   ## For each combination a field is created.
+#   ## Its name is created concatenating identifier, sdparam_separator, and parameter name.
+#   # sdparam_separator = "_"
+
+
+# # Stream a log file, like the tail -f command
+# [[inputs.tail]]
+#   ## files to tail.
+#   ## These accept standard unix glob matching rules, but with the addition of
+#   ## ** as a "super asterisk". ie:
+#   ##   "/var/log/**.log"  -> recursively find all .log files in /var/log
+#   ##   "/var/log/*/*.log" -> find all .log files with a parent dir in /var/log
+#   ##   "/var/log/apache.log" -> just tail the apache log file
+#   ##
+#   ## See https://github.com/gobwas/glob for more examples
+#   ##
+#   files = ["/var/mymetrics.out"]
+#   ## Read file from beginning.
+#   from_beginning = false
+#   ## Whether file is a named pipe
+#   pipe = false
+#
+#   ## Method used to watch for file updates.  Can be either "inotify" or "poll".
+#   # watch_method = "inotify"
+#
+#   ## Data format to consume.
+#   ## Each data format has its own unique set of configuration options, read
+#   ## more about them here:
+#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md
+#   data_format = "influx"
+
+
+# # Generic TCP listener
+# [[inputs.tcp_listener]]
+#   # DEPRECATED: the TCP listener plugin has been deprecated in favor of the
+#   # socket_listener plugin
+#   # see https://github.com/influxdata/telegraf/tree/master/plugins/inputs/socket_listener
+
+
+# # Generic UDP listener
+# [[inputs.udp_listener]]
+#   # DEPRECATED: the TCP listener plugin has been deprecated in favor of the
+#   # socket_listener plugin
+#   # see https://github.com/influxdata/telegraf/tree/master/plugins/inputs/socket_listener
+
+
+# # Read metrics from VMware vCenter
+# [[inputs.vsphere]]
+#   ## List of vCenter URLs to be monitored. These three lines must be uncommented
+#   ## and edited for the plugin to work.
+#   vcenters = [ "https://vcenter.local/sdk" ]
+#   username = "user@corp.local"
+#   password = "secret"
+#
+#   ## VMs
+#   ## Typical VM metrics (if omitted or empty, all metrics are collected)
+#   vm_metric_include = [
+#     "cpu.demand.average",
+#     "cpu.idle.summation",
+#     "cpu.latency.average",
+#     "cpu.readiness.average",
+#     "cpu.ready.summation",
+#     "cpu.run.summation",
+#     "cpu.usagemhz.average",
+#     "cpu.used.summation",
+#     "cpu.wait.summation",
+#     "mem.active.average",
+#     "mem.granted.average",
+#     "mem.latency.average",
+#     "mem.swapin.average",
+#     "mem.swapinRate.average",
+#     "mem.swapout.average",
+#     "mem.swapoutRate.average",
+#     "mem.usage.average",
+#     "mem.vmmemctl.average",
+#     "net.bytesRx.average",
+#     "net.bytesTx.average",
+#     "net.droppedRx.summation",
+#     "net.droppedTx.summation",
+#     "net.usage.average",
+#     "power.power.average",
+#     "virtualDisk.numberReadAveraged.average",
+#     "virtualDisk.numberWriteAveraged.average",
+#     "virtualDisk.read.average",
+#     "virtualDisk.readOIO.latest",
+#     "virtualDisk.throughput.usage.average",
+#     "virtualDisk.totalReadLatency.average",
+#     "virtualDisk.totalWriteLatency.average",
+#     "virtualDisk.write.average",
+#     "virtualDisk.writeOIO.latest",
+#     "sys.uptime.latest",
+#   ]
+#   # vm_metric_exclude = [] ## Nothing is excluded by default
+#   # vm_instances = true ## true by default
+#
+#   ## Hosts
+#   ## Typical host metrics (if omitted or empty, all metrics are collected)
+#   host_metric_include = [
+#     "cpu.coreUtilization.average",
+#     "cpu.costop.summation",
+#     "cpu.demand.average",
+#     "cpu.idle.summation",
+#     "cpu.latency.average",
+#     "cpu.readiness.average",
+#     "cpu.ready.summation",
+#     "cpu.swapwait.summation",
+#     "cpu.usage.average",
+#     "cpu.usagemhz.average",
+#     "cpu.used.summation",
+#     "cpu.utilization.average",
+#     "cpu.wait.summation",
+#     "disk.deviceReadLatency.average",
+#     "disk.deviceWriteLatency.average",
+#     "disk.kernelReadLatency.average",
+#     "disk.kernelWriteLatency.average",
+#     "disk.numberReadAveraged.average",
+#     "disk.numberWriteAveraged.average",
+#     "disk.read.average",
+#     "disk.totalReadLatency.average",
+#     "disk.totalWriteLatency.average",
+#     "disk.write.average",
+#     "mem.active.average",
+#     "mem.latency.average",
+#     "mem.state.latest",
+#     "mem.swapin.average",
+#     "mem.swapinRate.average",
+#     "mem.swapout.average",
+#     "mem.swapoutRate.average",
+#     "mem.totalCapacity.average",
+#     "mem.usage.average",
+#     "mem.vmmemctl.average",
+#     "net.bytesRx.average",
+#     "net.bytesTx.average",
+#     "net.droppedRx.summation",
+#     "net.droppedTx.summation",
+#     "net.errorsRx.summation",
+#     "net.errorsTx.summation",
+#     "net.usage.average",
+#     "power.power.average",
+#     "storageAdapter.numberReadAveraged.average",
+#     "storageAdapter.numberWriteAveraged.average",
+#     "storageAdapter.read.average",
+#     "storageAdapter.write.average",
+#     "sys.uptime.latest",
+#   ]
+#   # host_metric_exclude = [] ## Nothing excluded by default
+#   # host_instances = true ## true by default
+#
+#   ## Clusters
+#   # cluster_metric_include = [] ## if omitted or empty, all metrics are collected
+#   # cluster_metric_exclude = [] ## Nothing excluded by default
+#   # cluster_instances = false ## false by default
+#
+#   ## Datastores
+#   # datastore_metric_include = [] ## if omitted or empty, all metrics are collected
+#   # datastore_metric_exclude = [] ## Nothing excluded by default
+#   # datastore_instances = false ## false by default for Datastores only
+#
+#   ## Datacenters
+#   datacenter_metric_include = [] ## if omitted or empty, all metrics are collected
+#   datacenter_metric_exclude = [ "*" ] ## Datacenters are not collected by default.
+#   # datacenter_instances = false ## false by default for Datastores only
+#
+#   ## Plugin Settings
+#   ## separator character to use for measurement and field names (default: "_")
+#   # separator = "_"
+#
+#   ## number of objects to retreive per query for realtime resources (vms and hosts)
+#   ## set to 64 for vCenter 5.5 and 6.0 (default: 256)
+#   # max_query_objects = 256
+#
+#   ## number of metrics to retreive per query for non-realtime resources (clusters and datastores)
+#   ## set to 64 for vCenter 5.5 and 6.0 (default: 256)
+#   # max_query_metrics = 256
+#
+#   ## number of go routines to use for collection and discovery of objects and metrics
+#   # collect_concurrency = 1
+#   # discover_concurrency = 1
+#
+#   ## whether or not to force discovery of new objects on initial gather call before collecting metrics
+#   ## when true for large environments this may cause errors for time elapsed while collecting metrics
+#   ## when false (default) the first collection cycle may result in no or limited metrics while objects are discovered
+#   # force_discover_on_init = false
+#
+#   ## the interval before (re)discovering objects subject to metrics collection (default: 300s)
+#   # object_discovery_interval = "300s"
+#
+#   ## timeout applies to any of the api request made to vcenter
+#   # timeout = "60s"
+#
+#   ## Optional SSL Config
+#   # ssl_ca = "/path/to/cafile"
+#   # ssl_cert = "/path/to/certfile"
+#   # ssl_key = "/path/to/keyfile"
+#   ## Use SSL but skip chain & host verification
+#   # insecure_skip_verify = false
+
+
+# # A Webhooks Event collector
+# [[inputs.webhooks]]
+#   ## Address and port to host Webhook listener on
+#   service_address = ":1619"
+#
+#   [inputs.webhooks.filestack]
+#     path = "/filestack"
+#
+#   [inputs.webhooks.github]
+#     path = "/github"
+#     # secret = ""
+#
+#   [inputs.webhooks.mandrill]
+#     path = "/mandrill"
+#
+#   [inputs.webhooks.rollbar]
+#     path = "/rollbar"
+#
+#   [inputs.webhooks.papertrail]
+#     path = "/papertrail"
+#
+#   [inputs.webhooks.particle]
+#     path = "/particle"
+
+
+# # This plugin implements the Zipkin http server to gather trace and timing data needed to troubleshoot latency problems in microservice architectures.
+# [[inputs.zipkin]]
+#   # path = "/api/v1/spans" # URL path for span data
+#   # port = 9411            # Port on which Telegraf listens
+
diff --git a/ACSmI/Telegraf_ConfigParser/resources/telegraf_bak.conf b/ACSmI/Telegraf_ConfigParser/resources/telegraf_bak.conf
deleted file mode 100644
index ae1a999e5926cebb32f9b184f412f8265d6cd4b4..0000000000000000000000000000000000000000
--- a/ACSmI/Telegraf_ConfigParser/resources/telegraf_bak.conf
+++ /dev/null
@@ -1,206 +0,0 @@
-##/****************************************************************
-##*Copyright (c) 2017 Tecnalia.
-##*Licensed under MIT License (the "License");
-##*Permission is hereby granted, free of charge, to any person obtaining a copy 
-##of this software and associated documentation files (the "Software"), to deal 
-##in the Software without restriction, including without limitation the rights 
-##to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
-##copies of the Software, and to permit persons to whom the Software is furnished 
-##to do so, subject to the following conditions:
-##*The above copyright notice and this permission notice shall be included in all 
-##copies or substantial portions of the Software.
-##*
-##*
-##*THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 
-##INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 
-##PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 
-##HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 
-##CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 
-##OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-##
-##*Contributors (in alphabetical order):
-##*Gorka Benguria                                 Tecnalia
-##*I�aki Etxaniz                                  Tecnalia
-##*Juncal Alonso                                  Tecnalia
-##*Leire Orue-Echevarria                          Tecnalia
-##*Maria Jose Lopez                               Tecnalia
-##*Marisa Escalante                               Tecnalia
-##*
-##*Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
-##*****************************************************************************/
-
-
-
-# Telegraf Configuration
-#
-# Telegraf is entirely plugin driven. All metrics are gathered from the
-# declared inputs, and sent to the declared outputs.
-#
-# Plugins must be declared in here to be active.
-# To deactivate a plugin, comment out the name and any variables.
-#
-# Use 'telegraf -config telegraf.conf -test' to see what metrics a config
-# file would generate.
-#
-# Environment variables can be used anywhere in this config file, simply prepend
-# them with $. For strings the variable must be within quotes (ie, "$STR_VAR"),
-# for numbers and booleans they should be plain (ie, $INT_VAR, $BOOL_VAR)
-
-
-# Global tags can be specified here in key="value" format.
-[global_tags]
-  # dc = "us-east-1"  # will tag all metrics with dc=us-east-1
-  # rack = "1a"
-  ## Environment variables can be used as tags, and throughout the config file
-  # user = "$USER"
-
-
-# Configuration for telegraf agent
-[agent]
-  ## Default data collection interval for all inputs
-  interval = "10s"
-  ## Rounds collection interval to 'interval'
-  ## ie, if interval="10s" then always collect on :00, :10, :20, etc.
-  round_interval = true
-  
-  ## Telegraf will send metrics to outputs in batches of at most
-  ## metric_batch_size metrics.
-  ## This controls the size of writes that Telegraf sends to output plugins.
-  metric_batch_size = 1000
-  
-  ## For failed writes, telegraf will cache metric_buffer_limit metrics for each
-  ## output, and will flush this buffer on a successful write. Oldest metrics
-  ## are dropped first when this buffer fills.
-  ## This buffer only fills when writes fail to output plugin(s).
-  metric_buffer_limit = 10000
-  
-  ## Collection jitter is used to jitter the collection by a random amount.
-  ## Each plugin will sleep for a random time within jitter before collecting.
-  ## This can be used to avoid many plugins querying things like sysfs at the
-  ## same time, which can have a measurable effect on the system.
-  collection_jitter = "0s"
-  
-  ## Default flushing interval for all outputs. You shouldn't set this below
-  ## interval. Maximum flush_interval will be flush_interval + flush_jitter
-  flush_interval = "10s"
-  ## Jitter the flush interval by a random amount. This is primarily to avoid
-  ## large write spikes for users running a large number of telegraf instances.
-  ## ie, a jitter of 5s and interval 10s means flushes will happen every 10-15s
-  flush_jitter = "0s"
-  
-  ## By default or when set to "0s", precision will be set to the same
-  ## timestamp order as the collection interval, with the maximum being 1s.
-  ##   ie, when interval = "10s", precision will be "1s"
-  ##       when interval = "250ms", precision will be "1ms"
-  ## Precision will NOT be used for service inputs. It is up to each individual
-  ## service input to set the timestamp at the appropriate precision.
-  ## Valid time units are "ns", "us" (or "�s"), "ms", "s".
-  precision = ""
-  
-  ## Logging configuration:
-  ## Run telegraf with debug log messages.
-  debug = false
-  ## Run telegraf in quiet mode (error log messages only).
-  quiet = false
-  ## Specify the log file name. The empty string means to log to stderr.
-  logfile = ""
-  
-  ## Override default hostname, if empty use os.Hostname()
-  hostname = ""
-  ## If set to true, do no set the "host" tag in the telegraf agent.
-  omit_hostname = false
-
-
-###############################################################################
-#                            OUTPUT PLUGINS                                   #
-###############################################################################
-
-# Configuration for influxdb server to send metrics to
-[[outputs.influxdb]]
-  ## The HTTP or UDP URL for your InfluxDB instance.  Each item should be
-  ## of the form:
-  ##   scheme "://" host [ ":" port]
-  ##
-  ## Multiple urls can be specified as part of the same cluster,
-  ## this means that only ONE of the urls will be written to each interval.
-  urls = ["http://localhost:8086"]  # required
-  ## The target database for metrics (telegraf will create it if not exists).
-  database = "decideh2020adapt"  # required
-  
-  ## Name of existing retention policy to write to.  Empty string writes to
-  ## the default retention policy.
-  retention_policy = ""
-  ## Write consistency (clusters only), can be: "any", "one", "quorum", "all"
-  write_consistency = "any"
-  
-  ## Write timeout (for the InfluxDB client), formatted as a string.
-  ## If not provided, will default to 5s. 0s means no timeout (not recommended).
-  timeout = "5s"
-  # username = "telegraf"
-  # password = "metricsmetricsmetricsmetrics"
-  ## Set the user agent for HTTP POSTs (can be useful for log differentiation)
-  # user_agent = "telegraf"
-  ## Set UDP payload size, defaults to InfluxDB UDP Client default (512 bytes)
-  # udp_payload = 512
-  
-  ## Optional SSL Config
-  # ssl_ca = "/etc/telegraf/ca.pem"
-  # ssl_cert = "/etc/telegraf/cert.pem"
-  # ssl_key = "/etc/telegraf/key.pem"
-  ## Use SSL but skip chain & host verification
-  # insecure_skip_verify = false
-
-
-###############################################################################
-#                            INPUT PLUGINS                                    #
-###############################################################################
-
-# HTTP/HTTPS request given an address a method and a timeout
-[[inputs.http_response]]
-  ## Server address (default http://localhost) Sock Shop Front End
-  address = "http://sockshop.integration.decideh2020.lan.esilab.org:8082/customers"
-  ## Set response_timeout (default 5 seconds)
-  response_timeout = "5s"
-  ## HTTP Request Method
-  method = "GET"
-  ## Whether to follow redirects from the server (defaults to false)
-  follow_redirects = true
-  ## HTTP Request Headers (all values must be strings)
-  # [inputs.http_response.headers]
-  #   Host = "github.com"
-  
-  ## Optional HTTP Request Body
-  # body = '''
-  # {'fake':'data'}
-  # '''
-  
-  ## Optional substring or regex match in body of the response
-  ## response_string_match = "\"service_status\": \"up\""
-  ## response_string_match = "ok"
-  ## response_string_match = "\".*_status\".?:.?\"up\""
-  
-  ## Optional SSL Config
-  # ssl_ca = "/etc/telegraf/ca.pem"
-  # ssl_cert = "/etc/telegraf/cert.pem"
-  # ssl_key = "/etc/telegraf/key.pem"
-  ## Use SSL but skip chain & host verification
-  # insecure_skip_verify = false
-
-
-# # Ping given url(s) and return statistics
-# [[inputs.ping]]
-#   ## NOTE: this plugin forks the ping command. You may need to set capabilities
-#   ## via setcap cap_net_raw+p /bin/ping
-#   #
-#   ## List of urls to ping
-#   urls = ["www.google.com"]  # required
-#   ## number of pings to send per collection (ping -c <COUNT>)
-#   count = 1
-#   ## interval, in s, at which to ping. 0 == default (ping -i <PING_INTERVAL>)
-#   ping_interval = 1.0
-#   ## per-ping timeout, in s. 0 == no timeout (ping -W <TIMEOUT>)
-#   timeout = 1.0
-#   ## interface to send ping from (ping -I <INTERFACE>)
-#   interface = ""
-
-
diff --git a/ACSmI/Telegraf_ConfigParser/resources/telegraf_original.conf b/ACSmI/Telegraf_ConfigParser/resources/telegraf_original.conf
deleted file mode 100644
index d750224d0940e361fc9dae5c3bcf16e5631d5014..0000000000000000000000000000000000000000
--- a/ACSmI/Telegraf_ConfigParser/resources/telegraf_original.conf
+++ /dev/null
@@ -1,2348 +0,0 @@
-##/****************************************************************
-##*Copyright (c) 2017 Tecnalia.
-##*Licensed under MIT License (the "License");
-##*Permission is hereby granted, free of charge, to any person obtaining a copy 
-##of this software and associated documentation files (the "Software"), to deal 
-##in the Software without restriction, including without limitation the rights 
-##to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
-##copies of the Software, and to permit persons to whom the Software is furnished 
-##to do so, subject to the following conditions:
-##*The above copyright notice and this permission notice shall be included in all 
-##copies or substantial portions of the Software.
-##*
-##*
-##*THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 
-##INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 
-##PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 
-##HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 
-##CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 
-##OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-##
-##*Contributors (in alphabetical order):
-##*Gorka Benguria                                 Tecnalia
-##*Iñaki Etxaniz                                  Tecnalia
-##*Juncal Alonso                                  Tecnalia
-##*Leire Orue-Echevarria                          Tecnalia
-##*Maria Jose Lopez                               Tecnalia
-##*Marisa Escalante                               Tecnalia
-##*
-##*Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
-##*****************************************************************************/
-
-
-
-# Telegraf Configuration
-#
-# Telegraf is entirely plugin driven. All metrics are gathered from the
-# declared inputs, and sent to the declared outputs.
-#
-# Plugins must be declared in here to be active.
-# To deactivate a plugin, comment out the name and any variables.
-#
-# Use 'telegraf -config telegraf.conf -test' to see what metrics a config
-# file would generate.
-#
-# Environment variables can be used anywhere in this config file, simply prepend
-# them with $. For strings the variable must be within quotes (ie, "$STR_VAR"),
-# for numbers and booleans they should be plain (ie, $INT_VAR, $BOOL_VAR)
-
-
-# Global tags can be specified here in key="value" format.
-[global_tags]
-  # dc = "us-east-1" # will tag all metrics with dc=us-east-1
-  # rack = "1a"
-  ## Environment variables can be used as tags, and throughout the config file
-  # user = "$USER"
-
-
-# Configuration for telegraf agent
-[agent]
-  ## Default data collection interval for all inputs
-  interval = "10s"
-  ## Rounds collection interval to 'interval'
-  ## ie, if interval="10s" then always collect on :00, :10, :20, etc.
-  round_interval = true
-
-  ## Telegraf will send metrics to outputs in batches of at most
-  ## metric_batch_size metrics.
-  ## This controls the size of writes that Telegraf sends to output plugins.
-  metric_batch_size = 1000
-
-  ## For failed writes, telegraf will cache metric_buffer_limit metrics for each
-  ## output, and will flush this buffer on a successful write. Oldest metrics
-  ## are dropped first when this buffer fills.
-  ## This buffer only fills when writes fail to output plugin(s).
-  metric_buffer_limit = 10000
-
-  ## Collection jitter is used to jitter the collection by a random amount.
-  ## Each plugin will sleep for a random time within jitter before collecting.
-  ## This can be used to avoid many plugins querying things like sysfs at the
-  ## same time, which can have a measurable effect on the system.
-  collection_jitter = "0s"
-
-  ## Default flushing interval for all outputs. You shouldn't set this below
-  ## interval. Maximum flush_interval will be flush_interval + flush_jitter
-  flush_interval = "10s"
-  ## Jitter the flush interval by a random amount. This is primarily to avoid
-  ## large write spikes for users running a large number of telegraf instances.
-  ## ie, a jitter of 5s and interval 10s means flushes will happen every 10-15s
-  flush_jitter = "0s"
-
-  ## By default or when set to "0s", precision will be set to the same
-  ## timestamp order as the collection interval, with the maximum being 1s.
-  ##   ie, when interval = "10s", precision will be "1s"
-  ##       when interval = "250ms", precision will be "1ms"
-  ## Precision will NOT be used for service inputs. It is up to each individual
-  ## service input to set the timestamp at the appropriate precision.
-  ## Valid time units are "ns", "us" (or "µs"), "ms", "s".
-  precision = ""
-
-  ## Logging configuration:
-  ## Run telegraf with debug log messages.
-  debug = false
-  ## Run telegraf in quiet mode (error log messages only).
-  quiet = false
-  ## Specify the log file name. The empty string means to log to stderr.
-  logfile = ""
-
-  ## Override default hostname, if empty use os.Hostname()
-  hostname = ""
-  ## If set to true, do no set the "host" tag in the telegraf agent.
-  omit_hostname = false
-
-
-###############################################################################
-#                            OUTPUT PLUGINS                                   #
-###############################################################################
-
-# Configuration for influxdb server to send metrics to
-[[outputs.influxdb]]
-  ## The HTTP or UDP URL for your InfluxDB instance.  Each item should be
-  ## of the form:
-  ##   scheme "://" host [ ":" port]
-  ##
-  ## Multiple urls can be specified as part of the same cluster,
-  ## this means that only ONE of the urls will be written to each interval.
-  urls = ["http://localhost:8086"] # required
-  ## The target database for metrics (telegraf will create it if not exists).
-  database = "decideh2020adapt" # required
-
-  ## Name of existing retention policy to write to.  Empty string writes to
-  ## the default retention policy.
-  retention_policy = ""
-  ## Write consistency (clusters only), can be: "any", "one", "quorum", "all"
-  write_consistency = "any"
-
-  ## Write timeout (for the InfluxDB client), formatted as a string.
-  ## If not provided, will default to 5s. 0s means no timeout (not recommended).
-  timeout = "5s"
-  # username = "telegraf"
-  # password = "metricsmetricsmetricsmetrics"
-  ## Set the user agent for HTTP POSTs (can be useful for log differentiation)
-  # user_agent = "telegraf"
-  ## Set UDP payload size, defaults to InfluxDB UDP Client default (512 bytes)
-  # udp_payload = 512
-
-  ## Optional SSL Config
-  # ssl_ca = "/etc/telegraf/ca.pem"
-  # ssl_cert = "/etc/telegraf/cert.pem"
-  # ssl_key = "/etc/telegraf/key.pem"
-  ## Use SSL but skip chain & host verification
-  # insecure_skip_verify = false
-
-
-# # Configuration for Amon Server to send metrics to.
-# [[outputs.amon]]
-#   ## Amon Server Key
-#   server_key = "my-server-key" # required.
-#
-#   ## Amon Instance URL
-#   amon_instance = "https://youramoninstance" # required
-#
-#   ## Connection timeout.
-#   # timeout = "5s"
-
-
-# # Configuration for the AMQP server to send metrics to
-# [[outputs.amqp]]
-#   ## AMQP url
-#   url = "amqp://localhost:5672/influxdb"
-#   ## AMQP exchange
-#   exchange = "telegraf"
-#   ## Auth method. PLAIN and EXTERNAL are supported
-#   ## Using EXTERNAL requires enabling the rabbitmq_auth_mechanism_ssl plugin as
-#   ## described here: https://www.rabbitmq.com/plugins.html
-#   # auth_method = "PLAIN"
-#   ## Telegraf tag to use as a routing key
-#   ##  ie, if this tag exists, its value will be used as the routing key
-#   routing_tag = "host"
-#
-#   ## InfluxDB retention policy
-#   # retention_policy = "default"
-#   ## InfluxDB database
-#   # database = "telegraf"
-#
-#   ## Write timeout, formatted as a string.  If not provided, will default
-#   ## to 5s. 0s means no timeout (not recommended).
-#   # timeout = "5s"
-#
-#   ## Optional SSL Config
-#   # ssl_ca = "/etc/telegraf/ca.pem"
-#   # ssl_cert = "/etc/telegraf/cert.pem"
-#   # ssl_key = "/etc/telegraf/key.pem"
-#   ## Use SSL but skip chain & host verification
-#   # insecure_skip_verify = false
-#
-#   ## Data format to output.
-#   ## Each data format has its own unique set of configuration options, read
-#   ## more about them here:
-#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md
-#   data_format = "influx"
-
-
-# # Configuration for AWS CloudWatch output.
-# [[outputs.cloudwatch]]
-#   ## Amazon REGION
-#   region = "us-east-1"
-#
-#   ## Amazon Credentials
-#   ## Credentials are loaded in the following order
-#   ## 1) Assumed credentials via STS if role_arn is specified
-#   ## 2) explicit credentials from 'access_key' and 'secret_key'
-#   ## 3) shared profile from 'profile'
-#   ## 4) environment variables
-#   ## 5) shared credentials file
-#   ## 6) EC2 Instance Profile
-#   # access_key = ""
-#   # secret_key = ""
-#   # token = ""
-#   # role_arn = ""
-#   # profile = ""
-#   # shared_credential_file = ""
-#
-#   ## Namespace for the CloudWatch MetricDatums
-#   namespace = "InfluxData/Telegraf"
-
-
-# # Configuration for DataDog API to send metrics to.
-# [[outputs.datadog]]
-#   ## Datadog API key
-#   apikey = "my-secret-key" # required.
-#
-#   ## Connection timeout.
-#   # timeout = "5s"
-
-
-# # Send metrics to nowhere at all
-# [[outputs.discard]]
-#   # no configuration
-
-
-# # Configuration for Elasticsearch to send metrics to.
-# [[outputs.elasticsearch]]
-#   ## The full HTTP endpoint URL for your Elasticsearch instance
-#   ## Multiple urls can be specified as part of the same cluster,
-#   ## this means that only ONE of the urls will be written to each interval.
-#   urls = [ "http://node1.es.example.com:9200" ] # required.
-#   ## Elasticsearch client timeout, defaults to "5s" if not set.
-#   timeout = "5s"
-#   ## Set to true to ask Elasticsearch a list of all cluster nodes,
-#   ## thus it is not necessary to list all nodes in the urls config option.
-#   enable_sniffer = false
-#   ## Set the interval to check if the Elasticsearch nodes are available
-#   ## Setting to "0s" will disable the health check (not recommended in production)
-#   health_check_interval = "10s"
-#   ## HTTP basic authentication details (eg. when using Shield)
-#   # username = "telegraf"
-#   # password = "mypassword"
-#
-#   ## Index Config
-#   ## The target index for metrics (Elasticsearch will create if it not exists).
-#   ## You can use the date specifiers below to create indexes per time frame.
-#   ## The metric timestamp will be used to decide the destination index name
-#   # %Y - year (2016)
-#   # %y - last two digits of year (00..99)
-#   # %m - month (01..12)
-#   # %d - day of month (e.g., 01)
-#   # %H - hour (00..23)
-#   index_name = "telegraf-%Y.%m.%d" # required.
-#
-#   ## Template Config
-#   ## Set to true if you want telegraf to manage its index template.
-#   ## If enabled it will create a recommended index template for telegraf indexes
-#   manage_template = true
-#   ## The template name used for telegraf indexes
-#   template_name = "telegraf"
-#   ## Set to true if you want telegraf to overwrite an existing template
-#   overwrite_template = false
-
-
-# # Send telegraf metrics to file(s)
-# [[outputs.file]]
-#   ## Files to write to, "stdout" is a specially handled file.
-#   files = ["stdout", "/tmp/metrics.out"]
-#
-#   ## Data format to output.
-#   ## Each data format has its own unique set of configuration options, read
-#   ## more about them here:
-#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md
-#   data_format = "influx"
-
-
-# # Configuration for Graphite server to send metrics to
-# [[outputs.graphite]]
-#   ## TCP endpoint for your graphite instance.
-#   ## If multiple endpoints are configured, output will be load balanced.
-#   ## Only one of the endpoints will be written to with each iteration.
-#   servers = ["localhost:2003"]
-#   ## Prefix metrics name
-#   prefix = ""
-#   ## Graphite output template
-#   ## see https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md
-#   template = "host.tags.measurement.field"
-#   ## timeout in seconds for the write connection to graphite
-#   timeout = 2
-
-
-# # Send telegraf metrics to graylog(s)
-# [[outputs.graylog]]
-#   ## UDP endpoint for your graylog instance.
-#   servers = ["127.0.0.1:12201", "192.168.1.1:12201"]
-
-
-# # Configuration for sending metrics to an Instrumental project
-# [[outputs.instrumental]]
-#   ## Project API Token (required)
-#   api_token = "API Token" # required
-#   ## Prefix the metrics with a given name
-#   prefix = ""
-#   ## Stats output template (Graphite formatting)
-#   ## see https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md#graphite
-#   template = "host.tags.measurement.field"
-#   ## Timeout in seconds to connect
-#   timeout = "2s"
-#   ## Display Communcation to Instrumental
-#   debug = false
-
-
-# # Configuration for the Kafka server to send metrics to
-# [[outputs.kafka]]
-#   ## URLs of kafka brokers
-#   brokers = ["localhost:9092"]
-#   ## Kafka topic for producer messages
-#   topic = "telegraf"
-#   ## Telegraf tag to use as a routing key
-#   ##  ie, if this tag exists, its value will be used as the routing key
-#   routing_tag = "host"
-#
-#   ## CompressionCodec represents the various compression codecs recognized by
-#   ## Kafka in messages.
-#   ##  0 : No compression
-#   ##  1 : Gzip compression
-#   ##  2 : Snappy compression
-#   compression_codec = 0
-#
-#   ##  RequiredAcks is used in Produce Requests to tell the broker how many
-#   ##  replica acknowledgements it must see before responding
-#   ##   0 : the producer never waits for an acknowledgement from the broker.
-#   ##       This option provides the lowest latency but the weakest durability
-#   ##       guarantees (some data will be lost when a server fails).
-#   ##   1 : the producer gets an acknowledgement after the leader replica has
-#   ##       received the data. This option provides better durability as the
-#   ##       client waits until the server acknowledges the request as successful
-#   ##       (only messages that were written to the now-dead leader but not yet
-#   ##       replicated will be lost).
-#   ##   -1: the producer gets an acknowledgement after all in-sync replicas have
-#   ##       received the data. This option provides the best durability, we
-#   ##       guarantee that no messages will be lost as long as at least one in
-#   ##       sync replica remains.
-#   required_acks = -1
-#
-#   ##  The total number of times to retry sending a message
-#   max_retry = 3
-#
-#   ## Optional SSL Config
-#   # ssl_ca = "/etc/telegraf/ca.pem"
-#   # ssl_cert = "/etc/telegraf/cert.pem"
-#   # ssl_key = "/etc/telegraf/key.pem"
-#   ## Use SSL but skip chain & host verification
-#   # insecure_skip_verify = false
-#
-#   ## Optional SASL Config
-#   # sasl_username = "kafka"
-#   # sasl_password = "secret"
-#
-#   ## Data format to output.
-#   ## Each data format has its own unique set of configuration options, read
-#   ## more about them here:
-#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md
-#   data_format = "influx"
-
-
-# # Configuration for the AWS Kinesis output.
-# [[outputs.kinesis]]
-#   ## Amazon REGION of kinesis endpoint.
-#   region = "ap-southeast-2"
-#
-#   ## Amazon Credentials
-#   ## Credentials are loaded in the following order
-#   ## 1) Assumed credentials via STS if role_arn is specified
-#   ## 2) explicit credentials from 'access_key' and 'secret_key'
-#   ## 3) shared profile from 'profile'
-#   ## 4) environment variables
-#   ## 5) shared credentials file
-#   ## 6) EC2 Instance Profile
-#   # access_key = ""
-#   # secret_key = ""
-#   # token = ""
-#   # role_arn = ""
-#   # profile = ""
-#   # shared_credential_file = ""
-#
-#   ## Kinesis StreamName must exist prior to starting telegraf.
-#   streamname = "StreamName"
-#   ## PartitionKey as used for sharding data.
-#   partitionkey = "PartitionKey"
-#   ## If set the paritionKey will be a random UUID on every put.
-#   ## This allows for scaling across multiple shards in a stream.
-#   ## This will cause issues with ordering.
-#   use_random_partitionkey = false
-#
-#   ## Data format to output.
-#   ## Each data format has its own unique set of configuration options, read
-#   ## more about them here:
-#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md
-#   data_format = "influx"
-#
-#   ## debug will show upstream aws messages.
-#   debug = false
-
-
-# # Configuration for Librato API to send metrics to.
-# [[outputs.librato]]
-#   ## Librator API Docs
-#   ## http://dev.librato.com/v1/metrics-authentication
-#   ## Librato API user
-#   api_user = "telegraf@influxdb.com" # required.
-#   ## Librato API token
-#   api_token = "my-secret-token" # required.
-#   ## Debug
-#   # debug = false
-#   ## Connection timeout.
-#   # timeout = "5s"
-#   ## Output source Template (same as graphite buckets)
-#   ## see https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md#graphite
-#   ## This template is used in librato's source (not metric's name)
-#   template = "host"
-
-
-# # Configuration for MQTT server to send metrics to
-# [[outputs.mqtt]]
-#   servers = ["localhost:1883"] # required.
-#
-#   ## MQTT outputs send metrics to this topic format
-#   ##    "<topic_prefix>/<hostname>/<pluginname>/"
-#   ##   ex: prefix/web01.example.com/mem
-#   topic_prefix = "telegraf"
-#
-#   ## username and password to connect MQTT server.
-#   # username = "telegraf"
-#   # password = "metricsmetricsmetricsmetrics"
-#
-#   ## client ID, if not set a random ID is generated
-#   # client_id = ""
-#
-#   ## Optional SSL Config
-#   # ssl_ca = "/etc/telegraf/ca.pem"
-#   # ssl_cert = "/etc/telegraf/cert.pem"
-#   # ssl_key = "/etc/telegraf/key.pem"
-#   ## Use SSL but skip chain & host verification
-#   # insecure_skip_verify = false
-#
-#   ## Data format to output.
-#   ## Each data format has its own unique set of configuration options, read
-#   ## more about them here:
-#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md
-#   data_format = "influx"
-
-
-# # Send telegraf measurements to NATS
-# [[outputs.nats]]
-#   ## URLs of NATS servers
-#   servers = ["nats://localhost:4222"]
-#   ## Optional credentials
-#   # username = ""
-#   # password = ""
-#   ## NATS subject for producer messages
-#   subject = "telegraf"
-#
-#   ## Optional SSL Config
-#   # ssl_ca = "/etc/telegraf/ca.pem"
-#   # ssl_cert = "/etc/telegraf/cert.pem"
-#   # ssl_key = "/etc/telegraf/key.pem"
-#   ## Use SSL but skip chain & host verification
-#   # insecure_skip_verify = false
-#
-#   ## Data format to output.
-#   ## Each data format has its own unique set of configuration options, read
-#   ## more about them here:
-#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md
-#   data_format = "influx"
-
-
-# # Send telegraf measurements to NSQD
-# [[outputs.nsq]]
-#   ## Location of nsqd instance listening on TCP
-#   server = "localhost:4150"
-#   ## NSQ topic for producer messages
-#   topic = "telegraf"
-#
-#   ## Data format to output.
-#   ## Each data format has its own unique set of configuration options, read
-#   ## more about them here:
-#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md
-#   data_format = "influx"
-
-
-# # Configuration for OpenTSDB server to send metrics to
-# [[outputs.opentsdb]]
-#   ## prefix for metrics keys
-#   prefix = "my.specific.prefix."
-#
-#   ## DNS name of the OpenTSDB server
-#   ## Using "opentsdb.example.com" or "tcp://opentsdb.example.com" will use the
-#   ## telnet API. "http://opentsdb.example.com" will use the Http API.
-#   host = "opentsdb.example.com"
-#
-#   ## Port of the OpenTSDB server
-#   port = 4242
-#
-#   ## Number of data points to send to OpenTSDB in Http requests.
-#   ## Not used with telnet API.
-#   httpBatchSize = 50
-#
-#   ## Debug true - Prints OpenTSDB communication
-#   debug = false
-
-
-# # Configuration for the Prometheus client to spawn
-# [[outputs.prometheus_client]]
-#   ## Address to listen on
-#   # listen = ":9126"
-#
-#   ## Interval to expire metrics and not deliver to prometheus, 0 == no expiration
-#   # expiration_interval = "60s"
-
-
-# # Configuration for the Riemann server to send metrics to
-# [[outputs.riemann]]
-#   ## The full TCP or UDP URL of the Riemann server
-#   url = "tcp://localhost:5555"
-#
-#   ## Riemann event TTL, floating-point time in seconds.
-#   ## Defines how long that an event is considered valid for in Riemann
-#   # ttl = 30.0
-#
-#   ## Separator to use between measurement and field name in Riemann service name
-#   ## This does not have any effect if 'measurement_as_attribute' is set to 'true'
-#   separator = "/"
-#
-#   ## Set measurement name as Riemann attribute 'measurement', instead of prepending it to the Riemann service name
-#   # measurement_as_attribute = false
-#
-#   ## Send string metrics as Riemann event states.
-#   ## Unless enabled all string metrics will be ignored
-#   # string_as_state = false
-#
-#   ## A list of tag keys whose values get sent as Riemann tags.
-#   ## If empty, all Telegraf tag values will be sent as tags
-#   # tag_keys = ["telegraf","custom_tag"]
-#
-#   ## Additional Riemann tags to send.
-#   # tags = ["telegraf-output"]
-#
-#   ## Description for Riemann event
-#   # description_text = "metrics collected from telegraf"
-#
-#   ## Riemann client write timeout, defaults to "5s" if not set.
-#   # timeout = "5s"
-
-
-# # Configuration for the Riemann server to send metrics to
-# [[outputs.riemann_legacy]]
-#   ## URL of server
-#   url = "localhost:5555"
-#   ## transport protocol to use either tcp or udp
-#   transport = "tcp"
-#   ## separator to use between input name and field name in Riemann service name
-#   separator = " "
-
-
-# # Generic socket writer capable of handling multiple socket types.
-# [[outputs.socket_writer]]
-#   ## URL to connect to
-#   # address = "tcp://127.0.0.1:8094"
-#   # address = "tcp://example.com:http"
-#   # address = "tcp4://127.0.0.1:8094"
-#   # address = "tcp6://127.0.0.1:8094"
-#   # address = "tcp6://[2001:db8::1]:8094"
-#   # address = "udp://127.0.0.1:8094"
-#   # address = "udp4://127.0.0.1:8094"
-#   # address = "udp6://127.0.0.1:8094"
-#   # address = "unix:///tmp/telegraf.sock"
-#   # address = "unixgram:///tmp/telegraf.sock"
-#
-#   ## Period between keep alive probes.
-#   ## Only applies to TCP sockets.
-#   ## 0 disables keep alive probes.
-#   ## Defaults to the OS configuration.
-#   # keep_alive_period = "5m"
-#
-#   ## Data format to generate.
-#   ## Each data format has its own unique set of configuration options, read
-#   ## more about them here:
-#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md
-#   # data_format = "influx"
-
-
-###############################################################################
-#                            PROCESSOR PLUGINS                                #
-###############################################################################
-
-# # Print all metrics that pass through this filter.
-# [[processors.printer]]
-
-
-###############################################################################
-#                            AGGREGATOR PLUGINS                               #
-###############################################################################
-
-# # Keep the aggregate min/max of each metric passing through.
-# [[aggregators.minmax]]
-#   ## General Aggregator Arguments:
-#   ## The period on which to flush & clear the aggregator.
-#   period = "30s"
-#   ## If true, the original metric will be dropped by the
-#   ## aggregator and will not get sent to the output plugins.
-#   drop_original = false
-
-
-###############################################################################
-#                            INPUT PLUGINS                                    #
-###############################################################################
-
-# Read metrics about cpu usage
-[[inputs.cpu]]
-  ## Whether to report per-cpu stats or not
-  percpu = true
-  ## Whether to report total system cpu stats or not
-  totalcpu = true
-  ## If true, collect raw CPU time metrics.
-  collect_cpu_time = false
-
-
-# Read metrics about disk usage by mount point
-[[inputs.disk]]
-  ## By default, telegraf gather stats for all mountpoints.
-  ## Setting mountpoints will restrict the stats to the specified mountpoints.
-  # mount_points = ["/"]
-
-  ## Ignore some mountpoints by filesystem type. For example (dev)tmpfs (usually
-  ## present on /run, /var/run, /dev/shm or /dev).
-  ignore_fs = ["tmpfs", "devtmpfs", "devfs"]
-
-
-# Read metrics about disk IO by device
-[[inputs.diskio]]
-  ## By default, telegraf will gather stats for all devices including
-  ## disk partitions.
-  ## Setting devices will restrict the stats to the specified devices.
-  # devices = ["sda", "sdb"]
-  ## Uncomment the following line if you need disk serial numbers.
-  # skip_serial_number = false
-
-  ## On systems which support it, device metadata can be added in the form of
-  ## tags.
-  ## Currently only Linux is supported via udev properties. You can view
-  ## available properties for a device by running:
-  ## 'udevadm info -q property -n /dev/sda'
-  # device_tags = ["ID_FS_TYPE", "ID_FS_USAGE"]
-
-  ## Using the same metadata source as device_tags, you can also customize the
-  ## name of the device via templates.
-  ## The 'name_templates' parameter is a list of templates to try and apply to
-  ## the device. The template may contain variables in the form of '$PROPERTY' or
-  ## '${PROPERTY}'. The first template which does not contain any variables not
-  ## present for the device is used as the device name tag.
-  ## The typical use case is for LVM volumes, to get the VG/LV name instead of
-  ## the near-meaningless DM-0 name.
-  # name_templates = ["$ID_FS_LABEL","$DM_VG_NAME/$DM_LV_NAME"]
-
-
-# Get kernel statistics from /proc/stat
-[[inputs.kernel]]
-  # no configuration
-
-
-# Read metrics about memory usage
-[[inputs.mem]]
-  # no configuration
-
-
-# Get the number of processes and group them by status
-[[inputs.processes]]
-  # no configuration
-
-
-# Read metrics about swap memory usage
-[[inputs.swap]]
-  # no configuration
-
-
-# Read metrics about system load & uptime
-[[inputs.system]]
-  # no configuration
-
-
-# # Read stats from aerospike server(s)
-# [[inputs.aerospike]]
-#   ## Aerospike servers to connect to (with port)
-#   ## This plugin will query all namespaces the aerospike
-#   ## server has configured and get stats for them.
-#   servers = ["localhost:3000"]
-
-
-# # Read Apache status information (mod_status)
-# [[inputs.apache]]
-#   ## An array of Apache status URI to gather stats.
-#   ## Default is "http://localhost/server-status?auto".
-#   urls = ["http://localhost/server-status?auto"]
-#   ## user credentials for basic HTTP authentication
-#   username = "myuser"
-#   password = "mypassword"
-#
-#   ## Timeout to the complete conection and reponse time in seconds
-#   response_timeout = "25s" ## default to 5 seconds
-#
-#   ## Optional SSL Config
-#   # ssl_ca = "/etc/telegraf/ca.pem"
-#   # ssl_cert = "/etc/telegraf/cert.pem"
-#   # ssl_key = "/etc/telegraf/key.pem"
-#   ## Use SSL but skip chain & host verification
-#   # insecure_skip_verify = false
-
-
-# # Read metrics of bcache from stats_total and dirty_data
-# [[inputs.bcache]]
-#   ## Bcache sets path
-#   ## If not specified, then default is:
-#   bcachePath = "/sys/fs/bcache"
-#
-#   ## By default, telegraf gather stats for all bcache devices
-#   ## Setting devices will restrict the stats to the specified
-#   ## bcache devices.
-#   bcacheDevs = ["bcache0"]
-
-
-# # Read Cassandra metrics through Jolokia
-# [[inputs.cassandra]]
-#   # This is the context root used to compose the jolokia url
-#   context = "/jolokia/read"
-#   ## List of cassandra servers exposing jolokia read service
-#   servers = ["myuser:mypassword@10.10.10.1:8778","10.10.10.2:8778",":8778"]
-#   ## List of metrics collected on above servers
-#   ## Each metric consists of a jmx path.
-#   ## This will collect all heap memory usage metrics from the jvm and
-#   ## ReadLatency metrics for all keyspaces and tables.
-#   ## "type=Table" in the query works with Cassandra3.0. Older versions might
-#   ## need to use "type=ColumnFamily"
-#   metrics = ["/java.lang:type=Memory/HeapMemoryUsage", "/org.apache.cassandra.metrics:type=Table,keyspace=*,scope=*,name=ReadLatency"]
-
-
-# # Collects performance metrics from the MON and OSD nodes in a Ceph storage cluster.
-# [[inputs.ceph]]
-#   ## This is the recommended interval to poll.  Too frequent and you will lose
-#   ## data points due to timeouts during rebalancing and recovery
-#   interval = '1m'
-#
-#   ## All configuration values are optional, defaults are shown below
-#
-#   ## location of ceph binary
-#   ceph_binary = "/usr/bin/ceph"
-#
-#   ## directory in which to look for socket files
-#   socket_dir = "/var/run/ceph"
-#
-#   ## prefix of MON and OSD socket files, used to determine socket type
-#   mon_prefix = "ceph-mon"
-#   osd_prefix = "ceph-osd"
-#
-#   ## suffix used to identify socket files
-#   socket_suffix = "asok"
-#
-#   ## Ceph user to authenticate as
-#   ceph_user = "client.admin"
-#
-#   ## Ceph configuration to use to locate the cluster
-#   ceph_config = "/etc/ceph/ceph.conf"
-#
-#   ## Whether to gather statistics via the admin socket
-#   gather_admin_socket_stats = true
-#
-#   ## Whether to gather statistics via ceph commands
-#   gather_cluster_stats = false
-
-
-# # Read specific statistics per cgroup
-# [[inputs.cgroup]]
-#   ## Directories in which to look for files, globs are supported.
-#   ## Consider restricting paths to the set of cgroups you really
-#   ## want to monitor if you have a large number of cgroups, to avoid
-#   ## any cardinality issues.
-#   # paths = ["/cgroup/memory", "/cgroup/memory/child1", "/cgroup/memory/child2/*"]
-#   ## cgroup stat fields, as file names, globs are supported.
-#   ## these file names are appended to each path from above.
-#   # files = ["memory.*usage*", "memory.limit_in_bytes"]
-
-
-# # Get standard chrony metrics, requires chronyc executable.
-# [[inputs.chrony]]
-#   ## If true, chronyc tries to perform a DNS lookup for the time server.
-#   # dns_lookup = false
-
-
-# # Pull Metric Statistics from Amazon CloudWatch
-# [[inputs.cloudwatch]]
-#   ## Amazon Region
-#   region = "us-east-1"
-#
-#   ## Amazon Credentials
-#   ## Credentials are loaded in the following order
-#   ## 1) Assumed credentials via STS if role_arn is specified
-#   ## 2) explicit credentials from 'access_key' and 'secret_key'
-#   ## 3) shared profile from 'profile'
-#   ## 4) environment variables
-#   ## 5) shared credentials file
-#   ## 6) EC2 Instance Profile
-#   # access_key = ""
-#   # secret_key = ""
-#   # token = ""
-#   # role_arn = ""
-#   # profile = ""
-#   # shared_credential_file = ""
-#
-#   # The minimum period for Cloudwatch metrics is 1 minute (60s). However not all
-#   # metrics are made available to the 1 minute period. Some are collected at
-#   # 3 minute and 5 minutes intervals. See https://aws.amazon.com/cloudwatch/faqs/#monitoring.
-#   # Note that if a period is configured that is smaller than the minimum for a
-#   # particular metric, that metric will not be returned by the Cloudwatch API
-#   # and will not be collected by Telegraf.
-#   #
-#   ## Requested CloudWatch aggregation Period (required - must be a multiple of 60s)
-#   period = "5m"
-#
-#   ## Collection Delay (required - must account for metrics availability via CloudWatch API)
-#   delay = "5m"
-#
-#   ## Recomended: use metric 'interval' that is a multiple of 'period' to avoid
-#   ## gaps or overlap in pulled data
-#   interval = "5m"
-#
-#   ## Configure the TTL for the internal cache of metrics.
-#   ## Defaults to 1 hr if not specified
-#   # cache_ttl = "10m"
-#
-#   ## Metric Statistic Namespace (required)
-#   namespace = "AWS/ELB"
-#
-#   ## Maximum requests per second. Note that the global default AWS rate limit is
-#   ## 400 reqs/sec, so if you define multiple namespaces, these should add up to a
-#   ## maximum of 400. Optional - default value is 200.
-#   ## See http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_limits.html
-#   ratelimit = 200
-#
-#   ## Metrics to Pull (optional)
-#   ## Defaults to all Metrics in Namespace if nothing is provided
-#   ## Refreshes Namespace available metrics every 1h
-#   # [[inputs.cloudwatch.metrics]]
-#   #   names = ["Latency", "RequestCount"]
-#   #
-#   #   ## Dimension filters for Metric (optional)
-#   #   [[inputs.cloudwatch.metrics.dimensions]]
-#   #     name = "LoadBalancerName"
-#   #     value = "p-example"
-
-
-# # Collects conntrack stats from the configured directories and files.
-# [[inputs.conntrack]]
-#   ## The following defaults would work with multiple versions of conntrack.
-#   ## Note the nf_ and ip_ filename prefixes are mutually exclusive across
-#   ## kernel versions, as are the directory locations.
-#
-#   ## Superset of filenames to look for within the conntrack dirs.
-#   ## Missing files will be ignored.
-#   files = ["ip_conntrack_count","ip_conntrack_max", "nf_conntrack_count","nf_conntrack_max"]
-#
-#   ## Directories to search within for the conntrack files above.
-#   ## Missing directrories will be ignored.
-#   dirs = ["/proc/sys/net/ipv4/netfilter","/proc/sys/net/netfilter"]
-
-
-# # Gather health check statuses from services registered in Consul
-# [[inputs.consul]]
-#   ## Most of these values defaults to the one configured on a Consul's agent level.
-#   ## Optional Consul server address (default: "localhost")
-#   # address = "localhost"
-#   ## Optional URI scheme for the Consul server (default: "http")
-#   # scheme = "http"
-#   ## Optional ACL token used in every request (default: "")
-#   # token = ""
-#   ## Optional username used for request HTTP Basic Authentication (default: "")
-#   # username = ""
-#   ## Optional password used for HTTP Basic Authentication (default: "")
-#   # password = ""
-#   ## Optional data centre to query the health checks from (default: "")
-#   # datacentre = ""
-
-
-# # Read metrics from one or many couchbase clusters
-# [[inputs.couchbase]]
-#   ## specify servers via a url matching:
-#   ##  [protocol://][:password]@address[:port]
-#   ##  e.g.
-#   ##    http://couchbase-0.example.com/
-#   ##    http://admin:secret@couchbase-0.example.com:8091/
-#   ##
-#   ## If no servers are specified, then localhost is used as the host.
-#   ## If no protocol is specifed, HTTP is used.
-#   ## If no port is specified, 8091 is used.
-#   servers = ["http://localhost:8091"]
-
-
-# # Read CouchDB Stats from one or more servers
-# [[inputs.couchdb]]
-#   ## Works with CouchDB stats endpoints out of the box
-#   ## Multiple HOSTs from which to read CouchDB stats:
-#   hosts = ["http://localhost:8086/_stats"]
-
-
-# # Read metrics from one or many disque servers
-# [[inputs.disque]]
-#   ## An array of URI to gather stats about. Specify an ip or hostname
-#   ## with optional port and password.
-#   ## ie disque://localhost, disque://10.10.3.33:18832, 10.0.0.1:10000, etc.
-#   ## If no servers are specified, then localhost is used as the host.
-#   servers = ["localhost"]
-
-
-# # Provide a native collection for dmsetup based statistics for dm-cache
-# [[inputs.dmcache]]
-#   ## Whether to report per-device stats or not
-#   per_device = true
-
-
-# # Query given DNS server and gives statistics
-# [[inputs.dns_query]]
-#   ## servers to query
-#   servers = ["8.8.8.8"] # required
-#
-#   ## Domains or subdomains to query. "."(root) is default
-#   domains = ["."] # optional
-#
-#   ## Query record type. Default is "A"
-#   ## Posible values: A, AAAA, CNAME, MX, NS, PTR, TXT, SOA, SPF, SRV.
-#   record_type = "A" # optional
-#
-#   ## Dns server port. 53 is default
-#   port = 53 # optional
-#
-#   ## Query timeout in seconds. Default is 2 seconds
-#   timeout = 2 # optional
-
-
-# Read metrics about docker containers
-[[inputs.docker]]
-  ## Docker Endpoint
-  ##   To use TCP, set endpoint="tcp://[ip]:[port]"
-  ##   To use environment variables (ie, docker-machine), set endpoint="ENV"
-  endpoint = "unix:///var/run/docker.sock"
-  ## Only collect metrics for these containers, collect all if empty
-  container_names = []
-  ## Timeout for docker list, info, and stats commands
-  timeout = "5s"
-
-  ## Whether to report for each container per-device blkio (8:0, 8:1...) and
-  ## network (eth0, eth1, ...) stats or not
-  perdevice = true
-  ## Whether to report for each container total blkio and network stats or not
-  total = false
-
-  ## docker labels to include and exclude as tags.  Globs accepted.
-  ## Note that an empty array for both will include all labels as tags
-  docker_label_include = []
-  docker_label_exclude = []
-
-
-# # Read statistics from one or many dovecot servers
-# [[inputs.dovecot]]
-#   ## specify dovecot servers via an address:port list
-#   ##  e.g.
-#   ##    localhost:24242
-#   ##
-#   ## If no servers are specified, then localhost is used as the host.
-#   servers = ["localhost:24242"]
-#   ## Type is one of "user", "domain", "ip", or "global"
-#   type = "global"
-#   ## Wildcard matches like "*.com". An empty string "" is same as "*"
-#   ## If type = "ip" filters should be <IP/network>
-#   filters = [""]
-
-
-# # Read stats from one or more Elasticsearch servers or clusters
-# [[inputs.elasticsearch]]
-#   ## specify a list of one or more Elasticsearch servers
-#   # you can add username and password to your url to use basic authentication:
-#   # servers=["http://user:pass@localhost:9200"]
-#   servers = ["http://localhost:9200"]
-#
-#   ## Timeout for HTTP requests to the elastic search server(s)
-#   http_timeout = "5s"
-#
-#   ## When local is true (the default), the node will read only its own stats.
-#   ## Set local to false when you want to read the node stats from all nodes
-#   ## of the cluster.
-#   local = true
-#
-#   ## Set cluster_health to true when you want to also obtain cluster health stats
-#   cluster_health = false
-#
-#   ## Set cluster_stats to true when you want to also obtain cluster stats from the
-#   ## Master node.
-#   cluster_stats = false
-#
-#   ## Optional SSL Config
-#   # ssl_ca = "/etc/telegraf/ca.pem"
-#   # ssl_cert = "/etc/telegraf/cert.pem"
-#   # ssl_key = "/etc/telegraf/key.pem"
-#   ## Use SSL but skip chain & host verification
-#   # insecure_skip_verify = false
-
-
-# # Read metrics from one or more commands that can output to stdout
-# [[inputs.exec]]
-#   ## Commands array
-#   commands = ["/tmp/test.sh", "/usr/bin/mycollector --foo=bar", "/tmp/collect_*.sh"]
-#
-#   ## Timeout for each command to complete.
-#   timeout = "5s"
-#
-#   ## measurement name suffix (for separating different commands)
-#   name_suffix = "_mycollector"
-#
-#   ## Data format to consume.
-#   ## Each data format has its own unique set of configuration options, read
-#   ## more about them here:
-#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md
-#   data_format = "influx"
-
-
-# # Read stats about given file(s)
-# [[inputs.filestat]]
-#   ## Files to gather stats about.
-#   ## These accept standard unix glob matching rules, but with the addition of
-#   ## ** as a "super asterisk". ie:
-#   ##   "/var/log/**.log"  -> recursively find all .log files in /var/log
-#   ##   "/var/log/*/*.log" -> find all .log files with a parent dir in /var/log
-#   ##   "/var/log/apache.log" -> just tail the apache log file
-#   ##
-#   ## See https://github.com/gobwas/glob for more examples
-#   ##
-#   files = ["/var/log/**.log"]
-#   ## If true, read the entire file and calculate an md5 checksum.
-#   md5 = false
-
-
-# # Read flattened metrics from one or more GrayLog HTTP endpoints
-# [[inputs.graylog]]
-#   ## API endpoint, currently supported API:
-#   ##
-#   ##   - multiple  (Ex http://<host>:12900/system/metrics/multiple)
-#   ##   - namespace (Ex http://<host>:12900/system/metrics/namespace/{namespace})
-#   ##
-#   ## For namespace endpoint, the metrics array will be ignored for that call.
-#   ## Endpoint can contain namespace and multiple type calls.
-#   ##
-#   ## Please check http://[graylog-server-ip]:12900/api-browser for full list
-#   ## of endpoints
-#   servers = ["http://[graylog-server-ip]:12900/system/metrics/multiple"]
-#
-#   ## Metrics list
-#   ## List of metrics can be found on Graylog webservice documentation.
-#   ## Or by hitting the the web service api at:
-#   ##   http://[graylog-host]:12900/system/metrics
-#   metrics = ["jvm.cl.loaded", "jvm.memory.pools.Metaspace.committed"]
-#
-#   ## Username and password
-#   username = ""
-#   password = ""
-#
-#   ## Optional SSL Config
-#   # ssl_ca = "/etc/telegraf/ca.pem"
-#   # ssl_cert = "/etc/telegraf/cert.pem"
-#   # ssl_key = "/etc/telegraf/key.pem"
-#   ## Use SSL but skip chain & host verification
-#   # insecure_skip_verify = false
-
-
-# # Read metrics of haproxy, via socket or csv stats page
-# [[inputs.haproxy]]
-#   ## An array of address to gather stats about. Specify an ip on hostname
-#   ## with optional port. ie localhost, 10.10.3.33:1936, etc.
-#   ## Make sure you specify the complete path to the stats endpoint
-#   ## including the protocol, ie http://10.10.3.33:1936/haproxy?stats
-#
-#   ## If no servers are specified, then default to 127.0.0.1:1936/haproxy?stats
-#   servers = ["http://myhaproxy.com:1936/haproxy?stats"]
-#
-#   ## You can also use local socket with standard wildcard globbing.
-#   ## Server address not starting with 'http' will be treated as a possible
-#   ## socket, so both examples below are valid.
-#   # servers=["socket:/run/haproxy/admin.sock", "/run/haproxy/*.sock"]
-#
-#   ## By default, some of the fields are renamed from what haproxy calls them.
-#   ## Setting this option to true results in the plugin keeping the original
-#   ## field names.
-#   # keep_field_names = true
-#
-#   ## Optional SSL Config
-#   # ssl_ca = "/etc/telegraf/ca.pem"
-#   # ssl_cert = "/etc/telegraf/cert.pem"
-#   # ssl_key = "/etc/telegraf/key.pem"
-#   ## Use SSL but skip chain & host verification
-#   # insecure_skip_verify = false
-
-
-# # Monitor disks' temperatures using hddtemp
-# [[inputs.hddtemp]]
-#   ## By default, telegraf gathers temps data from all disks detected by the
-#   ## hddtemp.
-#   ##
-#   ## Only collect temps from the selected disks.
-#   ##
-#   ## A * as the device name will return the temperature values of all disks.
-#   ##
-#   # address = "127.0.0.1:7634"
-#   # devices = ["sda", "*"]
-
-
-# HTTP/HTTPS request given an address a method and a timeout
-[[inputs.http_response]]
-  ## Server address (default http://localhost) Sock Shop Front End
-  address = "http://sockshop.integration.decideh2020.lan.esilab.org:8082/customers"
-  ## Set response_timeout (default 5 seconds)
-  response_timeout = "5s"
-  ## HTTP Request Method
-  method = "GET"
-  ## Whether to follow redirects from the server (defaults to false)
-  follow_redirects = true
-  ## HTTP Request Headers (all values must be strings)
-  # [inputs.http_response.headers]
-  #   Host = "github.com"
-  
-  ## Optional HTTP Request Body
-  # body = '''
-  # {'fake':'data'}
-  # '''
-
-  ## Optional substring or regex match in body of the response
-  ## response_string_match = "\"service_status\": \"up\""
-  ## response_string_match = "ok"
-  ## response_string_match = "\".*_status\".?:.?\"up\""
-
-  ## Optional SSL Config
-  # ssl_ca = "/etc/telegraf/ca.pem"
-  # ssl_cert = "/etc/telegraf/cert.pem"
-  # ssl_key = "/etc/telegraf/key.pem"
-  ## Use SSL but skip chain & host verification
-  # insecure_skip_verify = false
-
-
-# # Read flattened metrics from one or more JSON HTTP endpoints
-# [[inputs.httpjson]]
-#   ## NOTE This plugin only reads numerical measurements, strings and booleans
-#   ## will be ignored.
-#
-#   ## Name for the service being polled.  Will be appended to the name of the
-#   ## measurement e.g. httpjson_webserver_stats
-#   ##
-#   ## Deprecated (1.3.0): Use name_override, name_suffix, name_prefix instead.
-#   name = "webserver_stats"
-#
-#   ## URL of each server in the service's cluster
-#   servers = ["http://localhost:9999/stats/", "http://localhost:9998/stats/"]
-#   ## Set response_timeout (default 5 seconds)
-#   response_timeout = "5s"
-#
-#   ## HTTP method to use: GET or POST (case-sensitive)
-#   method = "GET"
-#
-#   ## List of tag names to extract from top-level of JSON server response
-#   # tag_keys = ["my_tag_1", "my_tag_2"]
-#
-#   ## HTTP parameters (all values must be strings).  For "GET" requests, data
-#   ## will be included in the query.  For "POST" requests, data will be included
-#   ## in the request body as "x-www-form-urlencoded".
-#   # [inputs.httpjson.parameters]
-#   #   event_type = "cpu_spike"
-#   #   threshold = "0.75"
-#
-#   ## HTTP Headers (all values must be strings)
-#   # [inputs.httpjson.headers]
-#   #   X-Auth-Token = "my-xauth-token"
-#   #   apiVersion = "v1"
-#
-#   ## Optional SSL Config
-#   # ssl_ca = "/etc/telegraf/ca.pem"
-#   # ssl_cert = "/etc/telegraf/cert.pem"
-#   # ssl_key = "/etc/telegraf/key.pem"
-#   ## Use SSL but skip chain & host verification
-#   # insecure_skip_verify = false
-
-
-# # Read InfluxDB-formatted JSON metrics from one or more HTTP endpoints
-# [[inputs.influxdb]]
-#   ## Works with InfluxDB debug endpoints out of the box,
-#   ## but other services can use this format too.
-#   ## See the influxdb plugin's README for more details.
-#
-#   ## Multiple URLs from which to read InfluxDB-formatted JSON
-#   ## Default is "http://localhost:8086/debug/vars".
-#   urls = ["http://localhost:8086/debug/vars"]
-#
-#   ## http request & header timeout
-#   timeout = "5s"
-
-
-# # Collect statistics about itself
-# [[inputs.internal]]
-#   ## If true, collect telegraf memory stats.
-#   # collect_memstats = true
-
-
-# # This plugin gathers interrupts data from /proc/interrupts and /proc/softirqs.
-# [[inputs.interrupts]]
-#   ## To filter which IRQs to collect, make use of tagpass / tagdrop, i.e.
-#   # [inputs.interrupts.tagdrop]
-#   #   irq = ["NET_RX", "TASKLET"]
-
-
-# # Read metrics from the bare metal servers via IPMI
-# [[inputs.ipmi_sensor]]
-#   ## optionally specify the path to the ipmitool executable
-#   # path = "/usr/bin/ipmitool"
-#   #
-#   ## optionally specify one or more servers via a url matching
-#   ##  [username[:password]@][protocol[(address)]]
-#   ##  e.g.
-#   ##    root:passwd@lan(127.0.0.1)
-#   ##
-#   ## if no servers are specified, local machine sensor stats will be queried
-#   ##
-#   # servers = ["USERID:PASSW0RD@lan(192.168.1.1)"]
-
-
-# # Gather packets and bytes throughput from iptables
-# [[inputs.iptables]]
-#   ## iptables require root access on most systems.
-#   ## Setting 'use_sudo' to true will make use of sudo to run iptables.
-#   ## Users must configure sudo to allow telegraf user to run iptables with no password.
-#   ## iptables can be restricted to only list command "iptables -nvL".
-#   use_sudo = false
-#   ## Setting 'use_lock' to true runs iptables with the "-w" option.
-#   ## Adjust your sudo settings appropriately if using this option ("iptables -wnvl")
-#   use_lock = false
-#   ## defines the table to monitor:
-#   table = "filter"
-#   ## defines the chains to monitor.
-#   ## NOTE: iptables rules without a comment will not be monitored.
-#   ## Read the plugin documentation for more information.
-#   chains = [ "INPUT" ]
-
-
-# # Read JMX metrics through Jolokia
-# [[inputs.jolokia]]
-#   ## This is the context root used to compose the jolokia url
-#   ## NOTE that Jolokia requires a trailing slash at the end of the context root
-#   ## NOTE that your jolokia security policy must allow for POST requests.
-#   context = "/jolokia/"
-#
-#   ## This specifies the mode used
-#   # mode = "proxy"
-#   #
-#   ## When in proxy mode this section is used to specify further
-#   ## proxy address configurations.
-#   ## Remember to change host address to fit your environment.
-#   # [inputs.jolokia.proxy]
-#   #   host = "127.0.0.1"
-#   #   port = "8080"
-#
-#   ## Optional http timeouts
-#   ##
-#   ## response_header_timeout, if non-zero, specifies the amount of time to wait
-#   ## for a server's response headers after fully writing the request.
-#   # response_header_timeout = "3s"
-#   ##
-#   ## client_timeout specifies a time limit for requests made by this client.
-#   ## Includes connection time, any redirects, and reading the response body.
-#   # client_timeout = "4s"
-#
-#   ## Attribute delimiter
-#   ##
-#   ## When multiple attributes are returned for a single
-#   ## [inputs.jolokia.metrics], the field name is a concatenation of the metric
-#   ## name, and the attribute name, separated by the given delimiter.
-#   # delimiter = "_"
-#
-#   ## List of servers exposing jolokia read service
-#   [[inputs.jolokia.servers]]
-#     name = "as-server-01"
-#     host = "127.0.0.1"
-#     port = "8080"
-#     # username = "myuser"
-#     # password = "mypassword"
-#
-#   ## List of metrics collected on above servers
-#   ## Each metric consists in a name, a jmx path and either
-#   ## a pass or drop slice attribute.
-#   ## This collect all heap memory usage metrics.
-#   [[inputs.jolokia.metrics]]
-#     name = "heap_memory_usage"
-#     mbean  = "java.lang:type=Memory"
-#     attribute = "HeapMemoryUsage"
-#
-#   ## This collect thread counts metrics.
-#   [[inputs.jolokia.metrics]]
-#     name = "thread_count"
-#     mbean  = "java.lang:type=Threading"
-#     attribute = "TotalStartedThreadCount,ThreadCount,DaemonThreadCount,PeakThreadCount"
-#
-#   ## This collect number of class loaded/unloaded counts metrics.
-#   [[inputs.jolokia.metrics]]
-#     name = "class_count"
-#     mbean  = "java.lang:type=ClassLoading"
-#     attribute = "LoadedClassCount,UnloadedClassCount,TotalLoadedClassCount"
-
-
-# # Read Kapacitor-formatted JSON metrics from one or more HTTP endpoints
-# [[inputs.kapacitor]]
-#   ## Multiple URLs from which to read Kapacitor-formatted JSON
-#   ## Default is "http://localhost:9092/kapacitor/v1/debug/vars".
-#   urls = ["http://localhost:9092/kapacitor/v1/debug/vars"]
-#
-#   ## Time limit for http requests
-#   timeout = "5s"
-
-
-# # Get kernel statistics from /proc/vmstat
-# [[inputs.kernel_vmstat]]
-#   # no configuration
-
-
-# # Read metrics from the kubernetes kubelet api
-# [[inputs.kubernetes]]
-#   ## URL for the kubelet
-#   url = "http://1.1.1.1:10255"
-#
-#   ## Use bearer token for authorization
-#   # bearer_token = /path/to/bearer/token
-#
-#   ## Optional SSL Config
-#   # ssl_ca = /path/to/cafile
-#   # ssl_cert = /path/to/certfile
-#   # ssl_key = /path/to/keyfile
-#   ## Use SSL but skip chain & host verification
-#   # insecure_skip_verify = false
-
-
-# # Read metrics from a LeoFS Server via SNMP
-# [[inputs.leofs]]
-#   ## An array of URI to gather stats about LeoFS.
-#   ## Specify an ip or hostname with port. ie 127.0.0.1:4020
-#   servers = ["127.0.0.1:4021"]
-
-
-# # Provides Linux sysctl fs metrics
-# [[inputs.linux_sysctl_fs]]
-#   # no configuration
-
-
-# # Read metrics from local Lustre service on OST, MDS
-# [[inputs.lustre2]]
-#   ## An array of /proc globs to search for Lustre stats
-#   ## If not specified, the default will work on Lustre 2.5.x
-#   ##
-#   # ost_procfiles = ["/proc/fs/lustre/obdfilter/*/stats", "/proc/fs/lustre/osd-ldiskfs/*/stats", "/proc/fs/lustre/obdfilter/*/job_stats"]
-#   # mds_procfiles = ["/proc/fs/lustre/mdt/*/md_stats", "/proc/fs/lustre/mdt/*/job_stats"]
-
-
-# # Gathers metrics from the /3.0/reports MailChimp API
-# [[inputs.mailchimp]]
-#   ## MailChimp API key
-#   ## get from https://admin.mailchimp.com/account/api/
-#   api_key = "" # required
-#   ## Reports for campaigns sent more than days_old ago will not be collected.
-#   ## 0 means collect all.
-#   days_old = 0
-#   ## Campaign ID to get, if empty gets all campaigns, this option overrides days_old
-#   # campaign_id = ""
-
-
-# # Read metrics from one or many memcached servers
-# [[inputs.memcached]]
-#   ## An array of address to gather stats about. Specify an ip on hostname
-#   ## with optional port. ie localhost, 10.0.0.1:11211, etc.
-#   servers = ["localhost:11211"]
-#   # unix_sockets = ["/var/run/memcached.sock"]
-
-
-# # Telegraf plugin for gathering metrics from N Mesos masters
-# [[inputs.mesos]]
-#   ## Timeout, in ms.
-#   timeout = 100
-#   ## A list of Mesos masters.
-#   masters = ["localhost:5050"]
-#   ## Master metrics groups to be collected, by default, all enabled.
-#   master_collections = ["resources", "master", "system", "agents", "frameworks", "tasks", "messages", "evqueue", "registrar"]
-#   ## A list of Mesos slaves, default is []
-#   # slaves = []
-#   ## Slave metrics groups to be collected, by default, all enabled.
-#   # slave_collections = ["resources", "agent", "system", "executors", "tasks", "messages"]
-
-
-# # Read metrics from one or many MongoDB servers
-# [[inputs.mongodb]]
-#   ## An array of URI to gather stats about. Specify an ip or hostname
-#   ## with optional port add password. ie,
-#   ##   mongodb://user:auth_key@10.10.3.30:27017,
-#   ##   mongodb://10.10.3.33:18832,
-#   ##   10.0.0.1:10000, etc.
-#   servers = ["127.0.0.1:27017"]
-#   gather_perdb_stats = false
-#
-#   ## Optional SSL Config
-#   # ssl_ca = "/etc/telegraf/ca.pem"
-#   # ssl_cert = "/etc/telegraf/cert.pem"
-#   # ssl_key = "/etc/telegraf/key.pem"
-#   ## Use SSL but skip chain & host verification
-#   # insecure_skip_verify = false
-
-
-# # Read metrics from one or many mysql servers
-# [[inputs.mysql]]
-#   ## specify servers via a url matching:
-#   ##  [username[:password]@][protocol[(address)]]/[?tls=[true|false|skip-verify]]
-#   ##  see https://github.com/go-sql-driver/mysql#dsn-data-source-name
-#   ##  e.g.
-#   ##    servers=["user:passwd@tcp(127.0.0.1:3306)/?tls=false"]
-#   ##    servers=["user@tcp(127.0.0.1:3306)/?tls=false"]
-#   #
-#   ## If no servers are specified, then localhost is used as the host.
-#   servers = ["tcp(127.0.0.1:3306)/"]
-#   ## the limits for metrics form perf_events_statements
-#   perf_events_statements_digest_text_limit = 120
-#   perf_events_statements_limit = 250
-#   perf_events_statements_time_limit = 86400
-#   #
-#   ## if the list is empty, then metrics are gathered from all database tables
-#   table_schema_databases = []
-#   #
-#   ## gather metrics from INFORMATION_SCHEMA.TABLES for databases provided above list
-#   gather_table_schema = false
-#   #
-#   ## gather thread state counts from INFORMATION_SCHEMA.PROCESSLIST
-#   gather_process_list = true
-#   #
-#   ## gather thread state counts from INFORMATION_SCHEMA.USER_STATISTICS
-#   gather_user_statistics = true
-#   #
-#   ## gather auto_increment columns and max values from information schema
-#   gather_info_schema_auto_inc = true
-#   #
-#   ## gather metrics from INFORMATION_SCHEMA.INNODB_METRICS
-#   gather_innodb_metrics = true
-#   #
-#   ## gather metrics from SHOW SLAVE STATUS command output
-#   gather_slave_status = true
-#   #
-#   ## gather metrics from SHOW BINARY LOGS command output
-#   gather_binary_logs = false
-#   #
-#   ## gather metrics from PERFORMANCE_SCHEMA.TABLE_IO_WAITS_SUMMARY_BY_TABLE
-#   gather_table_io_waits = false
-#   #
-#   ## gather metrics from PERFORMANCE_SCHEMA.TABLE_LOCK_WAITS
-#   gather_table_lock_waits = false
-#   #
-#   ## gather metrics from PERFORMANCE_SCHEMA.TABLE_IO_WAITS_SUMMARY_BY_INDEX_USAGE
-#   gather_index_io_waits = false
-#   #
-#   ## gather metrics from PERFORMANCE_SCHEMA.EVENT_WAITS
-#   gather_event_waits = false
-#   #
-#   ## gather metrics from PERFORMANCE_SCHEMA.FILE_SUMMARY_BY_EVENT_NAME
-#   gather_file_events_stats = false
-#   #
-#   ## gather metrics from PERFORMANCE_SCHEMA.EVENTS_STATEMENTS_SUMMARY_BY_DIGEST
-#   gather_perf_events_statements = false
-#   #
-#   ## Some queries we may want to run less often (such as SHOW GLOBAL VARIABLES)
-#   interval_slow = "30m"
-
-
-# # Read metrics about network interface usage
-# [[inputs.net]]
-#   ## By default, telegraf gathers stats from any up interface (excluding loopback)
-#   ## Setting interfaces will tell it to gather these explicit interfaces,
-#   ## regardless of status.
-#   ##
-#   # interfaces = ["eth0"]
-
-
-# # TCP or UDP 'ping' given url and collect response time in seconds
-# [[inputs.net_response]]
-#   ## Protocol, must be "tcp" or "udp"
-#   ## NOTE: because the "udp" protocol does not respond to requests, it requires
-#   ## a send/expect string pair (see below).
-#   protocol = "tcp"
-#   ## Server address (default localhost)
-#   address = "localhost:80"
-#   ## Set timeout
-#   timeout = "1s"
-#
-#   ## Set read timeout (only used if expecting a response)
-#   read_timeout = "1s"
-#
-#   ## The following options are required for UDP checks. For TCP, they are
-#   ## optional. The plugin will send the given string to the server and then
-#   ## expect to receive the given 'expect' string back.
-#   ## string sent to the server
-#   # send = "ssh"
-#   ## expected string in answer
-#   # expect = "ssh"
-
-
-# # Read TCP metrics such as established, time wait and sockets counts.
-# [[inputs.netstat]]
-#   # no configuration
-
-
-# # Read Nginx's basic status information (ngx_http_stub_status_module)
-# [[inputs.nginx]]
-#   ## An array of Nginx stub_status URI to gather stats.
-#   urls = ["http://localhost/status"]
-
-
-# # Read NSQ topic and channel statistics.
-# [[inputs.nsq]]
-#   ## An array of NSQD HTTP API endpoints
-#   endpoints = ["http://localhost:4151"]
-
-
-# # Collect kernel snmp counters and network interface statistics
-# [[inputs.nstat]]
-#   ## file paths for proc files. If empty default paths will be used:
-#   ##    /proc/net/netstat, /proc/net/snmp, /proc/net/snmp6
-#   ## These can also be overridden with env variables, see README.
-#   proc_net_netstat = "/proc/net/netstat"
-#   proc_net_snmp = "/proc/net/snmp"
-#   proc_net_snmp6 = "/proc/net/snmp6"
-#   ## dump metrics with 0 values too
-#   dump_zeros = true
-
-
-# # Get standard NTP query metrics, requires ntpq executable.
-# [[inputs.ntpq]]
-#   ## If false, set the -n ntpq flag. Can reduce metric gather time.
-#   dns_lookup = true
-
-
-# # Read metrics of passenger using passenger-status
-# [[inputs.passenger]]
-#   ## Path of passenger-status.
-#   ##
-#   ## Plugin gather metric via parsing XML output of passenger-status
-#   ## More information about the tool:
-#   ##   https://www.phusionpassenger.com/library/admin/apache/overall_status_report.html
-#   ##
-#   ## If no path is specified, then the plugin simply execute passenger-status
-#   ## hopefully it can be found in your PATH
-#   command = "passenger-status -v --show=xml"
-
-
-# # Read metrics of phpfpm, via HTTP status page or socket
-# [[inputs.phpfpm]]
-#   ## An array of addresses to gather stats about. Specify an ip or hostname
-#   ## with optional port and path
-#   ##
-#   ## Plugin can be configured in three modes (either can be used):
-#   ##   - http: the URL must start with http:// or https://, ie:
-#   ##       "http://localhost/status"
-#   ##       "http://192.168.130.1/status?full"
-#   ##
-#   ##   - unixsocket: path to fpm socket, ie:
-#   ##       "/var/run/php5-fpm.sock"
-#   ##      or using a custom fpm status path:
-#   ##       "/var/run/php5-fpm.sock:fpm-custom-status-path"
-#   ##
-#   ##   - fcgi: the URL must start with fcgi:// or cgi://, and port must be present, ie:
-#   ##       "fcgi://10.0.0.12:9000/status"
-#   ##       "cgi://10.0.10.12:9001/status"
-#   ##
-#   ## Example of multiple gathering from local socket and remove host
-#   ## urls=["http://192.168.1.20/status", "/tmp/fpm.sock"]
-#   urls = ["http://localhost/status"]
-
-
-# # Ping given url(s) and return statistics
-# [[inputs.ping]]
-#   ## NOTE: this plugin forks the ping command. You may need to set capabilities
-#   ## via setcap cap_net_raw+p /bin/ping
-#   #
-#   ## List of urls to ping
-#   urls = ["www.google.com"] # required
-#   ## number of pings to send per collection (ping -c <COUNT>)
-#   count = 1
-#   ## interval, in s, at which to ping. 0 == default (ping -i <PING_INTERVAL>)
-#   ping_interval = 1.0
-#   ## per-ping timeout, in s. 0 == no timeout (ping -W <TIMEOUT>)
-#   timeout = 1.0
-#   ## interface to send ping from (ping -I <INTERFACE>)
-#   interface = ""
-
-
-# # Read metrics from one or many postgresql servers
-# [[inputs.postgresql]]
-#   ## specify address via a url matching:
-#   ##   postgres://[pqgotest[:password]]@localhost[/dbname]\
-#   ##       ?sslmode=[disable|verify-ca|verify-full]
-#   ## or a simple string:
-#   ##   host=localhost user=pqotest password=... sslmode=... dbname=app_production
-#   ##
-#   ## All connection parameters are optional.
-#   ##
-#   ## Without the dbname parameter, the driver will default to a database
-#   ## with the same name as the user. This dbname is just for instantiating a
-#   ## connection with the server and doesn't restrict the databases we are trying
-#   ## to grab metrics for.
-#   ##
-#   address = "host=localhost user=postgres sslmode=disable"
-#
-#   ## A  list of databases to explicitly ignore. If not specified, metrics for all
-#   ## databases are gathered. Do NOT use with the 'databases' option.
-#   # ignored_databases = ["postgres", "template0", "template1"]
-#
-#   ## A list of databases to pull metrics about. If not specified, metrics for all
-#   ## databases are gathered. Do NOT use with the 'ignored_databases' option.
-#   # databases = ["app_production", "testing"]
-
-
-# # Read metrics from one or many postgresql servers
-# [[inputs.postgresql_extensible]]
-#   ## specify address via a url matching:
-#   ##   postgres://[pqgotest[:password]]@localhost[/dbname]\
-#   ##       ?sslmode=[disable|verify-ca|verify-full]
-#   ## or a simple string:
-#   ##   host=localhost user=pqotest password=... sslmode=... dbname=app_production
-#   #
-#   ## All connection parameters are optional.  #
-#   ## Without the dbname parameter, the driver will default to a database
-#   ## with the same name as the user. This dbname is just for instantiating a
-#   ## connection with the server and doesn't restrict the databases we are trying
-#   ## to grab metrics for.
-#   #
-#   address = "host=localhost user=postgres sslmode=disable"
-#   ## A list of databases to pull metrics about. If not specified, metrics for all
-#   ## databases are gathered.
-#   # databases = ["app_production", "testing"]
-#   #
-#   # outputaddress = "db01"
-#   ## A custom name for the database that will be used as the "server" tag in the
-#   ## measurement output. If not specified, a default one generated from
-#   ## the connection address is used.
-#   #
-#   ## Define the toml config where the sql queries are stored
-#   ## New queries can be added, if the withdbname is set to true and there is no
-#   ## databases defined in the 'databases field', the sql query is ended by a
-#   ## 'is not null' in order to make the query succeed.
-#   ## Example :
-#   ## The sqlquery : "SELECT * FROM pg_stat_database where datname" become
-#   ## "SELECT * FROM pg_stat_database where datname IN ('postgres', 'pgbench')"
-#   ## because the databases variable was set to ['postgres', 'pgbench' ] and the
-#   ## withdbname was true. Be careful that if the withdbname is set to false you
-#   ## don't have to define the where clause (aka with the dbname) the tagvalue
-#   ## field is used to define custom tags (separated by commas)
-#   ## The optional "measurement" value can be used to override the default
-#   ## output measurement name ("postgresql").
-#   #
-#   ## Structure :
-#   ## [[inputs.postgresql_extensible.query]]
-#   ##   sqlquery string
-#   ##   version string
-#   ##   withdbname boolean
-#   ##   tagvalue string (comma separated)
-#   ##   measurement string
-#   [[inputs.postgresql_extensible.query]]
-#     sqlquery = "SELECT * FROM pg_stat_database"
-#     version = 901
-#     withdbname = false
-#     tagvalue = ""
-#     measurement = ""
-#   [[inputs.postgresql_extensible.query]]
-#     sqlquery = "SELECT * FROM pg_stat_bgwriter"
-#     version = 901
-#     withdbname = false
-#     tagvalue = "postgresql.stats"
-
-
-# # Read metrics from one or many PowerDNS servers
-# [[inputs.powerdns]]
-#   ## An array of sockets to gather stats about.
-#   ## Specify a path to unix socket.
-#   unix_sockets = ["/var/run/pdns.controlsocket"]
-
-
-# # Monitor process cpu and memory usage
-# [[inputs.procstat]]
-#   ## Must specify one of: pid_file, exe, or pattern
-#   ## PID file to monitor process
-#   pid_file = "/var/run/nginx.pid"
-#   ## executable name (ie, pgrep <exe>)
-#   # exe = "nginx"
-#   ## pattern as argument for pgrep (ie, pgrep -f <pattern>)
-#   # pattern = "nginx"
-#   ## user as argument for pgrep (ie, pgrep -u <user>)
-#   # user = "nginx"
-#
-#   ## override for process_name
-#   ## This is optional; default is sourced from /proc/<pid>/status
-#   # process_name = "bar"
-#   ## Field name prefix
-#   prefix = ""
-#   ## comment this out if you want raw cpu_time stats
-#   fielddrop = ["cpu_time_*"]
-#   ## This is optional; moves pid into a tag instead of a field
-#   pid_tag = false
-
-
-# # Read metrics from one or many prometheus clients
-# [[inputs.prometheus]]
-#   ## An array of urls to scrape metrics from.
-#   urls = ["http://localhost:9100/metrics"]
-#
-#   ## Use bearer token for authorization
-#   # bearer_token = /path/to/bearer/token
-#
-#   ## Specify timeout duration for slower prometheus clients (default is 3s)
-#   # response_timeout = "3s"
-#
-#   ## Optional SSL Config
-#   # ssl_ca = /path/to/cafile
-#   # ssl_cert = /path/to/certfile
-#   # ssl_key = /path/to/keyfile
-#   ## Use SSL but skip chain & host verification
-#   # insecure_skip_verify = false
-
-
-# # Reads last_run_summary.yaml file and converts to measurments
-# [[inputs.puppetagent]]
-#   ## Location of puppet last run summary file
-#   location = "/var/lib/puppet/state/last_run_summary.yaml"
-
-
-# # Read metrics from one or many RabbitMQ servers via the management API
-# [[inputs.rabbitmq]]
-#   # url = "http://localhost:15672"
-#   # name = "rmq-server-1" # optional tag
-#   # username = "guest"
-#   # password = "guest"
-#
-#   ## Optional SSL Config
-#   # ssl_ca = "/etc/telegraf/ca.pem"
-#   # ssl_cert = "/etc/telegraf/cert.pem"
-#   # ssl_key = "/etc/telegraf/key.pem"
-#   ## Use SSL but skip chain & host verification
-#   # insecure_skip_verify = false
-#
-#   ## Optional request timeouts
-#   ##
-#   ## ResponseHeaderTimeout, if non-zero, specifies the amount of time to wait
-#   ## for a server's response headers after fully writing the request.
-#   # header_timeout = "3s"
-#   ##
-#   ## client_timeout specifies a time limit for requests made by this client.
-#   ## Includes connection time, any redirects, and reading the response body.
-#   # client_timeout = "4s"
-#
-#   ## A list of nodes to pull metrics about. If not specified, metrics for
-#   ## all nodes are gathered.
-#   # nodes = ["rabbit@node1", "rabbit@node2"]
-
-
-# # Read raindrops stats (raindrops - real-time stats for preforking Rack servers)
-# [[inputs.raindrops]]
-#   ## An array of raindrops middleware URI to gather stats.
-#   urls = ["http://localhost:8080/_raindrops"]
-
-
-# # Read metrics from one or many redis servers
-# [[inputs.redis]]
-#   ## specify servers via a url matching:
-#   ##  [protocol://][:password]@address[:port]
-#   ##  e.g.
-#   ##    tcp://localhost:6379
-#   ##    tcp://:password@192.168.99.100
-#   ##    unix:///var/run/redis.sock
-#   ##
-#   ## If no servers are specified, then localhost is used as the host.
-#   ## If no port is specified, 6379 is used
-#   servers = ["tcp://localhost:6379"]
-
-
-# # Read metrics from one or many RethinkDB servers
-# [[inputs.rethinkdb]]
-#   ## An array of URI to gather stats about. Specify an ip or hostname
-#   ## with optional port add password. ie,
-#   ##   rethinkdb://user:auth_key@10.10.3.30:28105,
-#   ##   rethinkdb://10.10.3.33:18832,
-#   ##   10.0.0.1:10000, etc.
-#   servers = ["127.0.0.1:28015"]
-
-
-# # Read metrics one or many Riak servers
-# [[inputs.riak]]
-#   # Specify a list of one or more riak http servers
-#   servers = ["http://localhost:8098"]
-
-
-# # Monitor sensors, requires lm-sensors package
-# [[inputs.sensors]]
-#   ## Remove numbers from field names.
-#   ## If true, a field name like 'temp1_input' will be changed to 'temp_input'.
-#   # remove_numbers = true
-
-
-# # Retrieves SNMP values from remote agents
-# [[inputs.snmp]]
-#   agents = [ "127.0.0.1:161" ]
-#   ## Timeout for each SNMP query.
-#   timeout = "5s"
-#   ## Number of retries to attempt within timeout.
-#   retries = 3
-#   ## SNMP version, values can be 1, 2, or 3
-#   version = 2
-#
-#   ## SNMP community string.
-#   community = "public"
-#
-#   ## The GETBULK max-repetitions parameter
-#   max_repetitions = 10
-#
-#   ## SNMPv3 auth parameters
-#   # sec_name = "myuser"
-#   # auth_protocol = "md5"      # Values: "MD5", "SHA", ""
-#   # auth_password = "pass"
-#   # sec_level = "authNoPriv"   # Values: "noAuthNoPriv", "authNoPriv", "authPriv"
-#   # context_name = ""
-#   # priv_protocol = ""         # Values: "DES", "AES", ""
-#   # priv_password = ""
-#
-#   ## measurement name
-#   name = "system"
-#   [[inputs.snmp.field]]
-#     name = "hostname"
-#     oid = ".1.0.0.1.1"
-#   [[inputs.snmp.field]]
-#     name = "uptime"
-#     oid = ".1.0.0.1.2"
-#   [[inputs.snmp.field]]
-#     name = "load"
-#     oid = ".1.0.0.1.3"
-#   [[inputs.snmp.field]]
-#     oid = "HOST-RESOURCES-MIB::hrMemorySize"
-#
-#   [[inputs.snmp.table]]
-#     ## measurement name
-#     name = "remote_servers"
-#     inherit_tags = [ "hostname" ]
-#     [[inputs.snmp.table.field]]
-#       name = "server"
-#       oid = ".1.0.0.0.1.0"
-#       is_tag = true
-#     [[inputs.snmp.table.field]]
-#       name = "connections"
-#       oid = ".1.0.0.0.1.1"
-#     [[inputs.snmp.table.field]]
-#       name = "latency"
-#       oid = ".1.0.0.0.1.2"
-#
-#   [[inputs.snmp.table]]
-#     ## auto populate table's fields using the MIB
-#     oid = "HOST-RESOURCES-MIB::hrNetworkTable"
-
-
-# # Read metrics from Microsoft SQL Server
-# [[inputs.sqlserver]]
-#   ## Specify instances to monitor with a list of connection strings.
-#   ## All connection parameters are optional.
-#   ## By default, the host is localhost, listening on default port, TCP 1433.
-#   ##   for Windows, the user is the currently running AD user (SSO).
-#   ##   See https://github.com/denisenkom/go-mssqldb for detailed connection
-#   ##   parameters.
-#   # servers = ["Server=192.168.1.10;Port=1433;User Id=<user>;Password=<pw>;app name=telegraf;log=1;"]
-
-
-# # Sysstat metrics collector
-# [[inputs.sysstat]]
-#   ## Path to the sadc command.
-#   #
-#   ## Common Defaults:
-#   ##   Debian/Ubuntu: /usr/lib/sysstat/sadc
-#   ##   Arch:          /usr/lib/sa/sadc
-#   ##   RHEL/CentOS:   /usr/lib64/sa/sadc
-#   sadc_path = "/usr/lib/sa/sadc" # required
-#   #
-#   #
-#   ## Path to the sadf command, if it is not in PATH
-#   # sadf_path = "/usr/bin/sadf"
-#   #
-#   #
-#   ## Activities is a list of activities, that are passed as argument to the
-#   ## sadc collector utility (e.g: DISK, SNMP etc...)
-#   ## The more activities that are added, the more data is collected.
-#   # activities = ["DISK"]
-#   #
-#   #
-#   ## Group metrics to measurements.
-#   ##
-#   ## If group is false each metric will be prefixed with a description
-#   ## and represents itself a measurement.
-#   ##
-#   ## If Group is true, corresponding metrics are grouped to a single measurement.
-#   # group = true
-#   #
-#   #
-#   ## Options for the sadf command. The values on the left represent the sadf
-#   ## options and the values on the right their description (wich are used for
-#   ## grouping and prefixing metrics).
-#   ##
-#   ## Run 'sar -h' or 'man sar' to find out the supported options for your
-#   ## sysstat version.
-#   [inputs.sysstat.options]
-#     -C = "cpu"
-#     -B = "paging"
-#     -b = "io"
-#     -d = "disk"             # requires DISK activity
-#     "-n ALL" = "network"
-#     "-P ALL" = "per_cpu"
-#     -q = "queue"
-#     -R = "mem"
-#     -r = "mem_util"
-#     -S = "swap_util"
-#     -u = "cpu_util"
-#     -v = "inode"
-#     -W = "swap"
-#     -w = "task"
-#   # -H = "hugepages"        # only available for newer linux distributions
-#   # "-I ALL" = "interrupts" # requires INT activity
-#   #
-#   #
-#   ## Device tags can be used to add additional tags for devices.
-#   ## For example the configuration below adds a tag vg with value rootvg for
-#   ## all metrics with sda devices.
-#   # [[inputs.sysstat.device_tags.sda]]
-#   #  vg = "rootvg"
-
-
-# # Inserts sine and cosine waves for demonstration purposes
-# [[inputs.trig]]
-#   ## Set the amplitude
-#   amplitude = 10.0
-
-
-# # Read Twemproxy stats data
-# [[inputs.twemproxy]]
-#   ## Twemproxy stats address and port (no scheme)
-#   addr = "localhost:22222"
-#   ## Monitor pool name
-#   pools = ["redis_pool", "mc_pool"]
-
-
-# # A plugin to collect stats from Varnish HTTP Cache
-# [[inputs.varnish]]
-#   ## The default location of the varnishstat binary can be overridden with:
-#   binary = "/usr/bin/varnishstat"
-#
-#   ## By default, telegraf gather stats for 3 metric points.
-#   ## Setting stats will override the defaults shown below.
-#   ## Glob matching can be used, ie, stats=["MAIN.*"]
-#   ## stats may also be set to ["*"], which will collect all stats
-#   stats = ["MAIN.cache_hit", "MAIN.cache_miss", "MAIN.uptime"]
-
-
-# # Read metrics of ZFS from arcstats, zfetchstats, vdev_cache_stats, and pools
-# [[inputs.zfs]]
-#   ## ZFS kstat path. Ignored on FreeBSD
-#   ## If not specified, then default is:
-#   # kstatPath = "/proc/spl/kstat/zfs"
-#
-#   ## By default, telegraf gather all zfs stats
-#   ## If not specified, then default is:
-#   # kstatMetrics = ["arcstats", "zfetchstats", "vdev_cache_stats"]
-#
-#   ## By default, don't gather zpool stats
-#   # poolMetrics = false
-
-
-# # Reads 'mntr' stats from one or many zookeeper servers
-# [[inputs.zookeeper]]
-#   ## An array of address to gather stats about. Specify an ip or hostname
-#   ## with port. ie localhost:2181, 10.0.0.1:2181, etc.
-#
-#   ## If no servers are specified, then localhost is used as the host.
-#   ## If no port is specified, 2181 is used
-#   servers = [":2181"]
-
-
-
-###############################################################################
-#                            SERVICE INPUT PLUGINS                            #
-###############################################################################
-
-# # AMQP consumer plugin
-# [[inputs.amqp_consumer]]
-#   ## AMQP url
-#   url = "amqp://localhost:5672/influxdb"
-#   ## AMQP exchange
-#   exchange = "telegraf"
-#   ## AMQP queue name
-#   queue = "telegraf"
-#   ## Binding Key
-#   binding_key = "#"
-#
-#   ## Maximum number of messages server should give to the worker.
-#   prefetch_count = 50
-#
-#   ## Auth method. PLAIN and EXTERNAL are supported
-#   ## Using EXTERNAL requires enabling the rabbitmq_auth_mechanism_ssl plugin as
-#   ## described here: https://www.rabbitmq.com/plugins.html
-#   # auth_method = "PLAIN"
-#
-#   ## Optional SSL Config
-#   # ssl_ca = "/etc/telegraf/ca.pem"
-#   # ssl_cert = "/etc/telegraf/cert.pem"
-#   # ssl_key = "/etc/telegraf/key.pem"
-#   ## Use SSL but skip chain & host verification
-#   # insecure_skip_verify = false
-#
-#   ## Data format to output.
-#   ## Each data format has its own unique set of configuration options, read
-#   ## more about them here:
-#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md
-#   data_format = "influx"
-
-
-# # Influx HTTP write listener
-# [[inputs.http_listener]]
-#   ## Address and port to host HTTP listener on
-#   service_address = ":8186"
-#
-#   ## maximum duration before timing out read of the request
-#   read_timeout = "10s"
-#   ## maximum duration before timing out write of the response
-#   write_timeout = "10s"
-#
-#   ## Maximum allowed http request body size in bytes.
-#   ## 0 means to use the default of 536,870,912 bytes (500 mebibytes)
-#   max_body_size = 0
-#
-#   ## Maximum line size allowed to be sent in bytes.
-#   ## 0 means to use the default of 65536 bytes (64 kibibytes)
-#   max_line_size = 0
-
-
-# # Read metrics from Kafka topic(s)
-# [[inputs.kafka_consumer]]
-#   ## topic(s) to consume
-#   topics = ["telegraf"]
-#   ## an array of Zookeeper connection strings
-#   zookeeper_peers = ["localhost:2181"]
-#   ## Zookeeper Chroot
-#   zookeeper_chroot = ""
-#   ## the name of the consumer group
-#   consumer_group = "telegraf_metrics_consumers"
-#   ## Offset (must be either "oldest" or "newest")
-#   offset = "oldest"
-#
-#   ## Data format to consume.
-#   ## Each data format has its own unique set of configuration options, read
-#   ## more about them here:
-#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md
-#   data_format = "influx"
-#
-#   ## Maximum length of a message to consume, in bytes (default 0/unlimited);
-#   ## larger messages are dropped
-#   max_message_len = 65536
-
-
-# # Stream and parse log file(s).
-# [[inputs.logparser]]
-#   ## Log files to parse.
-#   ## These accept standard unix glob matching rules, but with the addition of
-#   ## ** as a "super asterisk". ie:
-#   ##   /var/log/**.log     -> recursively find all .log files in /var/log
-#   ##   /var/log/*/*.log    -> find all .log files with a parent dir in /var/log
-#   ##   /var/log/apache.log -> only tail the apache log file
-#   files = ["/var/log/apache/access.log"]
-#   ## Read files that currently exist from the beginning. Files that are created
-#   ## while telegraf is running (and that match the "files" globs) will always
-#   ## be read from the beginning.
-#   from_beginning = false
-#
-#   ## Parse logstash-style "grok" patterns:
-#   ##   Telegraf built-in parsing patterns: https://goo.gl/dkay10
-#   ##
-#   ##   Property 'patterns':
-#   ##   This is a list of patterns to check the given log file(s) for.
-#   ##   Note that adding patterns here increases processing time. The most
-#   ##   efficient configuration is to have one pattern per logparser.
-#   ##   Other common built-in patterns are:
-#   ##   %{COMMON_LOG_FORMAT}   (plain apache & nginx access logs)
-#   ##   %{COMBINED_LOG_FORMAT} (access logs + referrer & agent)
-#   ##
-#   ##   Property 'measurement':
-#   ##   Name of the outputted measurement name.
-#   ##
-#   ##   Property 'custom_pattern_files':
-#   ##   Full path(s) to custom pattern files.
-#   ##
-#   ##   Property 'custom_patterns':
-#   ##   Custom patterns can also be defined here. Put one pattern per line.
-#   [inputs.logparser.grok]
-#     patterns = ["%{COMBINED_LOG_FORMAT}"]
-#     measurement = "apache_access_log"
-#     custom_pattern_files = []
-#     custom_patterns = '''
-#     '''
-
-
-# # Read metrics from MQTT topic(s)
-# [[inputs.mqtt_consumer]]
-#   servers = ["localhost:1883"]
-#   ## MQTT QoS, must be 0, 1, or 2
-#   qos = 0
-#
-#   ## Topics to subscribe to
-#   topics = ["telegraf/host01/cpu", "telegraf/+/mem", "sensors/#"]
-#
-#   # if true, messages that can't be delivered while the subscriber is offline
-#   # will be delivered when it comes back (such as on service restart).
-#   # NOTE: if true, client_id MUST be set
-#   persistent_session = false
-#   # If empty, a random client ID will be generated.
-#   client_id = ""
-#
-#   ## username and password to connect MQTT server.
-#   # username = "telegraf"
-#   # password = "metricsmetricsmetricsmetrics"
-#
-#   ## Optional SSL Config
-#   # ssl_ca = "/etc/telegraf/ca.pem"
-#   # ssl_cert = "/etc/telegraf/cert.pem"
-#   # ssl_key = "/etc/telegraf/key.pem"
-#   ## Use SSL but skip chain & host verification
-#   # insecure_skip_verify = false
-#
-#   ## Data format to consume.
-#   ## Each data format has its own unique set of configuration options, read
-#   ## more about them here:
-#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md
-#   data_format = "influx"
-
-
-# # Read metrics from NATS subject(s)
-# [[inputs.nats_consumer]]
-#   ## urls of NATS servers
-#   # servers = ["nats://localhost:4222"]
-#   ## Use Transport Layer Security
-#   # secure = false
-#   ## subject(s) to consume
-#   # subjects = ["telegraf"]
-#   ## name a queue group
-#   # queue_group = "telegraf_consumers"
-#
-#   ## Sets the limits for pending msgs and bytes for each subscription
-#   ## These shouldn't need to be adjusted except in very high throughput scenarios
-#   # pending_message_limit = 65536
-#   # pending_bytes_limit = 67108864
-#
-#   ## Data format to consume.
-#   ## Each data format has its own unique set of configuration options, read
-#   ## more about them here:
-#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md
-#   data_format = "influx"
-
-
-# # Read NSQ topic for metrics.
-# [[inputs.nsq_consumer]]
-#   ## An string representing the NSQD TCP Endpoint
-#   server = "localhost:4150"
-#   topic = "telegraf"
-#   channel = "consumer"
-#   max_in_flight = 100
-#
-#   ## Data format to consume.
-#   ## Each data format has its own unique set of configuration options, read
-#   ## more about them here:
-#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md
-#   data_format = "influx"
-
-
-# # Generic socket listener capable of handling multiple socket types.
-# [[inputs.socket_listener]]
-#   ## URL to listen on
-#   ## service_address="tcp://:8094"
-#   ## service_address="tcp://127.0.0.1:http"
-#   ## service_address="tcp4://:8094"
-#   ## service_address="tcp6://:8094"
-#   ## service_address="tcp6://[2001:db8::1]:8094"
-#   ## service_address="udp://:8094"
-#   ## service_address="udp4://:8094"
-#   ## service_address="udp6://:8094"
-#   ## service_address="unix:///tmp/telegraf.sock"
-#   ## service_address="unixgram:///tmp/telegraf.sock"
-#   # service_address = "tcp://:8094"
-#
-#   ## Maximum number of concurrent connections.
-#   ## Only applies to stream sockets (e.g. TCP).
-#   ## 0 (default) is unlimited.
-#   # max_connections = 1024
-#
-#   ## Maximum socket buffer size in bytes.
-#   ## For stream sockets, once the buffer fills up, the sender will start backing up.
-#   ## For datagram sockets, once the buffer fills up, metrics will start dropping.
-#   ## Defaults to the OS default.
-#   # read_buffer_size = 65535
-#
-#   ## Period between keep alive probes.
-#   ## Only applies to TCP sockets.
-#   ## 0 disables keep alive probes.
-#   ## Defaults to the OS configuration.
-#   # keep_alive_period = "5m"
-#
-#   ## Data format to consume.
-#   ## Each data format has its own unique set of configuration options, read
-#   ## more about them here:
-#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md
-#   # data_format = "influx"
-
-
-# # Statsd Server
-# [[inputs.statsd]]
-#   ## Address and port to host UDP listener on
-#   service_address = ":8125"
-#
-#   ## The following configuration options control when telegraf clears it's cache
-#   ## of previous values. If set to false, then telegraf will only clear it's
-#   ## cache when the daemon is restarted.
-#   ## Reset gauges every interval (default=true)
-#   delete_gauges = true
-#   ## Reset counters every interval (default=true)
-#   delete_counters = true
-#   ## Reset sets every interval (default=true)
-#   delete_sets = true
-#   ## Reset timings & histograms every interval (default=true)
-#   delete_timings = true
-#
-#   ## Percentiles to calculate for timing & histogram stats
-#   percentiles = [90]
-#
-#   ## separator to use between elements of a statsd metric
-#   metric_separator = "_"
-#
-#   ## Parses tags in the datadog statsd format
-#   ## http://docs.datadoghq.com/guides/dogstatsd/
-#   parse_data_dog_tags = false
-#
-#   ## Statsd data translation templates, more info can be read here:
-#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md#graphite
-#   # templates = ["cpu.* measurement*"]
-#
-#   ## Number of UDP messages allowed to queue up, once filled,
-#   ## the statsd server will start dropping packets
-#   allowed_pending_messages = 10000
-#
-#   ## Number of timing/histogram values to track per-measurement in the
-#   ## calculation of percentiles. Raising this limit increases the accuracy
-#   ## of percentiles but also increases the memory usage and cpu time.
-#   percentile_limit = 1000
-
-
-# # Stream a log file, like the tail -f command
-# [[inputs.tail]]
-#   ## files to tail.
-#   ## These accept standard unix glob matching rules, but with the addition of
-#   ## ** as a "super asterisk". ie:
-#   ##   "/var/log/**.log"  -> recursively find all .log files in /var/log
-#   ##   "/var/log/*/*.log" -> find all .log files with a parent dir in /var/log
-#   ##   "/var/log/apache.log" -> just tail the apache log file
-#   ##
-#   ## See https://github.com/gobwas/glob for more examples
-#   ##
-#   files = ["/var/mymetrics.out"]
-#   ## Read file from beginning.
-#   from_beginning = false
-#   ## Whether file is a named pipe
-#   pipe = false
-#
-#   ## Data format to consume.
-#   ## Each data format has its own unique set of configuration options, read
-#   ## more about them here:
-#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md
-#   data_format = "influx"
-
-
-# # Generic TCP listener
-# [[inputs.tcp_listener]]
-#   # DEPRECATED: the TCP listener plugin has been deprecated in favor of the
-#   # socket_listener plugin
-#   # see https://github.com/influxdata/telegraf/tree/master/plugins/inputs/socket_listener
-
-
-# # Generic UDP listener
-# [[inputs.udp_listener]]
-#   # DEPRECATED: the TCP listener plugin has been deprecated in favor of the
-#   # socket_listener plugin
-#   # see https://github.com/influxdata/telegraf/tree/master/plugins/inputs/socket_listener
-
-
-# # A Webhooks Event collector
-# [[inputs.webhooks]]
-#   ## Address and port to host Webhook listener on
-#   service_address = ":1619"
-#
-#   [inputs.webhooks.filestack]
-#     path = "/filestack"
-#
-#   [inputs.webhooks.github]
-#     path = "/github"
-#     secret = ""
-#
-#   [inputs.webhooks.mandrill]
-#     path = "/mandrill"
-#
-#   [inputs.webhooks.rollbar]
-#     path = "/rollbar"
-#
-#   [inputs.webhooks.papertrail]
-#     path = "/papertrail"
-
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/aggregator/Aggregator.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/aggregator/Aggregator.java
index 154c00baeca5e9121a5c3c05d98073379cbd6229..4db3a8f611e7011148054914cf498feea1d23f18 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/aggregator/Aggregator.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/aggregator/Aggregator.java
@@ -1,18 +1,18 @@
-package eu.decideh2020.telegraf.components.aggregator;
-
-import eu.decideh2020.telegraf.components.document.Plugin;
-import java.io.Serializable;
-
-
-public abstract class Aggregator extends Plugin implements Serializable
-{
-	private static final long serialVersionUID = -2415130324787920995L;
-	
-  
-	protected Aggregator() {}
-  
-	protected Aggregator(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment) {
-		super(definitionText, simpleName, fullName, namePreComment);
-	}
-}
+package eu.decideh2020.telegraf.components.aggregator;
+
+import eu.decideh2020.telegraf.components.document.Plugin;
+import java.io.Serializable;
+
+
+public abstract class Aggregator extends Plugin implements Serializable
+{
+	private static final long serialVersionUID = -2415130324787920995L;
+	
+  
+	protected Aggregator() {}
+  
+	protected Aggregator(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment) {
+		super(definitionText, simpleName, fullName, namePreComment);
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/aggregator/AggregatorsMinMax.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/aggregator/AggregatorsMinMax.java
index bfc6a1039a7082f2a62b6e750b62ea95efdb4578..ae1cabbb9e536d573f11b1adeb113dd79d966f3c 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/aggregator/AggregatorsMinMax.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/aggregator/AggregatorsMinMax.java
@@ -1,67 +1,67 @@
-package eu.decideh2020.telegraf.components.aggregator;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-public final class AggregatorsMinMax extends Aggregator implements Serializable
-{
-	private static final long serialVersionUID = 8173335977972162931L;
-  
-	private static final String DEFINITION_TEXT = "# Keep the aggregate min/max of each metric passing through.";
-	private static final String SIMPLE_NAME = "aggregators.minmax";
-	private static final String FULL_NAME = "[[aggregators.minmax]]";
-	private static final String KV_PERIOD = "period";
-	private static final String KV_DROP_ORIGINAL = "drop_original";
-	
-  
-	public AggregatorsMinMax() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public AggregatorsMinMax(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-	
-  
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "## General Aggregator Arguments:"));
-		list.add(new Comment(2, "## The period on which to flush & clear the aggregator."));
-		keyValuePairList.add(new KeyValuePair(1, KV_PERIOD, null, null, null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## If true, the original metric will be dropped by the"));
-		list.add(new Comment(2, "## aggregator and will not get sent to the output plugins."));
-		keyValuePairList.add(new KeyValuePair(2, KV_DROP_ORIGINAL, null, null, null, list));
-	}
-  
-	
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("AggregatorsMinMax { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.aggregator;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+public final class AggregatorsMinMax extends Aggregator implements Serializable
+{
+	private static final long serialVersionUID = 8173335977972162931L;
+  
+	private static final String DEFINITION_TEXT = "# Keep the aggregate min/max of each metric passing through.";
+	private static final String SIMPLE_NAME = "aggregators.minmax";
+	private static final String FULL_NAME = "[[aggregators.minmax]]";
+	private static final String KV_PERIOD = "period";
+	private static final String KV_DROP_ORIGINAL = "drop_original";
+	
+  
+	public AggregatorsMinMax() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public AggregatorsMinMax(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+	
+  
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "## General Aggregator Arguments:"));
+		list.add(new Comment(2, "## The period on which to flush & clear the aggregator."));
+		keyValuePairList.add(new KeyValuePair(1, KV_PERIOD, null, null, null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## If true, the original metric will be dropped by the"));
+		list.add(new Comment(2, "## aggregator and will not get sent to the output plugins."));
+		keyValuePairList.add(new KeyValuePair(2, KV_DROP_ORIGINAL, null, null, null, list));
+	}
+  
+	
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("AggregatorsMinMax { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/document/Comment.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/document/Comment.java
index 9b651a099648588febd9349904374bc69aca4253..83afec7b360d73d51ee8f65a6224f4226dc79a16 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/document/Comment.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/document/Comment.java
@@ -1,50 +1,50 @@
-package eu.decideh2020.telegraf.components.document;
-
-import java.io.Serializable;
-
-public final class Comment implements Serializable
-{
-	private static final long serialVersionUID = 3054192472488223169L;
-	
-	private Integer order;
-	private String text;
-	
-  
-	public Comment() {
-		order = new Integer(0);
-	}
-  
-
-	public Comment(final Integer order, final String text) {
-		this.order = order;
-		this.text = text;
-	}
-	
-  
-	public Integer getOrder() {
-		return order;
-	}
-  
-	public void setOrder(final Integer order) {
-		this.order = order;
-	}
-  
-	public String getText() {
-		return text;
-	}
-  
-	public void setText(final String text) {
-		this.text = text;
-	}
-  
-	
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("Comment { ");
-		ret.append("order=").append(String.valueOf(getOrder().intValue()));
-		ret.append(", text=").append(getText());
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.document;
+
+import java.io.Serializable;
+
+public final class Comment implements Serializable
+{
+	private static final long serialVersionUID = 3054192472488223169L;
+	
+	private Integer order;
+	private String text;
+	
+  
+	public Comment() {
+		order = new Integer(0);
+	}
+  
+
+	public Comment(final Integer order, final String text) {
+		this.order = order;
+		this.text = text;
+	}
+	
+  
+	public Integer getOrder() {
+		return order;
+	}
+  
+	public void setOrder(final Integer order) {
+		this.order = order;
+	}
+  
+	public String getText() {
+		return text;
+	}
+  
+	public void setText(final String text) {
+		this.text = text;
+	}
+  
+	
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("Comment { ");
+		ret.append("order=").append(String.valueOf(getOrder().intValue()));
+		ret.append(", text=").append(getText());
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/document/Definition.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/document/Definition.java
index 7b6cc64f2ddf95655162ccad4e3e1607a9120c55..cfadd07704b9342adccd1f684a9020b5a4f97b0c 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/document/Definition.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/document/Definition.java
@@ -1,44 +1,44 @@
-package eu.decideh2020.telegraf.components.document;
-
-import java.io.Serializable;
-
-public final class Definition implements Serializable, Cloneable
-{
-	private static final long serialVersionUID = 16552310158818835L;
-	
-	private String text;
-  
-	
-	public Definition() {}
-  
-	public Definition(final String text) {
-		this.text = text;
-	}
-  
-	
-	public String getText() {
-		return text;
-	}
-  
-	public void setText(final String text) {
-		this.text = text;
-	}
-
-	
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("Definition { ");
-		ret.append("text=").append(getText());
-		ret.append(" }");
-		return ret.toString();
-	}
-	
-	
-	@Override
-	public Object clone() throws CloneNotSupportedException {
-		Object obj = null;
-		obj = super.clone();
-		return obj;
-	}
-}
+package eu.decideh2020.telegraf.components.document;
+
+import java.io.Serializable;
+
+public final class Definition implements Serializable, Cloneable
+{
+	private static final long serialVersionUID = 16552310158818835L;
+	
+	private String text;
+  
+	
+	public Definition() {}
+  
+	public Definition(final String text) {
+		this.text = text;
+	}
+  
+	
+	public String getText() {
+		return text;
+	}
+  
+	public void setText(final String text) {
+		this.text = text;
+	}
+
+	
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("Definition { ");
+		ret.append("text=").append(getText());
+		ret.append(" }");
+		return ret.toString();
+	}
+	
+	
+	@Override
+	public Object clone() throws CloneNotSupportedException {
+		Object obj = null;
+		obj = super.clone();
+		return obj;
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/document/Document.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/document/Document.java
index ff988aa4bdf8a92ca1d09b439dd91b15ad0b1d6c..1913f0ecf8a5eb1d8f3d27d079836338346970a3 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/document/Document.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/document/Document.java
@@ -1,48 +1,48 @@
-package eu.decideh2020.telegraf.components.document;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class Document implements Serializable
-{
-	private static final long serialVersionUID = 888572834851718644L;
-	
-	private List<Plugin> pluginList;
-	
-  
-	public Document() {
-		pluginList = new ArrayList<Plugin>();
-	}
-	
-  
-	public List<Plugin> getPluginList() {
-		return pluginList;
-	}
-  
-	public void setPluginList(final List<Plugin> pluginList) {
-		this.pluginList = pluginList;
-	}
-	
-  
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("Document { ");
-		ret.append("pluginList=[");
-		List<Plugin> list = getPluginList();
-		if (list != null) {
-			int len = list.size();
-			for (int i = 0; i < len; i++) {
-				if (i > 0) {
-					ret.append(", ");
-				}
-				ret.append(list.get(i));
-			}
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.document;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class Document implements Serializable
+{
+	private static final long serialVersionUID = 888572834851718644L;
+	
+	private List<Plugin> pluginList;
+	
+  
+	public Document() {
+		pluginList = new ArrayList<Plugin>();
+	}
+	
+  
+	public List<Plugin> getPluginList() {
+		return pluginList;
+	}
+  
+	public void setPluginList(final List<Plugin> pluginList) {
+		this.pluginList = pluginList;
+	}
+	
+  
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("Document { ");
+		ret.append("pluginList=[");
+		List<Plugin> list = getPluginList();
+		if (list != null) {
+			int len = list.size();
+			for (int i = 0; i < len; i++) {
+				if (i > 0) {
+					ret.append(", ");
+				}
+				ret.append(list.get(i));
+			}
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/document/FileDescriptor.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/document/FileDescriptor.java
index b1216bfa965e05288b49d974b0653a818f6b0595..d99d7b167f2d7eb6e91807b197362c78cc1bbeb8 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/document/FileDescriptor.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/document/FileDescriptor.java
@@ -1,98 +1,64 @@
-package eu.decideh2020.telegraf.components.document;
-
-import java.io.Serializable;
-
-
-public final class FileDescriptor implements Serializable
-{
-	private static final long serialVersionUID = 634536745434351149L;
-	
-	public static final String[] FILE_DESCRIPTOR_HEADER = {
-			"##/****************************************************************", 
-			"##*Copyright (c) 2017 Tecnalia.", 
-			"##*Licensed under MIT License (the \"License\");", 
-			"##*Permission is hereby granted, free of charge, to any person obtaining a copy ", 
-			"##of this software and associated documentation files (the \"Software\"), to deal ", 
-			"##in the Software without restriction, including without limitation the rights ", 
-			"##to use, copy, modify, merge, publish, distribute, sublicense, and/or sell ", 
-			"##copies of the Software, and to permit persons to whom the Software is furnished ", 
-			"##to do so, subject to the following conditions:", 
-			"##*The above copyright notice and this permission notice shall be included in all ", 
-			"##copies or substantial portions of the Software.", 
-			"##*", 
-			"##*", 
-			"##*THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, ", 
-			"##INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A ",	
-			"##PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT ", 
-			"##HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF ", 
-			"##CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE ", 
-			"##OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.", 
-			"##", 
-			"##*Contributors (in alphabetical order):", 
-			"##*Alberto Molinuevo                              Tecnalia",
-			"##*Gorka Benguria                                 Tecnalia", 
-			"##*I�aki Etxaniz                                  Tecnalia", 
-			"##*Juncal Alonso                                  Tecnalia", 
-			"##*Leire Orue-Echevarria                          Tecnalia", 
-			"##*Maria Jose Lopez                               Tecnalia", 
-			"##*Marisa Escalante                               Tecnalia", 
-			"##*", 
-			"##*Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu", 
-			"##*****************************************************************************/", 
-			"", 
-			"", 
-			"", 
-			"# Telegraf Configuration", 
-			"#", 
-			"# Telegraf is entirely plugin driven. All metrics are gathered from the", 
-			"# declared inputs, and sent to the declared outputs.", 
-			"#", 
-			"# Plugins must be declared in here to be active.", 
-			"# To deactivate a plugin, comment out the name and any variables.", 
-			"#", 
-			"# Use 'telegraf -config telegraf.conf -test' to see what metrics a config", 
-			"# file would generate.", 
-			"#", 
-			"# Environment variables can be used anywhere in this config file, simply prepend", 
-			"# them with $. For strings the variable must be within quotes (ie, \"$STR_VAR\"),", 
-			"# for numbers and booleans they should be plain (ie, $INT_VAR, $BOOL_VAR)" };
-	
-	public static final String[] FILE_DESCRIPTOR_OUTPUT_PLUGINS = {
-			"###############################################################################", 
-			"#                            OUTPUT PLUGINS                                   #", 
-			"###############################################################################", 
-			"" };
-	
-	public static final String[] FILE_DESCRIPTOR_PROCESSOR_PLUGINS = {
-			"###############################################################################", 
-			"#                            PROCESSOR PLUGINS                                #", 
-			"###############################################################################", 
-			"" };
-	
-	public static final String[] FILE_DESCRIPTOR_AGGREGATOR_PLUGINS = {
-			"###############################################################################", 
-			"#                            AGGREGATOR PLUGINS                               #", 
-			"###############################################################################", 
-			"" };
-	
-	public static final String[] FILE_DESCRIPTOR_INPUT_PLUGINS = {
-			"###############################################################################", 
-			"#                            INPUT PLUGINS                                    #", 
-			"###############################################################################", 
-			"" };
-	
-	public static final String[] FILE_DESCRIPTOR_SERVICE_INPUT_PLUGINS = {
-			"###############################################################################", 
-			"#                            SERVICE INPUT PLUGINS                            #", 
-			"###############################################################################", 
-			"" };
-  
-  
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("FileDescriptor { ");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.document;
+
+import java.io.Serializable;
+
+
+public final class FileDescriptor implements Serializable
+{
+	private static final long serialVersionUID = 634536745434351149L;
+	
+	public static final String[] FILE_DESCRIPTOR_HEADER = {
+			"# Telegraf Configuration", 
+			"#", 
+			"# Telegraf is entirely plugin driven. All metrics are gathered from the", 
+			"# declared inputs, and sent to the declared outputs.", 
+			"#", 
+			"# Plugins must be declared in here to be active.", 
+			"# To deactivate a plugin, comment out the name and any variables.", 
+			"#", 
+			"# Use 'telegraf -config telegraf.conf -test' to see what metrics a config", 
+			"# file would generate.", 
+			"#", 
+			"# Environment variables can be used anywhere in this config file, simply prepend", 
+			"# them with $. For strings the variable must be within quotes (ie, \"$STR_VAR\"),", 
+			"# for numbers and booleans they should be plain (ie, $INT_VAR, $BOOL_VAR)" };
+	
+	public static final String[] FILE_DESCRIPTOR_OUTPUT_PLUGINS = {
+			"###############################################################################", 
+			"#                            OUTPUT PLUGINS                                   #", 
+			"###############################################################################", 
+			"" };
+	
+	public static final String[] FILE_DESCRIPTOR_PROCESSOR_PLUGINS = {
+			"###############################################################################", 
+			"#                            PROCESSOR PLUGINS                                #", 
+			"###############################################################################", 
+			"" };
+	
+	public static final String[] FILE_DESCRIPTOR_AGGREGATOR_PLUGINS = {
+			"###############################################################################", 
+			"#                            AGGREGATOR PLUGINS                               #", 
+			"###############################################################################", 
+			"" };
+	
+	public static final String[] FILE_DESCRIPTOR_INPUT_PLUGINS = {
+			"###############################################################################", 
+			"#                            INPUT PLUGINS                                    #", 
+			"###############################################################################", 
+			"" };
+	
+	public static final String[] FILE_DESCRIPTOR_SERVICE_INPUT_PLUGINS = {
+			"###############################################################################", 
+			"#                            SERVICE INPUT PLUGINS                            #", 
+			"###############################################################################", 
+			"" };
+  
+  
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("FileDescriptor { ");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/document/KeyValuePair.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/document/KeyValuePair.java
index 0710c8c7751ee35715d68135c3f169c64b251231..f212cc448e2183f62137649998a80acbc5c35aaa 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/document/KeyValuePair.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/document/KeyValuePair.java
@@ -1,189 +1,189 @@
-package eu.decideh2020.telegraf.components.document;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class KeyValuePair implements Serializable, Cloneable
-{
-	private static final long serialVersionUID = 2616103523889959289L;
-	
-	private Integer order;
-	private String key;
-	private String value;
-	private String preComment;
-	private String postComment;
-	private List<Comment> commentList;
-	private String parentSubtableName;
-	private String parentSubtableFullName;
-	private List<Comment> parentSubtableCommentList;
-	private String parentSubtablePreComment;
-  
-  
-	public KeyValuePair() {
-		order = new Integer(0);
-		commentList = new ArrayList<Comment>();
-		parentSubtableCommentList = new ArrayList<Comment>();
-	}
-  
-	public KeyValuePair(final Integer order, final String key,
-			final String value, final String preComment,
-			final String postComment, final List<Comment> commentList) {
-		this.order = order;
-		this.key = key;
-		this.value = value;
-		this.preComment = preComment;
-		this.postComment = postComment;
-		this.commentList = commentList;
-		parentSubtableCommentList = new ArrayList<Comment>();
-	}
-	
-	public KeyValuePair(final Integer order, final String key,
-			final String value, final String preComment,
-			final String postComment, final List<Comment> commentList,
-			final String parentSubtableName, final String parentSubtableFullName,
-			final List<Comment> parentSubtableCommentList,
-			final String parentSubtablePreComment) {
-		this.order = order;
-		this.key = key;
-		this.value = value;
-		this.preComment = preComment;
-		this.postComment = postComment;
-		this.commentList = commentList;
-		this.parentSubtableName = parentSubtableName;
-		this.parentSubtableFullName = parentSubtableFullName;
-		this.parentSubtableCommentList = (parentSubtableCommentList != null
-				? parentSubtableCommentList : new ArrayList<Comment>());
-		this.parentSubtablePreComment = parentSubtablePreComment;
-	}
-  
-	public Integer getOrder() {
-		return order;
-	}
-  
-	public void setOrder(final Integer order) {
-		this.order = order;
-	}
-  
-	public String getKey() {
-		return key;
-	}
-  
-	public void setKey(final String key) {
-		this.key = key;
-	}
-  
-	public String getValue() {
-		return value;
-	}
-  
-	public void setValue(final String value) {
-		this.value = value;
-	}
-  
-	public String getPreComment() {
-		return preComment;
-	}
-  
-	public void setPreComment(final String preComment) {
-		this.preComment = preComment;
-	}
-  
-	public String getPostComment() {
-		return postComment;
-	}
-  
-	public void setPostComment(final String postComment) {
-		this.postComment = postComment;
-	}
-  
-	public List<Comment> getCommentList() {
-		return commentList;
-	}
-  
-	public void setCommentList(final List<Comment> commentList) {
-		this.commentList = commentList;
-	}
-  
-	public String getParentSubtableName() {
-		return parentSubtableName;
-	}
-  
-	public void setParentSubtableName(final String parentSubtableName) {
-		this.parentSubtableName = parentSubtableName;
-	}
-  
-	public String getParentSubtableFullName() {
-		return parentSubtableFullName;
-	}
-  
-	public void setParentSubtableFullName(final String parentSubtableFullName) {
-		this.parentSubtableFullName = parentSubtableFullName;
-	}
-  
-	public List<Comment> getParentSubtableCommentList() {
-		return parentSubtableCommentList;
-	}
-  
-	public void setParentSubtableCommentList(final List<Comment> parentSubtableCommentList) {
-		this.parentSubtableCommentList = parentSubtableCommentList;
-	}
-  
-	public String getParentSubtablePreComment() {
-		return parentSubtablePreComment;
-	}
-  
-	public void setParentSubtablePreComment(final String parentSubtablePreComment) {
-		this.parentSubtablePreComment = parentSubtablePreComment;
-	}
-  
-	
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("KeyValuePair { ");
-		ret.append("order=").append(String.valueOf(getOrder().intValue()));
-		ret.append(", key=").append(getKey());
-		ret.append(", value=").append(getValue());
-		ret.append(", preComment=").append(getPreComment());
-		ret.append(", postComment=").append(getPostComment());
-		ret.append(", commentList=[");
-		List<Comment> commentList = getCommentList();
-		if (commentList != null) {
-			int len = commentList.size();
-			for (int i = 0; i < len; i++) {
-				if (i > 0) {
-					ret.append(", ");
-				}
-				ret.append(commentList.get(i));
-			}
-	    }
-		ret.append("]");
-		ret.append(", parentSubtableName=").append(getParentSubtableName());
-		ret.append(", parentSubtableFullName=").append(getParentSubtableFullName());
-		ret.append(", commentList=[");
-		List<Comment> parentSubtableCommentList = getParentSubtableCommentList();
-		if (parentSubtableCommentList != null) {
-			int len = parentSubtableCommentList.size();
-			for (int i = 0; i < len; i++) {
-				if (i > 0) {
-					ret.append(", ");
-				}
-				ret.append(parentSubtableCommentList.get(i));
-			}
-		}
-		ret.append("]");
-		ret.append(", parentSubtablePreComment=").append(getParentSubtablePreComment());
-		ret.append(" }");
-		return ret.toString();
-	}
-	
-  
-	@Override
-	public Object clone() throws CloneNotSupportedException {
-		Object obj = null;
-		obj = super.clone();
-		return obj;
-	}
-}
+package eu.decideh2020.telegraf.components.document;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class KeyValuePair implements Serializable, Cloneable
+{
+	private static final long serialVersionUID = 2616103523889959289L;
+	
+	private Integer order;
+	private String key;
+	private String value;
+	private String preComment;
+	private String postComment;
+	private List<Comment> commentList;
+	private String parentSubtableName;
+	private String parentSubtableFullName;
+	private List<Comment> parentSubtableCommentList;
+	private String parentSubtablePreComment;
+  
+  
+	public KeyValuePair() {
+		order = new Integer(0);
+		commentList = new ArrayList<Comment>();
+		parentSubtableCommentList = new ArrayList<Comment>();
+	}
+  
+	public KeyValuePair(final Integer order, final String key,
+			final String value, final String preComment,
+			final String postComment, final List<Comment> commentList) {
+		this.order = order;
+		this.key = key;
+		this.value = value;
+		this.preComment = preComment;
+		this.postComment = postComment;
+		this.commentList = commentList;
+		parentSubtableCommentList = new ArrayList<Comment>();
+	}
+	
+	public KeyValuePair(final Integer order, final String key,
+			final String value, final String preComment,
+			final String postComment, final List<Comment> commentList,
+			final String parentSubtableName, final String parentSubtableFullName,
+			final List<Comment> parentSubtableCommentList,
+			final String parentSubtablePreComment) {
+		this.order = order;
+		this.key = key;
+		this.value = value;
+		this.preComment = preComment;
+		this.postComment = postComment;
+		this.commentList = commentList;
+		this.parentSubtableName = parentSubtableName;
+		this.parentSubtableFullName = parentSubtableFullName;
+		this.parentSubtableCommentList = (parentSubtableCommentList != null
+				? parentSubtableCommentList : new ArrayList<Comment>());
+		this.parentSubtablePreComment = parentSubtablePreComment;
+	}
+  
+	public Integer getOrder() {
+		return order;
+	}
+  
+	public void setOrder(final Integer order) {
+		this.order = order;
+	}
+  
+	public String getKey() {
+		return key;
+	}
+  
+	public void setKey(final String key) {
+		this.key = key;
+	}
+  
+	public String getValue() {
+		return value;
+	}
+  
+	public void setValue(final String value) {
+		this.value = value;
+	}
+  
+	public String getPreComment() {
+		return preComment;
+	}
+  
+	public void setPreComment(final String preComment) {
+		this.preComment = preComment;
+	}
+  
+	public String getPostComment() {
+		return postComment;
+	}
+  
+	public void setPostComment(final String postComment) {
+		this.postComment = postComment;
+	}
+  
+	public List<Comment> getCommentList() {
+		return commentList;
+	}
+  
+	public void setCommentList(final List<Comment> commentList) {
+		this.commentList = commentList;
+	}
+  
+	public String getParentSubtableName() {
+		return parentSubtableName;
+	}
+  
+	public void setParentSubtableName(final String parentSubtableName) {
+		this.parentSubtableName = parentSubtableName;
+	}
+  
+	public String getParentSubtableFullName() {
+		return parentSubtableFullName;
+	}
+  
+	public void setParentSubtableFullName(final String parentSubtableFullName) {
+		this.parentSubtableFullName = parentSubtableFullName;
+	}
+  
+	public List<Comment> getParentSubtableCommentList() {
+		return parentSubtableCommentList;
+	}
+  
+	public void setParentSubtableCommentList(final List<Comment> parentSubtableCommentList) {
+		this.parentSubtableCommentList = parentSubtableCommentList;
+	}
+  
+	public String getParentSubtablePreComment() {
+		return parentSubtablePreComment;
+	}
+  
+	public void setParentSubtablePreComment(final String parentSubtablePreComment) {
+		this.parentSubtablePreComment = parentSubtablePreComment;
+	}
+  
+	
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("KeyValuePair { ");
+		ret.append("order=").append(String.valueOf(getOrder().intValue()));
+		ret.append(", key=").append(getKey());
+		ret.append(", value=").append(getValue());
+		ret.append(", preComment=").append(getPreComment());
+		ret.append(", postComment=").append(getPostComment());
+		ret.append(", commentList=[");
+		List<Comment> commentList = getCommentList();
+		if (commentList != null) {
+			int len = commentList.size();
+			for (int i = 0; i < len; i++) {
+				if (i > 0) {
+					ret.append(", ");
+				}
+				ret.append(commentList.get(i));
+			}
+	    }
+		ret.append("]");
+		ret.append(", parentSubtableName=").append(getParentSubtableName());
+		ret.append(", parentSubtableFullName=").append(getParentSubtableFullName());
+		ret.append(", commentList=[");
+		List<Comment> parentSubtableCommentList = getParentSubtableCommentList();
+		if (parentSubtableCommentList != null) {
+			int len = parentSubtableCommentList.size();
+			for (int i = 0; i < len; i++) {
+				if (i > 0) {
+					ret.append(", ");
+				}
+				ret.append(parentSubtableCommentList.get(i));
+			}
+		}
+		ret.append("]");
+		ret.append(", parentSubtablePreComment=").append(getParentSubtablePreComment());
+		ret.append(" }");
+		return ret.toString();
+	}
+	
+  
+	@Override
+	public Object clone() throws CloneNotSupportedException {
+		Object obj = null;
+		obj = super.clone();
+		return obj;
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/document/Name.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/document/Name.java
index ffd5a3e0a16342a84eb3622f3445a8d49d57cc54..d46e876ab87a2b2ad18c53dca5d481edc32d88b5 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/document/Name.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/document/Name.java
@@ -1,70 +1,70 @@
-package eu.decideh2020.telegraf.components.document;
-
-import java.io.Serializable;
-
-public final class Name implements Serializable, Cloneable
-{
-	private static final long serialVersionUID = -3018967285330686007L;
-  
-	public static final String PRECOMMENT_TRUE = "# ";
-	public static final String PRECOMMENT_FALSE = "";
-  
-	private String simpleName;
-	private String fullName;
-	private String preComment;
-  
-  
-	public Name() {}
-
-	public Name(final String simpleName, final String fullName,
-			final String preComment) {
-		this.simpleName = simpleName;
-		this.fullName = fullName;
-		this.preComment = preComment;
-	}
-	
-  
-	public String getSimpleName() {
-		return simpleName;
-	}
-  
-	public void setSimpleName(final String simpleName) {
-		this.simpleName = simpleName;
-	}
-  
-	public String getFullName() {
-		return fullName;
-	}
-  
-	public void setFullName(final String fullName) {
-		this.fullName = fullName;
-	}
-  
-	public String getPreComment() {
-		return preComment;
-	}
-  
-	public void setPreComment(final String preComment) {
-		this.preComment = preComment;
-	}
-	
-	
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("Name { ");
-		ret.append("simpleName=").append(getSimpleName());
-		ret.append(", fullName=").append(getFullName());
-		ret.append(", preComment=").append(getPreComment());
-		ret.append(" }");
-		return ret.toString();
-	}
-	
-	
-	@Override
-	public Object clone() throws CloneNotSupportedException {
-		Object obj = null;
-		obj = super.clone();
-		return obj;
-	}
-}
+package eu.decideh2020.telegraf.components.document;
+
+import java.io.Serializable;
+
+public final class Name implements Serializable, Cloneable
+{
+	private static final long serialVersionUID = -3018967285330686007L;
+  
+	public static final String PRECOMMENT_TRUE = "# ";
+	public static final String PRECOMMENT_FALSE = "";
+  
+	private String simpleName;
+	private String fullName;
+	private String preComment;
+  
+  
+	public Name() {}
+
+	public Name(final String simpleName, final String fullName,
+			final String preComment) {
+		this.simpleName = simpleName;
+		this.fullName = fullName;
+		this.preComment = preComment;
+	}
+	
+  
+	public String getSimpleName() {
+		return simpleName;
+	}
+  
+	public void setSimpleName(final String simpleName) {
+		this.simpleName = simpleName;
+	}
+  
+	public String getFullName() {
+		return fullName;
+	}
+  
+	public void setFullName(final String fullName) {
+		this.fullName = fullName;
+	}
+  
+	public String getPreComment() {
+		return preComment;
+	}
+  
+	public void setPreComment(final String preComment) {
+		this.preComment = preComment;
+	}
+	
+	
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("Name { ");
+		ret.append("simpleName=").append(getSimpleName());
+		ret.append(", fullName=").append(getFullName());
+		ret.append(", preComment=").append(getPreComment());
+		ret.append(" }");
+		return ret.toString();
+	}
+	
+	
+	@Override
+	public Object clone() throws CloneNotSupportedException {
+		Object obj = null;
+		obj = super.clone();
+		return obj;
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/document/Plugin.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/document/Plugin.java
index 22b20602f31cb85598f2d44e8fb25d2820193557..a589376c69c0cefaa11017396df58e7513593e7a 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/document/Plugin.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/document/Plugin.java
@@ -1,74 +1,74 @@
-package eu.decideh2020.telegraf.components.document;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public abstract class Plugin implements Serializable, Cloneable
-{
-	private static final long serialVersionUID = 7701369001321261660L;
-	
-	protected Integer index;
-	protected Definition definition;
-	protected Name name;
-	protected List<KeyValuePair> keyValuePairList;
-	
-  
-	protected Plugin() {
-		index = new Integer(1);
-    	keyValuePairList = new ArrayList<KeyValuePair>();
-	}
-  
-	protected Plugin(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment) {
-		index = new Integer(1);
-		definition = new Definition(definitionText);
-		name = new Name(simpleName, fullName, namePreComment);
-		keyValuePairList = new ArrayList<KeyValuePair>();
-	}
-	
-  
-	public Integer getIndex() {
-		return index;
-	}
-  
-	public void setIndex(final Integer index) {
-		this.index = index;
-	}
-  
-	public Definition getDefinition() {
-		return definition;
-	}
-  
-	public void setDefinition(final Definition definition) {
-		this.definition = definition;
-	}
-  
-	public Name getName() {
-		return name;
-	}
-  
-	public void setName(final Name name) {
-		this.name = name;
-	}
-  
-	public List<KeyValuePair> getKeyValuePairList() {
-		return keyValuePairList;
-	}
-  
-	public void setKeyValuePairList(final List<KeyValuePair> keyValuePairList) {
-		this.keyValuePairList = keyValuePairList;
-	}
-  
-	
-	protected abstract void initComponent();
-  
-	
-	@Override
-	public Object clone() throws CloneNotSupportedException {
-		Object obj = null;
-		obj = super.clone();
-		return obj;
-	}
-}
+package eu.decideh2020.telegraf.components.document;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public abstract class Plugin implements Serializable, Cloneable
+{
+	private static final long serialVersionUID = 7701369001321261660L;
+	
+	protected Integer index;
+	protected Definition definition;
+	protected Name name;
+	protected List<KeyValuePair> keyValuePairList;
+	
+  
+	protected Plugin() {
+		index = new Integer(1);
+    	keyValuePairList = new ArrayList<KeyValuePair>();
+	}
+  
+	protected Plugin(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment) {
+		index = new Integer(1);
+		definition = new Definition(definitionText);
+		name = new Name(simpleName, fullName, namePreComment);
+		keyValuePairList = new ArrayList<KeyValuePair>();
+	}
+	
+  
+	public Integer getIndex() {
+		return index;
+	}
+  
+	public void setIndex(final Integer index) {
+		this.index = index;
+	}
+  
+	public Definition getDefinition() {
+		return definition;
+	}
+  
+	public void setDefinition(final Definition definition) {
+		this.definition = definition;
+	}
+  
+	public Name getName() {
+		return name;
+	}
+  
+	public void setName(final Name name) {
+		this.name = name;
+	}
+  
+	public List<KeyValuePair> getKeyValuePairList() {
+		return keyValuePairList;
+	}
+  
+	public void setKeyValuePairList(final List<KeyValuePair> keyValuePairList) {
+		this.keyValuePairList = keyValuePairList;
+	}
+  
+	
+	protected abstract void initComponent();
+  
+	
+	@Override
+	public Object clone() throws CloneNotSupportedException {
+		Object obj = null;
+		obj = super.clone();
+		return obj;
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/document/PluginEntry.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/document/PluginEntry.java
index 2dcba2dabb18abc5bf05f2dc544284ed79954e41..f9b7904f137233b17e1a0ba8b5019d83f90b7dd1 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/document/PluginEntry.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/document/PluginEntry.java
@@ -1,48 +1,48 @@
-package eu.decideh2020.telegraf.components.document;
-
-import java.io.Serializable;
-
-
-public final class PluginEntry implements Serializable
-{
-	private static final long serialVersionUID = -8818878271397559618L;
-	
-	private String name;
-	private String classFile;
-  
-	
-	public PluginEntry() {}
-  
-	public PluginEntry(final String name, final String classFile) {
-		this.name = name;
-		this.classFile = classFile;
-	}
-  
-	
-	public String getName() {
-		return name;
-	}
-  
-	public void setName(final String name) {
-		this.name = name;
-	}
-  
-	public String getClassFile() {
-		return classFile;
-	}
-  
-	public void setClassFile(final String classFile) {
-		this.classFile = classFile;
-	}
-  
-	
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("PluginEntry { ");
-		ret.append("name=").append(getName());
-		ret.append(", classFile=").append(getClassFile());
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.document;
+
+import java.io.Serializable;
+
+
+public final class PluginEntry implements Serializable
+{
+	private static final long serialVersionUID = -8818878271397559618L;
+	
+	private String name;
+	private String classFile;
+  
+	
+	public PluginEntry() {}
+  
+	public PluginEntry(final String name, final String classFile) {
+		this.name = name;
+		this.classFile = classFile;
+	}
+  
+	
+	public String getName() {
+		return name;
+	}
+  
+	public void setName(final String name) {
+		this.name = name;
+	}
+  
+	public String getClassFile() {
+		return classFile;
+	}
+  
+	public void setClassFile(final String classFile) {
+		this.classFile = classFile;
+	}
+  
+	
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("PluginEntry { ");
+		ret.append("name=").append(getName());
+		ret.append(", classFile=").append(getClassFile());
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/global/Global.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/global/Global.java
index 469c30e818ac1079d420bd06c6917433bfd4ac68..db3a007bccee7345bc8c7f94d60d6d0ff3d9121a 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/global/Global.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/global/Global.java
@@ -1,18 +1,18 @@
-package eu.decideh2020.telegraf.components.global;
-
-import eu.decideh2020.telegraf.components.document.Plugin;
-import java.io.Serializable;
-
-
-public abstract class Global extends Plugin implements Serializable
-{
-	private static final long serialVersionUID = -7119171403828310941L;
-	
-	
-	protected Global() {}
-  
-	protected Global(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment) {
-		super(definitionText, simpleName, fullName, namePreComment);
-	}
-}
+package eu.decideh2020.telegraf.components.global;
+
+import eu.decideh2020.telegraf.components.document.Plugin;
+import java.io.Serializable;
+
+
+public abstract class Global extends Plugin implements Serializable
+{
+	private static final long serialVersionUID = -7119171403828310941L;
+	
+	
+	protected Global() {}
+  
+	protected Global(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment) {
+		super(definitionText, simpleName, fullName, namePreComment);
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/global/GlobalAgent.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/global/GlobalAgent.java
index d9e3d79a3ddd850631bd2788f373abe73e7a7ad1..1959887c00fe1e704129bb272d24692d5aa35aa3 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/global/GlobalAgent.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/global/GlobalAgent.java
@@ -1,147 +1,147 @@
-package eu.decideh2020.telegraf.components.global;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class GlobalAgent extends Global implements Serializable
-{
-	private static final long serialVersionUID = 8161899016538153585L;
-	
-	private static final String DEFINITION_TEXT = "# Configuration for telegraf agent";
-	private static final String SIMPLE_NAME = "agent";
-	private static final String FULL_NAME = "[agent]";
-	private static final String KV_INTERVAL = "interval";
-	private static final String KV_ROUND_INTERVAL = "round_interval";
-	private static final String KV_METRIC_BATCH_SIZE = "metric_batch_size";
-	private static final String KV_METRIC_BUFFER_LIMIT = "metric_buffer_limit";
-	private static final String KV_COLLECTION_JITTER = "collection_jitter";
-	private static final String KV_FLUSH_INTERVAL = "flush_interval";
-	private static final String KV_FLUSH_JITTER = "flush_jitter";
-	private static final String KV_PRECISION = "precision";
-	private static final String KV_DEBUG = "debug";
-	private static final String KV_QUIET = "quiet";
-	private static final String KV_LOGFILE = "logfile";
-	private static final String KV_HOSTNAME = "hostname";
-	private static final String KV_OMIT_HOSTNAME = "omit_hostname";
-	
-  
-	public GlobalAgent() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public GlobalAgent(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-	
-  
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "## Default data collection interval for all inputs"));
-		keyValuePairList.add(new KeyValuePair(1, KV_INTERVAL, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Rounds collection interval to 'interval'"));
-		list.add(new Comment(2, "## ie, if interval=\"10s\" then always collect on :00, :10, :20, etc."));
-		keyValuePairList.add(new KeyValuePair(2, KV_ROUND_INTERVAL, null, null, null, list));
-		   
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Telegraf will send metrics to outputs in batches of at most"));
-		list.add(new Comment(3, "## metric_batch_size metrics."));
-		list.add(new Comment(4, "## This controls the size of writes that Telegraf sends to output plugins."));
-		keyValuePairList.add(new KeyValuePair(3, KV_METRIC_BATCH_SIZE, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## For failed writes, telegraf will cache metric_buffer_limit metrics for each"));
-		list.add(new Comment(3, "## output, and will flush this buffer on a successful write. Oldest metrics"));
-		list.add(new Comment(4, "## are dropped first when this buffer fills."));
-		list.add(new Comment(5, "## This buffer only fills when writes fail to output plugin(s)."));
-		keyValuePairList.add(new KeyValuePair(4, KV_METRIC_BUFFER_LIMIT, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Collection jitter is used to jitter the collection by a random amount."));
-		list.add(new Comment(3, "## Each plugin will sleep for a random time within jitter before collecting."));
-		list.add(new Comment(4, "## This can be used to avoid many plugins querying things like sysfs at the"));
-		list.add(new Comment(5, "## same time, which can have a measurable effect on the system."));
-		keyValuePairList.add(new KeyValuePair(5, KV_COLLECTION_JITTER, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Default flushing interval for all outputs. You shouldn't set this below"));
-		list.add(new Comment(3, "## interval. Maximum flush_interval will be flush_interval + flush_jitter"));
-		keyValuePairList.add(new KeyValuePair(6, KV_FLUSH_INTERVAL, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Jitter the flush interval by a random amount. This is primarily to avoid"));
-		list.add(new Comment(2, "## large write spikes for users running a large number of telegraf instances."));
-		list.add(new Comment(3, "## ie, a jitter of 5s and interval 10s means flushes will happen every 10-15s"));
-		keyValuePairList.add(new KeyValuePair(7, KV_FLUSH_JITTER, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## By default or when set to \"0s\", precision will be set to the same"));
-		list.add(new Comment(3, "## timestamp order as the collection interval, with the maximum being 1s."));
-		list.add(new Comment(4, "##   ie, when interval = \"10s\", precision will be \"1s\""));
-		list.add(new Comment(5, "##       when interval = \"250ms\", precision will be \"1ms\""));
-		list.add(new Comment(6, "## Precision will NOT be used for service inputs. It is up to each individual"));
-		list.add(new Comment(7, "## service input to set the timestamp at the appropriate precision."));
-		list.add(new Comment(8, "## Valid time units are \"ns\", \"us\" (or \"�s\"), \"ms\", \"s\"."));
-		keyValuePairList.add(new KeyValuePair(8, KV_PRECISION, null, null, null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Logging configuration:"));
-		list.add(new Comment(3, "## Run telegraf with debug log messages."));
-		keyValuePairList.add(new KeyValuePair(9, KV_DEBUG, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Run telegraf in quiet mode (error log messages only)."));
-		keyValuePairList.add(new KeyValuePair(10, KV_QUIET, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Specify the log file name. The empty string means to log to stderr."));
-		keyValuePairList.add(new KeyValuePair(11, KV_LOGFILE, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Override default hostname, if empty use os.Hostname()"));
-		keyValuePairList.add(new KeyValuePair(12, KV_HOSTNAME, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## If set to true, do no set the \"host\" tag in the telegraf agent."));
-		keyValuePairList.add(new KeyValuePair(13, KV_OMIT_HOSTNAME, null, null, null, list));
-	}
-	
-  
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("GlobalAgent { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.global;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class GlobalAgent extends Global implements Serializable
+{
+	private static final long serialVersionUID = 8161899016538153585L;
+	
+	private static final String DEFINITION_TEXT = "# Configuration for telegraf agent";
+	private static final String SIMPLE_NAME = "agent";
+	private static final String FULL_NAME = "[agent]";
+	private static final String KV_INTERVAL = "interval";
+	private static final String KV_ROUND_INTERVAL = "round_interval";
+	private static final String KV_METRIC_BATCH_SIZE = "metric_batch_size";
+	private static final String KV_METRIC_BUFFER_LIMIT = "metric_buffer_limit";
+	private static final String KV_COLLECTION_JITTER = "collection_jitter";
+	private static final String KV_FLUSH_INTERVAL = "flush_interval";
+	private static final String KV_FLUSH_JITTER = "flush_jitter";
+	private static final String KV_PRECISION = "precision";
+	private static final String KV_DEBUG = "debug";
+	private static final String KV_QUIET = "quiet";
+	private static final String KV_LOGFILE = "logfile";
+	private static final String KV_HOSTNAME = "hostname";
+	private static final String KV_OMIT_HOSTNAME = "omit_hostname";
+	
+  
+	public GlobalAgent() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public GlobalAgent(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+	
+  
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "## Default data collection interval for all inputs"));
+		keyValuePairList.add(new KeyValuePair(1, KV_INTERVAL, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Rounds collection interval to 'interval'"));
+		list.add(new Comment(2, "## ie, if interval=\"10s\" then always collect on :00, :10, :20, etc."));
+		keyValuePairList.add(new KeyValuePair(2, KV_ROUND_INTERVAL, null, null, null, list));
+		   
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Telegraf will send metrics to outputs in batches of at most"));
+		list.add(new Comment(3, "## metric_batch_size metrics."));
+		list.add(new Comment(4, "## This controls the size of writes that Telegraf sends to output plugins."));
+		keyValuePairList.add(new KeyValuePair(3, KV_METRIC_BATCH_SIZE, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## For failed writes, telegraf will cache metric_buffer_limit metrics for each"));
+		list.add(new Comment(3, "## output, and will flush this buffer on a successful write. Oldest metrics"));
+		list.add(new Comment(4, "## are dropped first when this buffer fills."));
+		list.add(new Comment(5, "## This buffer only fills when writes fail to output plugin(s)."));
+		keyValuePairList.add(new KeyValuePair(4, KV_METRIC_BUFFER_LIMIT, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Collection jitter is used to jitter the collection by a random amount."));
+		list.add(new Comment(3, "## Each plugin will sleep for a random time within jitter before collecting."));
+		list.add(new Comment(4, "## This can be used to avoid many plugins querying things like sysfs at the"));
+		list.add(new Comment(5, "## same time, which can have a measurable effect on the system."));
+		keyValuePairList.add(new KeyValuePair(5, KV_COLLECTION_JITTER, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Default flushing interval for all outputs. You shouldn't set this below"));
+		list.add(new Comment(3, "## interval. Maximum flush_interval will be flush_interval + flush_jitter"));
+		keyValuePairList.add(new KeyValuePair(6, KV_FLUSH_INTERVAL, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Jitter the flush interval by a random amount. This is primarily to avoid"));
+		list.add(new Comment(2, "## large write spikes for users running a large number of telegraf instances."));
+		list.add(new Comment(3, "## ie, a jitter of 5s and interval 10s means flushes will happen every 10-15s"));
+		keyValuePairList.add(new KeyValuePair(7, KV_FLUSH_JITTER, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## By default or when set to \"0s\", precision will be set to the same"));
+		list.add(new Comment(3, "## timestamp order as the collection interval, with the maximum being 1s."));
+		list.add(new Comment(4, "##   ie, when interval = \"10s\", precision will be \"1s\""));
+		list.add(new Comment(5, "##       when interval = \"250ms\", precision will be \"1ms\""));
+		list.add(new Comment(6, "## Precision will NOT be used for service inputs. It is up to each individual"));
+		list.add(new Comment(7, "## service input to set the timestamp at the appropriate precision."));
+		list.add(new Comment(8, "## Valid time units are \"ns\", \"us\" (or \"�s\"), \"ms\", \"s\"."));
+		keyValuePairList.add(new KeyValuePair(8, KV_PRECISION, null, null, null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Logging configuration:"));
+		list.add(new Comment(3, "## Run telegraf with debug log messages."));
+		keyValuePairList.add(new KeyValuePair(9, KV_DEBUG, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Run telegraf in quiet mode (error log messages only)."));
+		keyValuePairList.add(new KeyValuePair(10, KV_QUIET, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Specify the log file name. The empty string means to log to stderr."));
+		keyValuePairList.add(new KeyValuePair(11, KV_LOGFILE, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Override default hostname, if empty use os.Hostname()"));
+		keyValuePairList.add(new KeyValuePair(12, KV_HOSTNAME, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## If set to true, do no set the \"host\" tag in the telegraf agent."));
+		keyValuePairList.add(new KeyValuePair(13, KV_OMIT_HOSTNAME, null, null, null, list));
+	}
+	
+  
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("GlobalAgent { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/global/GlobalGlobalTags.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/global/GlobalGlobalTags.java
index 906568816c104896a451ce54834587a3ed6f2ac0..ad240b95e680ff8f9927cc5ecb84008a80ecabb7 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/global/GlobalGlobalTags.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/global/GlobalGlobalTags.java
@@ -1,67 +1,67 @@
-package eu.decideh2020.telegraf.components.global;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class GlobalGlobalTags extends Global implements Serializable
-{
-	private static final long serialVersionUID = 5219802430024169909L;
-  
-	private static final String DEFINITION_TEXT = "# Global tags can be specified here in key=\"value\" format.";
-	private static final String SIMPLE_NAME = "global_tags";
-	private static final String FULL_NAME = "[global_tags]";
-	private static final String KV_DC = "dc";
-	private static final String KV_RACK = "rack";
-	private static final String KV_USER = "user";
-	
-  
-	public GlobalGlobalTags() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public GlobalGlobalTags(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-	
-  
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		keyValuePairList.add(new KeyValuePair(1, KV_DC, null, "# ", "# will tag all metrics with dc=us-east-1", null));
-    
-		keyValuePairList.add(new KeyValuePair(2, KV_RACK, null, "# ", null, null));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Environment variables can be used as tags, and throughout the config file"));
-		keyValuePairList.add(new KeyValuePair(3, KV_USER, null, "# ", null, list));
-	}
-	
-  
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("GlobalGlobalTags { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.global;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class GlobalGlobalTags extends Global implements Serializable
+{
+	private static final long serialVersionUID = 5219802430024169909L;
+  
+	private static final String DEFINITION_TEXT = "# Global tags can be specified here in key=\"value\" format.";
+	private static final String SIMPLE_NAME = "global_tags";
+	private static final String FULL_NAME = "[global_tags]";
+	private static final String KV_DC = "dc";
+	private static final String KV_RACK = "rack";
+	private static final String KV_USER = "user";
+	
+  
+	public GlobalGlobalTags() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public GlobalGlobalTags(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+	
+  
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		keyValuePairList.add(new KeyValuePair(1, KV_DC, null, "# ", "# will tag all metrics with dc=us-east-1", null));
+    
+		keyValuePairList.add(new KeyValuePair(2, KV_RACK, null, "# ", null, null));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Environment variables can be used as tags, and throughout the config file"));
+		keyValuePairList.add(new KeyValuePair(3, KV_USER, null, "# ", null, list));
+	}
+	
+  
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("GlobalGlobalTags { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/Input.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/Input.java
index 04069593229ce440b6a133ed103f1c4bc32cbd42..0f25661ef461e6ee4952802e25acb3b6d468b5fd 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/Input.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/Input.java
@@ -1,18 +1,18 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Plugin;
-import java.io.Serializable;
-
-
-public abstract class Input extends Plugin implements Serializable
-{
-	private static final long serialVersionUID = 392026483157370007L;
-	
-  
-	protected Input() {}
-  
-	protected Input(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment) {
-		super(definitionText, simpleName, fullName, namePreComment);
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Plugin;
+import java.io.Serializable;
+
+
+public abstract class Input extends Plugin implements Serializable
+{
+	private static final long serialVersionUID = 392026483157370007L;
+	
+  
+	protected Input() {}
+  
+	protected Input(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment) {
+		super(definitionText, simpleName, fullName, namePreComment);
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsAerospike.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsAerospike.java
index d47d5173bf3e7abcf4557915c90b08fe482f6ca5..740b3a9901682dfadff21e1aa2b6cc06e1d29b98 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsAerospike.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsAerospike.java
@@ -1,62 +1,62 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-public final class InputsAerospike extends Input implements Serializable
-{
-	private static final long serialVersionUID = -5077636400466118535L;
-	
-	private static final String DEFINITION_TEXT = "# Read stats from aerospike server(s)";
-	private static final String SIMPLE_NAME = "inputs.aerospike";
-	private static final String FULL_NAME = "[[inputs.aerospike]]";
-	private static final String KV_SERVERS = "servers";
-  
-  
-	public InputsAerospike() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsAerospike(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-
-	
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## Aerospike servers to connect to (with port)"));
-		list.add(new Comment(2, "## This plugin will query all namespaces the aerospike"));
-		list.add(new Comment(3, "## server has configured and get stats for them."));
-		keyValuePairList.add(new KeyValuePair(1, KV_SERVERS, null, null, null, list));
-	}
-	
-  
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsAerospike { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+public final class InputsAerospike extends Input implements Serializable
+{
+	private static final long serialVersionUID = -5077636400466118535L;
+	
+	private static final String DEFINITION_TEXT = "# Read stats from aerospike server(s)";
+	private static final String SIMPLE_NAME = "inputs.aerospike";
+	private static final String FULL_NAME = "[[inputs.aerospike]]";
+	private static final String KV_SERVERS = "servers";
+  
+  
+	public InputsAerospike() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsAerospike(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+
+	
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## Aerospike servers to connect to (with port)"));
+		list.add(new Comment(2, "## This plugin will query all namespaces the aerospike"));
+		list.add(new Comment(3, "## server has configured and get stats for them."));
+		keyValuePairList.add(new KeyValuePair(1, KV_SERVERS, null, null, null, list));
+	}
+	
+  
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsAerospike { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsApache.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsApache.java
index 90ed478735fb7a7121a6625e8de55b335480413b..752f396b5ac71f349daf095ba805b8a6a992e9c3 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsApache.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsApache.java
@@ -1,93 +1,93 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsApache extends Input implements Serializable
-{
-	private static final long serialVersionUID = 4817052814172340782L;
-	
-	private static final String DEFINITION_TEXT = "# Read Apache status information (mod_status)";
-	private static final String SIMPLE_NAME = "inputs.apache";
-	private static final String FULL_NAME = "[[inputs.apache]]";
-	private static final String KV_URLS = "urls";
-	private static final String KV_USERNAME = "username";
-	private static final String KV_PASSWORD = "password";
-	private static final String KV_RESPONSE_TIMEOUT = "response_timeout";
-	private static final String KV_SSL_CA = "ssl_ca";
-	private static final String KV_SSL_CERT = "ssl_cert";
-	private static final String KV_SSL_KEY = "ssl_key";
-	private static final String KV_INSECURE_SKIP_VERIFY = "insecure_skip_verify";
-
-  
-	public InputsApache() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsApache(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-	
-  
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## An array of Apache status URI to gather stats."));
-		list.add(new Comment(2, "## Default is \"http://localhost/server-status?auto\"."));
-		keyValuePairList.add(new KeyValuePair(1, KV_URLS, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## user credentials for basic HTTP authentication"));
-		keyValuePairList.add(new KeyValuePair(2, KV_USERNAME, null, null, null, list));
-		    
-		keyValuePairList.add(new KeyValuePair(3, KV_PASSWORD, null, null, null, null));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Timeout to the complete conection and reponse time in seconds"));
-		keyValuePairList.add(new KeyValuePair(4, KV_RESPONSE_TIMEOUT, null, null, "## default to 5 seconds", list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Optional SSL Config"));
-		keyValuePairList.add(new KeyValuePair(5, KV_SSL_CA, null, "# ", null, list));
-		    
-		keyValuePairList.add(new KeyValuePair(6, KV_SSL_CERT, null, "# ", null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(7, KV_SSL_KEY, null, "# ", null, null));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Use SSL but skip chain & host verification"));
-		keyValuePairList.add(new KeyValuePair(8, KV_INSECURE_SKIP_VERIFY, null, "# ", null, list));
-	}
-	
-  
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsApache { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsApache extends Input implements Serializable
+{
+	private static final long serialVersionUID = 4817052814172340782L;
+	
+	private static final String DEFINITION_TEXT = "# Read Apache status information (mod_status)";
+	private static final String SIMPLE_NAME = "inputs.apache";
+	private static final String FULL_NAME = "[[inputs.apache]]";
+	private static final String KV_URLS = "urls";
+	private static final String KV_USERNAME = "username";
+	private static final String KV_PASSWORD = "password";
+	private static final String KV_RESPONSE_TIMEOUT = "response_timeout";
+	private static final String KV_SSL_CA = "ssl_ca";
+	private static final String KV_SSL_CERT = "ssl_cert";
+	private static final String KV_SSL_KEY = "ssl_key";
+	private static final String KV_INSECURE_SKIP_VERIFY = "insecure_skip_verify";
+
+  
+	public InputsApache() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsApache(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+	
+  
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## An array of Apache status URI to gather stats."));
+		list.add(new Comment(2, "## Default is \"http://localhost/server-status?auto\"."));
+		keyValuePairList.add(new KeyValuePair(1, KV_URLS, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## user credentials for basic HTTP authentication"));
+		keyValuePairList.add(new KeyValuePair(2, KV_USERNAME, null, null, null, list));
+		    
+		keyValuePairList.add(new KeyValuePair(3, KV_PASSWORD, null, null, null, null));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Timeout to the complete conection and reponse time in seconds"));
+		keyValuePairList.add(new KeyValuePair(4, KV_RESPONSE_TIMEOUT, null, null, "## default to 5 seconds", list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Optional SSL Config"));
+		keyValuePairList.add(new KeyValuePair(5, KV_SSL_CA, null, "# ", null, list));
+		    
+		keyValuePairList.add(new KeyValuePair(6, KV_SSL_CERT, null, "# ", null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(7, KV_SSL_KEY, null, "# ", null, null));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Use SSL but skip chain & host verification"));
+		keyValuePairList.add(new KeyValuePair(8, KV_INSECURE_SKIP_VERIFY, null, "# ", null, list));
+	}
+	
+  
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsApache { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsBcache.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsBcache.java
index dbb924f4d3a1222910bcdc39059fac35cfdeb521..d3bba6d11e6d3a49aacebdbad3babb2f1825516c 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsBcache.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsBcache.java
@@ -1,70 +1,70 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsBcache extends Input implements Serializable
-{
-	private static final long serialVersionUID = -6867304751084433268L;
-	
-	private static final String DEFINITION_TEXT = "# Read metrics of bcache from stats_total and dirty_data";
-	private static final String SIMPLE_NAME = "inputs.bcache";
-	private static final String FULL_NAME = "[[inputs.bcache]]";
-	private static final String KV_BCACHEPATH = "bcachePath";
-	private static final String KV_BCACHEDEVS = "bcacheDevs";
-  
-  
-	public InputsBcache() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsBcache(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-	
-  
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## Bcache sets path"));
-		list.add(new Comment(2, "## If not specified, then default is:"));
-		keyValuePairList.add(new KeyValuePair(1, KV_BCACHEPATH, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## By default, telegraf gather stats for all bcache devices"));
-		list.add(new Comment(3, "## Setting devices will restrict the stats to the specified"));
-		list.add(new Comment(4, "## bcache devices."));
-		keyValuePairList.add(new KeyValuePair(2, KV_BCACHEDEVS, null, null, null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsBcache { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsBcache extends Input implements Serializable
+{
+	private static final long serialVersionUID = -6867304751084433268L;
+	
+	private static final String DEFINITION_TEXT = "# Read metrics of bcache from stats_total and dirty_data";
+	private static final String SIMPLE_NAME = "inputs.bcache";
+	private static final String FULL_NAME = "[[inputs.bcache]]";
+	private static final String KV_BCACHEPATH = "bcachePath";
+	private static final String KV_BCACHEDEVS = "bcacheDevs";
+  
+  
+	public InputsBcache() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsBcache(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+	
+  
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## Bcache sets path"));
+		list.add(new Comment(2, "## If not specified, then default is:"));
+		keyValuePairList.add(new KeyValuePair(1, KV_BCACHEPATH, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## By default, telegraf gather stats for all bcache devices"));
+		list.add(new Comment(3, "## Setting devices will restrict the stats to the specified"));
+		list.add(new Comment(4, "## bcache devices."));
+		keyValuePairList.add(new KeyValuePair(2, KV_BCACHEDEVS, null, null, null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsBcache { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsCPU.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsCPU.java
index 88e0d5f83c801316ff181b3f8cac9ebd003ce6ad..3209128e47602499c978375570df9e720e1c37a0 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsCPU.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsCPU.java
@@ -1,71 +1,76 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsCPU extends Input implements Serializable
-{
-	private static final long serialVersionUID = -7043962182166291063L;
-	
-	private static final String DEFINITION_TEXT = "# Read metrics about cpu usage";
-	private static final String SIMPLE_NAME = "inputs.cpu";
-	private static final String FULL_NAME = "[[inputs.cpu]]";
-	private static final String KV_PERCPU = "percpu";
-	private static final String KV_TOTALCPU = "totalcpu";
-	private static final String KV_COLLECT_CPU_TIME = "collect_cpu_time";
-
-	
-	public InputsCPU() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsCPU(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "## Whether to report per-cpu stats or not"));
-		keyValuePairList.add(new KeyValuePair(1, KV_PERCPU, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Whether to report total system cpu stats or not"));
-		keyValuePairList.add(new KeyValuePair(2, KV_TOTALCPU, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## If true, collect raw CPU time metrics."));
-		keyValuePairList.add(new KeyValuePair(3, KV_COLLECT_CPU_TIME, null, null, null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsCPU { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsCPU extends Input implements Serializable
+{
+	private static final long serialVersionUID = -7043962182166291063L;
+	
+	private static final String DEFINITION_TEXT = "# Read metrics about cpu usage";
+	private static final String SIMPLE_NAME = "inputs.cpu";
+	private static final String FULL_NAME = "[[inputs.cpu]]";
+	private static final String KV_PERCPU = "percpu";
+	private static final String KV_TOTALCPU = "totalcpu";
+	private static final String KV_COLLECT_CPU_TIME = "collect_cpu_time";
+	private static final String KV_REPORT_ACTIVE = "report_active";
+
+	
+	public InputsCPU() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsCPU(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "## Whether to report per-cpu stats or not"));
+		keyValuePairList.add(new KeyValuePair(1, KV_PERCPU, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Whether to report total system cpu stats or not"));
+		keyValuePairList.add(new KeyValuePair(2, KV_TOTALCPU, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## If true, collect raw CPU time metrics."));
+		keyValuePairList.add(new KeyValuePair(3, KV_COLLECT_CPU_TIME, null, "# ", null, list));
+		
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## If true, compute and report the sum of all non-idle CPU states."));
+		keyValuePairList.add(new KeyValuePair(4, KV_REPORT_ACTIVE, null, "# ", null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsCPU { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsCassandra.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsCassandra.java
index 3566059c6cb4ae5043067c4341b888c6c28a95d2..fb7a22f30d89ee6aca14209f83ebc6f3b0d465f1 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsCassandra.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsCassandra.java
@@ -1,76 +1,76 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsCassandra extends Input implements Serializable
-{
-	private static final long serialVersionUID = -5186383611937697070L;
-	
-	private static final String DEFINITION_TEXT = "# Read Cassandra metrics through Jolokia";
-	private static final String SIMPLE_NAME = "inputs.cassandra";
-	private static final String FULL_NAME = "[[inputs.cassandra]]";
-	private static final String KV_CONTEXT = "context";
-	private static final String KV_SERVERS = "servers";
-	private static final String KV_METRICS = "metrics";
-  
-	
-	public InputsCassandra() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsCassandra(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-	
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "# This is the context root used to compose the jolokia url"));
-		keyValuePairList.add(new KeyValuePair(1, KV_CONTEXT, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## List of cassandra servers exposing jolokia read service"));
-		keyValuePairList.add(new KeyValuePair(2, KV_SERVERS, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## List of metrics collected on above servers"));
-		list.add(new Comment(2, "## Each metric consists of a jmx path."));
-		list.add(new Comment(3, "## This will collect all heap memory usage metrics from the jvm and"));
-		list.add(new Comment(4, "## ReadLatency metrics for all keyspaces and tables."));
-		list.add(new Comment(5, "## \"type=Table\" in the query works with Cassandra3.0. Older versions might"));
-		list.add(new Comment(6, "## need to use \"type=ColumnFamily\""));
-		keyValuePairList.add(new KeyValuePair(3, KV_METRICS, null, null, null, list));
-	}
-	
-  
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsCassandra { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsCassandra extends Input implements Serializable
+{
+	private static final long serialVersionUID = -5186383611937697070L;
+	
+	private static final String DEFINITION_TEXT = "# Read Cassandra metrics through Jolokia";
+	private static final String SIMPLE_NAME = "inputs.cassandra";
+	private static final String FULL_NAME = "[[inputs.cassandra]]";
+	private static final String KV_CONTEXT = "context";
+	private static final String KV_SERVERS = "servers";
+	private static final String KV_METRICS = "metrics";
+  
+	
+	public InputsCassandra() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsCassandra(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+	
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "# This is the context root used to compose the jolokia url"));
+		keyValuePairList.add(new KeyValuePair(1, KV_CONTEXT, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## List of cassandra servers exposing jolokia read service"));
+		keyValuePairList.add(new KeyValuePair(2, KV_SERVERS, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## List of metrics collected on above servers"));
+		list.add(new Comment(2, "## Each metric consists of a jmx path."));
+		list.add(new Comment(3, "## This will collect all heap memory usage metrics from the jvm and"));
+		list.add(new Comment(4, "## ReadLatency metrics for all keyspaces and tables."));
+		list.add(new Comment(5, "## \"type=Table\" in the query works with Cassandra3.0. Older versions might"));
+		list.add(new Comment(6, "## need to use \"type=ColumnFamily\""));
+		keyValuePairList.add(new KeyValuePair(3, KV_METRICS, null, null, null, list));
+	}
+	
+  
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsCassandra { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsCeph.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsCeph.java
index 4ec8b09c372151652cef21204c90c24e9d090acd..828ef2ffbcf0f407c9ac01fa068c9475b3a4c23f 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsCeph.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsCeph.java
@@ -1,114 +1,114 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsCeph extends Input implements Serializable
-{
-	private static final long serialVersionUID = 7729678176615642631L;
-	
-	private static final String DEFINITION_TEXT = "# Collects performance metrics from the MON and OSD nodes in a Ceph storage cluster.";
-	private static final String SIMPLE_NAME = "inputs.ceph";
-	private static final String FULL_NAME = "[[inputs.ceph]]";
-	private static final String KV_INTERVAL = "interval";
-	private static final String KV_CEPH_BINARY = "ceph_binary";
-	private static final String KV_SOCKET_DIR = "socket_dir";
-	private static final String KV_MON_PREFIX = "mon_prefix";
-	private static final String KV_OSD_PREFIX = "osd_prefix";
-	private static final String KV_SOCKET_SUFFIX = "socket_suffix";
-	private static final String KV_CEPH_USER = "ceph_user";
-	private static final String KV_CEPH_CONFIG = "ceph_config";
-	private static final String KV_GATHER_ADMIN_SOCKET_STATS = "gather_admin_socket_stats";
-	private static final String KV_GATHER_CLUSTER_STATS = "gather_cluster_stats";
-
-	
-	public InputsCeph() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsCeph(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-
-	
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "## This is the recommended interval to poll.  Too frequent and you will lose"));
-		list.add(new Comment(2, "## data points due to timeouts during rebalancing and recovery"));
-		keyValuePairList.add(new KeyValuePair(1, KV_INTERVAL, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## All configuration values are optional, defaults are shown below"));
-		list.add(new Comment(3, ""));
-		list.add(new Comment(4, "## location of ceph binary"));
-		keyValuePairList.add(new KeyValuePair(2, KV_CEPH_BINARY, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(1, "## directory in which to look for socket files"));
-		keyValuePairList.add(new KeyValuePair(3, KV_SOCKET_DIR, null, null, null, list));
-		   
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## prefix of MON and OSD socket files, used to determine socket type"));
-		keyValuePairList.add(new KeyValuePair(4, KV_MON_PREFIX, null, null, null, list));
-		    
-		keyValuePairList.add(new KeyValuePair(5, KV_OSD_PREFIX, null, null, null, null));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## suffix used to identify socket files"));
-		keyValuePairList.add(new KeyValuePair(6, KV_SOCKET_SUFFIX, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Ceph user to authenticate as"));
-		keyValuePairList.add(new KeyValuePair(7, KV_CEPH_USER, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Ceph configuration to use to locate the cluster"));
-		keyValuePairList.add(new KeyValuePair(8, KV_CEPH_CONFIG, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Whether to gather statistics via the admin socket"));
-		keyValuePairList.add(new KeyValuePair(9, KV_GATHER_ADMIN_SOCKET_STATS, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Whether to gather statistics via ceph commands"));
-		keyValuePairList.add(new KeyValuePair(10, KV_GATHER_CLUSTER_STATS, null, null, null, list));
-	}
-	
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsCeph { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsCeph extends Input implements Serializable
+{
+	private static final long serialVersionUID = 7729678176615642631L;
+	
+	private static final String DEFINITION_TEXT = "# Collects performance metrics from the MON and OSD nodes in a Ceph storage cluster.";
+	private static final String SIMPLE_NAME = "inputs.ceph";
+	private static final String FULL_NAME = "[[inputs.ceph]]";
+	private static final String KV_INTERVAL = "interval";
+	private static final String KV_CEPH_BINARY = "ceph_binary";
+	private static final String KV_SOCKET_DIR = "socket_dir";
+	private static final String KV_MON_PREFIX = "mon_prefix";
+	private static final String KV_OSD_PREFIX = "osd_prefix";
+	private static final String KV_SOCKET_SUFFIX = "socket_suffix";
+	private static final String KV_CEPH_USER = "ceph_user";
+	private static final String KV_CEPH_CONFIG = "ceph_config";
+	private static final String KV_GATHER_ADMIN_SOCKET_STATS = "gather_admin_socket_stats";
+	private static final String KV_GATHER_CLUSTER_STATS = "gather_cluster_stats";
+
+	
+	public InputsCeph() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsCeph(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+
+	
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "## This is the recommended interval to poll.  Too frequent and you will lose"));
+		list.add(new Comment(2, "## data points due to timeouts during rebalancing and recovery"));
+		keyValuePairList.add(new KeyValuePair(1, KV_INTERVAL, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## All configuration values are optional, defaults are shown below"));
+		list.add(new Comment(3, ""));
+		list.add(new Comment(4, "## location of ceph binary"));
+		keyValuePairList.add(new KeyValuePair(2, KV_CEPH_BINARY, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(1, "## directory in which to look for socket files"));
+		keyValuePairList.add(new KeyValuePair(3, KV_SOCKET_DIR, null, null, null, list));
+		   
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## prefix of MON and OSD socket files, used to determine socket type"));
+		keyValuePairList.add(new KeyValuePair(4, KV_MON_PREFIX, null, null, null, list));
+		    
+		keyValuePairList.add(new KeyValuePair(5, KV_OSD_PREFIX, null, null, null, null));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## suffix used to identify socket files"));
+		keyValuePairList.add(new KeyValuePair(6, KV_SOCKET_SUFFIX, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Ceph user to authenticate as"));
+		keyValuePairList.add(new KeyValuePair(7, KV_CEPH_USER, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Ceph configuration to use to locate the cluster"));
+		keyValuePairList.add(new KeyValuePair(8, KV_CEPH_CONFIG, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Whether to gather statistics via the admin socket"));
+		keyValuePairList.add(new KeyValuePair(9, KV_GATHER_ADMIN_SOCKET_STATS, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Whether to gather statistics via ceph commands"));
+		keyValuePairList.add(new KeyValuePair(10, KV_GATHER_CLUSTER_STATS, null, null, null, list));
+	}
+	
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsCeph { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsCgroup.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsCgroup.java
index c66e4595a5ddfc4caa243ee07928192496bdea74..36f3e15f85e365ca947b740b0a3814454dc08d10 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsCgroup.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsCgroup.java
@@ -1,71 +1,71 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsCgroup extends Input implements Serializable
-{
-	private static final long serialVersionUID = 5871695768711116992L;
-	
-	private static final String DEFINITION_TEXT = "# Read specific statistics per cgroup";
-	private static final String SIMPLE_NAME = "inputs.cgroup";
-	private static final String FULL_NAME = "[[inputs.cgroup]]";
-	private static final String KV_PATHS = "paths";
-	private static final String KV_FILES = "files";
-
-	
-	public InputsCgroup() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-
-	
-	public InputsCgroup(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-
-	
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "## Directories in which to look for files, globs are supported."));
-		list.add(new Comment(2, "## Consider restricting paths to the set of cgroups you really"));
-		list.add(new Comment(3, "## want to monitor if you have a large number of cgroups, to avoid"));
-		list.add(new Comment(4, "## any cardinality issues."));
-		keyValuePairList.add(new KeyValuePair(1, KV_PATHS, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## cgroup stat fields, as file names, globs are supported."));
-		list.add(new Comment(2, "## these file names are appended to each path from above."));
-		keyValuePairList.add(new KeyValuePair(2, KV_FILES, null, "# ", null, list));
-	}
-	
-  
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsCgroup { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsCgroup extends Input implements Serializable
+{
+	private static final long serialVersionUID = 5871695768711116992L;
+	
+	private static final String DEFINITION_TEXT = "# Read specific statistics per cgroup";
+	private static final String SIMPLE_NAME = "inputs.cgroup";
+	private static final String FULL_NAME = "[[inputs.cgroup]]";
+	private static final String KV_PATHS = "paths";
+	private static final String KV_FILES = "files";
+
+	
+	public InputsCgroup() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+
+	
+	public InputsCgroup(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+
+	
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "## Directories in which to look for files, globs are supported."));
+		list.add(new Comment(2, "## Consider restricting paths to the set of cgroups you really"));
+		list.add(new Comment(3, "## want to monitor if you have a large number of cgroups, to avoid"));
+		list.add(new Comment(4, "## any cardinality issues."));
+		keyValuePairList.add(new KeyValuePair(1, KV_PATHS, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## cgroup stat fields, as file names, globs are supported."));
+		list.add(new Comment(2, "## these file names are appended to each path from above."));
+		keyValuePairList.add(new KeyValuePair(2, KV_FILES, null, "# ", null, list));
+	}
+	
+  
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsCgroup { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsChrony.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsChrony.java
index adc39abbcf49a8f7eaf3ad251d32d87fe6a9c0c5..e8ca45222c37937abdc32c4e0e30f1eb48ea7b2e 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsChrony.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsChrony.java
@@ -1,61 +1,61 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsChrony extends Input implements Serializable
-{
-	private static final long serialVersionUID = -5662292613535787794L;
-	
-	private static final String DEFINITION_TEXT = "# Get standard chrony metrics, requires chronyc executable.";
-	private static final String SIMPLE_NAME = "inputs.chrony";
-	private static final String FULL_NAME = "[[inputs.chrony]]";
-	private static final String KV_DNS_LOOKUP = "dns_lookup";
-
-	
-	public InputsChrony() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsChrony(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-	
-  
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "## If true, chronyc tries to perform a DNS lookup for the time server."));
-		keyValuePairList.add(new KeyValuePair(1, KV_DNS_LOOKUP, null, "# ", null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsChrony { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsChrony extends Input implements Serializable
+{
+	private static final long serialVersionUID = -5662292613535787794L;
+	
+	private static final String DEFINITION_TEXT = "# Get standard chrony metrics, requires chronyc executable.";
+	private static final String SIMPLE_NAME = "inputs.chrony";
+	private static final String FULL_NAME = "[[inputs.chrony]]";
+	private static final String KV_DNS_LOOKUP = "dns_lookup";
+
+	
+	public InputsChrony() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsChrony(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+	
+  
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "## If true, chronyc tries to perform a DNS lookup for the time server."));
+		keyValuePairList.add(new KeyValuePair(1, KV_DNS_LOOKUP, null, "# ", null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsChrony { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsCloudwatch.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsCloudwatch.java
index 52ed9077df3718b0282eb1417320df27a8de57c2..a44f8f356c7c49be2fe6a7b2e87d0ea98fc7a72a 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsCloudwatch.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsCloudwatch.java
@@ -1,156 +1,156 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsCloudwatch extends Input implements Serializable
-{
-	private static final long serialVersionUID = -8998940820006098821L;
-  
-	private static final String DEFINITION_TEXT = "# Pull Metric Statistics from Amazon CloudWatch";
-	private static final String SIMPLE_NAME = "inputs.cloudwatch";private static final String FULL_NAME = "[[inputs.cloudwatch]]";
-	private static final String KV_REGION = "region";
-	private static final String KV_ACCESS_KEY = "access_key";
-	private static final String KV_SECRET_KEY = "secret_key";
-	private static final String KV_TOKEN = "token";
-	private static final String KV_ROLE_ARN = "role_arn";
-	private static final String KV_PROFILE = "profile";
-	private static final String KV_SHARED_CREDENTIAL_FILE = "shared_credential_file";
-	private static final String KV_PERIOD = "period";
-	private static final String KV_DELAY = "delay";
-	private static final String KV_INTERVAL = "interval";
-	private static final String KV_CACHE_TTL = "cache_ttl";
-	private static final String KV_NAMESPACE = "namespace";
-	private static final String KV_RATELIMIT = "ratelimit";
-	private static final String KV_NAMES = "names";
-	private static final String KV_NAME = "name";
-	private static final String KV_VALUE = "value";
-	private static final String ST_METRICS = "[[inputs.cloudwatch.metrics]]";
-	private static final String ST_METRICS_DIMENSIONS = "[[inputs.cloudwatch.metrics.dimensions]]";
-  
-
-	public InputsCloudwatch() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-
-	public InputsCloudwatch(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		List<Comment> subtableCommentList = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "## Amazon Region"));
-		keyValuePairList.add(new KeyValuePair(1, KV_REGION, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Amazon Credentials"));
-		list.add(new Comment(3, "## Credentials are loaded in the following order"));
-		list.add(new Comment(4, "## 1) Assumed credentials via STS if role_arn is specified"));
-		list.add(new Comment(5, "## 2) explicit credentials from 'access_key' and 'secret_key'"));
-		list.add(new Comment(6, "## 3) shared profile from 'profile'"));
-		list.add(new Comment(7, "## 4) environment variables"));
-		list.add(new Comment(8, "## 5) shared credentials file"));
-		list.add(new Comment(9, "## 6) EC2 Instance Profile"));
-		keyValuePairList.add(new KeyValuePair(2, KV_ACCESS_KEY, null, "# ", null, list));
-    
-		keyValuePairList.add(new KeyValuePair(3, KV_SECRET_KEY, null, "# ", null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(4, KV_TOKEN, null, "# ", null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(5, KV_ROLE_ARN, null, "# ", null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(6, KV_PROFILE, null, "# ", null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(7, KV_SHARED_CREDENTIAL_FILE, null, "# ", null, null));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "# The minimum period for Cloudwatch metrics is 1 minute (60s). However not all"));
-		list.add(new Comment(3, "# metrics are made available to the 1 minute period. Some are collected at"));
-		list.add(new Comment(4, "# 3 minute and 5 minutes intervals. See https://aws.amazon.com/cloudwatch/faqs/#monitoring."));
-		list.add(new Comment(5, "# Note that if a period is configured that is smaller than the minimum for a"));
-		list.add(new Comment(6, "# particular metric, that metric will not be returned by the Cloudwatch API"));
-		list.add(new Comment(7, "# and will not be collected by Telegraf."));
-		list.add(new Comment(8, "#"));
-		list.add(new Comment(9, "## Requested CloudWatch aggregation Period (required - must be a multiple of 60s)"));
-		keyValuePairList.add(new KeyValuePair(8, KV_PERIOD, null, null, null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Collection Delay (required - must account for metrics availability via CloudWatch API)"));
-		keyValuePairList.add(new KeyValuePair(9, KV_DELAY, null, null, null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Recomended: use metric 'interval' that is a multiple of 'period' to avoid"));
-		list.add(new Comment(3, "## gaps or overlap in pulled data"));
-		keyValuePairList.add(new KeyValuePair(10, KV_INTERVAL, null, null, null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Configure the TTL for the internal cache of metrics."));
-		list.add(new Comment(3, "## Defaults to 1 hr if not specified"));
-		keyValuePairList.add(new KeyValuePair(11, KV_CACHE_TTL, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Metric Statistic Namespace (required)"));
-		keyValuePairList.add(new KeyValuePair(12, KV_NAMESPACE, null, null, null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Maximum requests per second. Note that the global default AWS rate limit is"));
-		list.add(new Comment(3, "## 400 reqs/sec, so if you define multiple namespaces, these should add up to a"));
-		list.add(new Comment(4, "## maximum of 400. Optional - default value is 200."));
-		list.add(new Comment(5, "## See http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_limits.html"));
-		keyValuePairList.add(new KeyValuePair(13, KV_RATELIMIT, null, null, null, list));
-		    
-		subtableCommentList.add(new Comment(1, ""));
-		subtableCommentList.add(new Comment(2, "## Metrics to Pull (optional)"));
-		subtableCommentList.add(new Comment(3, "## Defaults to all Metrics in Namespace if nothing is provided"));
-		subtableCommentList.add(new Comment(4, "## Refreshes Namespace available metrics every 1h"));
-		keyValuePairList.add(new KeyValuePair(14, KV_NAMES, null, null, null, null, ST_METRICS, ST_METRICS, subtableCommentList, "# "));
-		    
-		subtableCommentList = new ArrayList<Comment>();
-		subtableCommentList.add(new Comment(1, ""));
-		subtableCommentList.add(new Comment(2, "## Dimension filters for Metric (optional)"));
-		keyValuePairList.add(new KeyValuePair(15, KV_NAME, null, null, null, null, ST_METRICS_DIMENSIONS, ST_METRICS_DIMENSIONS, subtableCommentList, "# "));
-		   
-		keyValuePairList.add(new KeyValuePair(16, KV_VALUE, null, null, null, null, ST_METRICS_DIMENSIONS, ST_METRICS_DIMENSIONS, null, "# "));
-	}
-	
-  
-	@Override	
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsCloudwatch { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsCloudwatch extends Input implements Serializable
+{
+	private static final long serialVersionUID = -8998940820006098821L;
+  
+	private static final String DEFINITION_TEXT = "# Pull Metric Statistics from Amazon CloudWatch";
+	private static final String SIMPLE_NAME = "inputs.cloudwatch";private static final String FULL_NAME = "[[inputs.cloudwatch]]";
+	private static final String KV_REGION = "region";
+	private static final String KV_ACCESS_KEY = "access_key";
+	private static final String KV_SECRET_KEY = "secret_key";
+	private static final String KV_TOKEN = "token";
+	private static final String KV_ROLE_ARN = "role_arn";
+	private static final String KV_PROFILE = "profile";
+	private static final String KV_SHARED_CREDENTIAL_FILE = "shared_credential_file";
+	private static final String KV_PERIOD = "period";
+	private static final String KV_DELAY = "delay";
+	private static final String KV_INTERVAL = "interval";
+	private static final String KV_CACHE_TTL = "cache_ttl";
+	private static final String KV_NAMESPACE = "namespace";
+	private static final String KV_RATELIMIT = "ratelimit";
+	private static final String KV_NAMES = "names";
+	private static final String KV_NAME = "name";
+	private static final String KV_VALUE = "value";
+	private static final String ST_METRICS = "[[inputs.cloudwatch.metrics]]";
+	private static final String ST_METRICS_DIMENSIONS = "[[inputs.cloudwatch.metrics.dimensions]]";
+  
+
+	public InputsCloudwatch() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+
+	public InputsCloudwatch(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		List<Comment> subtableCommentList = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "## Amazon Region"));
+		keyValuePairList.add(new KeyValuePair(1, KV_REGION, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Amazon Credentials"));
+		list.add(new Comment(3, "## Credentials are loaded in the following order"));
+		list.add(new Comment(4, "## 1) Assumed credentials via STS if role_arn is specified"));
+		list.add(new Comment(5, "## 2) explicit credentials from 'access_key' and 'secret_key'"));
+		list.add(new Comment(6, "## 3) shared profile from 'profile'"));
+		list.add(new Comment(7, "## 4) environment variables"));
+		list.add(new Comment(8, "## 5) shared credentials file"));
+		list.add(new Comment(9, "## 6) EC2 Instance Profile"));
+		keyValuePairList.add(new KeyValuePair(2, KV_ACCESS_KEY, null, "# ", null, list));
+    
+		keyValuePairList.add(new KeyValuePair(3, KV_SECRET_KEY, null, "# ", null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(4, KV_TOKEN, null, "# ", null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(5, KV_ROLE_ARN, null, "# ", null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(6, KV_PROFILE, null, "# ", null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(7, KV_SHARED_CREDENTIAL_FILE, null, "# ", null, null));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "# The minimum period for Cloudwatch metrics is 1 minute (60s). However not all"));
+		list.add(new Comment(3, "# metrics are made available to the 1 minute period. Some are collected at"));
+		list.add(new Comment(4, "# 3 minute and 5 minutes intervals. See https://aws.amazon.com/cloudwatch/faqs/#monitoring."));
+		list.add(new Comment(5, "# Note that if a period is configured that is smaller than the minimum for a"));
+		list.add(new Comment(6, "# particular metric, that metric will not be returned by the Cloudwatch API"));
+		list.add(new Comment(7, "# and will not be collected by Telegraf."));
+		list.add(new Comment(8, "#"));
+		list.add(new Comment(9, "## Requested CloudWatch aggregation Period (required - must be a multiple of 60s)"));
+		keyValuePairList.add(new KeyValuePair(8, KV_PERIOD, null, null, null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Collection Delay (required - must account for metrics availability via CloudWatch API)"));
+		keyValuePairList.add(new KeyValuePair(9, KV_DELAY, null, null, null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Recomended: use metric 'interval' that is a multiple of 'period' to avoid"));
+		list.add(new Comment(3, "## gaps or overlap in pulled data"));
+		keyValuePairList.add(new KeyValuePair(10, KV_INTERVAL, null, null, null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Configure the TTL for the internal cache of metrics."));
+		list.add(new Comment(3, "## Defaults to 1 hr if not specified"));
+		keyValuePairList.add(new KeyValuePair(11, KV_CACHE_TTL, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Metric Statistic Namespace (required)"));
+		keyValuePairList.add(new KeyValuePair(12, KV_NAMESPACE, null, null, null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Maximum requests per second. Note that the global default AWS rate limit is"));
+		list.add(new Comment(3, "## 400 reqs/sec, so if you define multiple namespaces, these should add up to a"));
+		list.add(new Comment(4, "## maximum of 400. Optional - default value is 200."));
+		list.add(new Comment(5, "## See http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_limits.html"));
+		keyValuePairList.add(new KeyValuePair(13, KV_RATELIMIT, null, null, null, list));
+		    
+		subtableCommentList.add(new Comment(1, ""));
+		subtableCommentList.add(new Comment(2, "## Metrics to Pull (optional)"));
+		subtableCommentList.add(new Comment(3, "## Defaults to all Metrics in Namespace if nothing is provided"));
+		subtableCommentList.add(new Comment(4, "## Refreshes Namespace available metrics every 1h"));
+		keyValuePairList.add(new KeyValuePair(14, KV_NAMES, null, null, null, null, ST_METRICS, ST_METRICS, subtableCommentList, "# "));
+		    
+		subtableCommentList = new ArrayList<Comment>();
+		subtableCommentList.add(new Comment(1, ""));
+		subtableCommentList.add(new Comment(2, "## Dimension filters for Metric (optional)"));
+		keyValuePairList.add(new KeyValuePair(15, KV_NAME, null, null, null, null, ST_METRICS_DIMENSIONS, ST_METRICS_DIMENSIONS, subtableCommentList, "# "));
+		   
+		keyValuePairList.add(new KeyValuePair(16, KV_VALUE, null, null, null, null, ST_METRICS_DIMENSIONS, ST_METRICS_DIMENSIONS, null, "# "));
+	}
+	
+  
+	@Override	
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsCloudwatch { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsConntrack.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsConntrack.java
index c79b326a459564c880d160380ad68d8d336c50bd..ec9f8c14462e5df559e6761e888f15e8a9e29354 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsConntrack.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsConntrack.java
@@ -1,73 +1,73 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsConntrack extends Input implements Serializable
-{
-	private static final long serialVersionUID = -1740252981290287308L;
-	
-	private static final String DEFINITION_TEXT = "# Collects conntrack stats from the configured directories and files.";
-	private static final String SIMPLE_NAME = "inputs.conntrack";
-	private static final String FULL_NAME = "[[inputs.conntrack]]";
-	private static final String KV_FILES = "files";
-	private static final String KV_DIRS = "dirs";
-  
-
-	public InputsConntrack() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsConntrack(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-	
-  
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "## The following defaults would work with multiple versions of conntrack."));
-		list.add(new Comment(2, "## Note the nf_ and ip_ filename prefixes are mutually exclusive across"));
-		list.add(new Comment(3, "## kernel versions, as are the directory locations."));
-		list.add(new Comment(4, ""));
-		list.add(new Comment(5, "## Superset of filenames to look for within the conntrack dirs."));
-		list.add(new Comment(6, "## Missing files will be ignored."));
-		keyValuePairList.add(new KeyValuePair(1, KV_FILES, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Directories to search within for the conntrack files above."));
-		list.add(new Comment(3, "## Missing directrories will be ignored."));
-		keyValuePairList.add(new KeyValuePair(2, KV_DIRS, null, null, null, list));
-	}
-	
-  
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsConntrack { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsConntrack extends Input implements Serializable
+{
+	private static final long serialVersionUID = -1740252981290287308L;
+	
+	private static final String DEFINITION_TEXT = "# Collects conntrack stats from the configured directories and files.";
+	private static final String SIMPLE_NAME = "inputs.conntrack";
+	private static final String FULL_NAME = "[[inputs.conntrack]]";
+	private static final String KV_FILES = "files";
+	private static final String KV_DIRS = "dirs";
+  
+
+	public InputsConntrack() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsConntrack(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+	
+  
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "## The following defaults would work with multiple versions of conntrack."));
+		list.add(new Comment(2, "## Note the nf_ and ip_ filename prefixes are mutually exclusive across"));
+		list.add(new Comment(3, "## kernel versions, as are the directory locations."));
+		list.add(new Comment(4, ""));
+		list.add(new Comment(5, "## Superset of filenames to look for within the conntrack dirs."));
+		list.add(new Comment(6, "## Missing files will be ignored."));
+		keyValuePairList.add(new KeyValuePair(1, KV_FILES, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Directories to search within for the conntrack files above."));
+		list.add(new Comment(3, "## Missing directrories will be ignored."));
+		keyValuePairList.add(new KeyValuePair(2, KV_DIRS, null, null, null, list));
+	}
+	
+  
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsConntrack { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsConsul.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsConsul.java
index 025b98e359712d171d45e364f828a8173e7f898f..fb29cfaec939c82cab14423ec84607b5d705bb01 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsConsul.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsConsul.java
@@ -1,88 +1,88 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsConsul extends Input implements Serializable
-{
-	private static final long serialVersionUID = -796374563245724905L;
-	
-	private static final String DEFINITION_TEXT = "# Gather health check statuses from services registered in Consul";
-	private static final String SIMPLE_NAME = "inputs.consul";
-	private static final String FULL_NAME = "[[inputs.consul]]";
-	private static final String KV_ADDRESS = "address";
-	private static final String KV_SCHEME = "scheme";
-	private static final String KV_TOKEN = "token";
-	private static final String KV_USERNAME = "username";
-	private static final String KV_PASSWORD = "password";
-	private static final String KV_DATACENTRE = "datacentre";
-  
-	
-	public InputsConsul() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-
-	public InputsConsul(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## Most of these values defaults to the one configured on a Consul's agent level."));
-		list.add(new Comment(2, "## Optional Consul server address (default: \"localhost\")"));
-		keyValuePairList.add(new KeyValuePair(1, KV_ADDRESS, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Optional URI scheme for the Consul server (default: \"http\")"));
-		keyValuePairList.add(new KeyValuePair(2, KV_SCHEME, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Optional ACL token used in every request (default: \"\")"));
-		keyValuePairList.add(new KeyValuePair(3, KV_TOKEN, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Optional username used for request HTTP Basic Authentication (default: \"\")"));
-		keyValuePairList.add(new KeyValuePair(4, KV_USERNAME, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Optional password used for HTTP Basic Authentication (default: \"\")"));
-		keyValuePairList.add(new KeyValuePair(5, KV_PASSWORD, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Optional data centre to query the health checks from (default: \"\")"));
-		keyValuePairList.add(new KeyValuePair(6, KV_DATACENTRE, null, "# ", null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsConsul { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsConsul extends Input implements Serializable
+{
+	private static final long serialVersionUID = -796374563245724905L;
+	
+	private static final String DEFINITION_TEXT = "# Gather health check statuses from services registered in Consul";
+	private static final String SIMPLE_NAME = "inputs.consul";
+	private static final String FULL_NAME = "[[inputs.consul]]";
+	private static final String KV_ADDRESS = "address";
+	private static final String KV_SCHEME = "scheme";
+	private static final String KV_TOKEN = "token";
+	private static final String KV_USERNAME = "username";
+	private static final String KV_PASSWORD = "password";
+	private static final String KV_DATACENTRE = "datacentre";
+  
+	
+	public InputsConsul() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+
+	public InputsConsul(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## Most of these values defaults to the one configured on a Consul's agent level."));
+		list.add(new Comment(2, "## Optional Consul server address (default: \"localhost\")"));
+		keyValuePairList.add(new KeyValuePair(1, KV_ADDRESS, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Optional URI scheme for the Consul server (default: \"http\")"));
+		keyValuePairList.add(new KeyValuePair(2, KV_SCHEME, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Optional ACL token used in every request (default: \"\")"));
+		keyValuePairList.add(new KeyValuePair(3, KV_TOKEN, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Optional username used for request HTTP Basic Authentication (default: \"\")"));
+		keyValuePairList.add(new KeyValuePair(4, KV_USERNAME, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Optional password used for HTTP Basic Authentication (default: \"\")"));
+		keyValuePairList.add(new KeyValuePair(5, KV_PASSWORD, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Optional data centre to query the health checks from (default: \"\")"));
+		keyValuePairList.add(new KeyValuePair(6, KV_DATACENTRE, null, "# ", null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsConsul { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsCouchDB.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsCouchDB.java
index 18edf0130983b11542ea36e68fa9ddaec1c543a6..fae74cb6d0c5510dfbb4238145e6765b92702851 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsCouchDB.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsCouchDB.java
@@ -1,60 +1,60 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsCouchDB extends Input implements Serializable
-{
-	private static final long serialVersionUID = -7350046354458217798L;
-	
-	private static final String DEFINITION_TEXT = "# Read CouchDB Stats from one or more servers";
-	private static final String SIMPLE_NAME = "inputs.couchdb";
-	private static final String FULL_NAME = "[[inputs.couchdb]]";
-	private static final String KV_HOSTS = "hosts";
-  
-
-	public InputsCouchDB() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsCouchDB(String definitionText, String simpleName, String fullName, String namePreComment, List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-
-  
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## Works with CouchDB stats endpoints out of the box"));
-		list.add(new Comment(2, "## Multiple HOSTs from which to read CouchDB stats:"));
-		keyValuePairList.add(new KeyValuePair(1, KV_HOSTS, null, null, null, list));
-	}
-	
-  
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsCouchDB { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsCouchDB extends Input implements Serializable
+{
+	private static final long serialVersionUID = -7350046354458217798L;
+	
+	private static final String DEFINITION_TEXT = "# Read CouchDB Stats from one or more servers";
+	private static final String SIMPLE_NAME = "inputs.couchdb";
+	private static final String FULL_NAME = "[[inputs.couchdb]]";
+	private static final String KV_HOSTS = "hosts";
+  
+
+	public InputsCouchDB() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsCouchDB(String definitionText, String simpleName, String fullName, String namePreComment, List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+
+  
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## Works with CouchDB stats endpoints out of the box"));
+		list.add(new Comment(2, "## Multiple HOSTs from which to read CouchDB stats:"));
+		keyValuePairList.add(new KeyValuePair(1, KV_HOSTS, null, null, null, list));
+	}
+	
+  
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsCouchDB { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsCouchbase.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsCouchbase.java
index 253840070776c0305551ed546f9121d9f1f20ebb..ebc4872d7f014852bd4f2455e17c82fcd425906b 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsCouchbase.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsCouchbase.java
@@ -1,69 +1,69 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsCouchbase extends Input implements Serializable
-{
-	private static final long serialVersionUID = 280389780496550118L;
-	  
-	private static final String DEFINITION_TEXT = "# Read metrics from one or many couchbase clusters";
-	private static final String SIMPLE_NAME = "inputs.couchbase";
-	private static final String FULL_NAME = "[[inputs.couchbase]]";
-	private static final String KV_SERVERS = "servers";
-
-	
-	public InputsCouchbase() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsCouchbase(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-	
-  
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## specify servers via a url matching:"));
-		list.add(new Comment(2, "##  [protocol://][:password]@address[:port]"));
-		list.add(new Comment(3, "##  e.g."));
-		list.add(new Comment(4, "##    http://couchbase-0.example.com/"));
-		list.add(new Comment(5, "##    http://admin:secret@couchbase-0.example.com:8091/"));
-		list.add(new Comment(6, "##"));
-		list.add(new Comment(7, "## If no servers are specified, then localhost is used as the host."));
-		list.add(new Comment(8, "## If no protocol is specifed, HTTP is used."));
-		list.add(new Comment(9, "## If no port is specified, 8091 is used."));
-		keyValuePairList.add(new KeyValuePair(1, KV_SERVERS, null, null, null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsCouchbase { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsCouchbase extends Input implements Serializable
+{
+	private static final long serialVersionUID = 280389780496550118L;
+	  
+	private static final String DEFINITION_TEXT = "# Read metrics from one or many couchbase clusters";
+	private static final String SIMPLE_NAME = "inputs.couchbase";
+	private static final String FULL_NAME = "[[inputs.couchbase]]";
+	private static final String KV_SERVERS = "servers";
+
+	
+	public InputsCouchbase() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsCouchbase(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+	
+  
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## specify servers via a url matching:"));
+		list.add(new Comment(2, "##  [protocol://][:password]@address[:port]"));
+		list.add(new Comment(3, "##  e.g."));
+		list.add(new Comment(4, "##    http://couchbase-0.example.com/"));
+		list.add(new Comment(5, "##    http://admin:secret@couchbase-0.example.com:8091/"));
+		list.add(new Comment(6, "##"));
+		list.add(new Comment(7, "## If no servers are specified, then localhost is used as the host."));
+		list.add(new Comment(8, "## If no protocol is specifed, HTTP is used."));
+		list.add(new Comment(9, "## If no port is specified, 8091 is used."));
+		keyValuePairList.add(new KeyValuePair(1, KV_SERVERS, null, null, null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsCouchbase { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsDMCache.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsDMCache.java
index ffe7cbfaecf46545983f0799fe78841ef3d7923e..8f1af6367f338d72eaae71489b662c1e80f55474 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsDMCache.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsDMCache.java
@@ -1,61 +1,61 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsDMCache extends Input implements Serializable
-{
-	private static final long serialVersionUID = 1971225518311922917L;
-	
-	private static final String DEFINITION_TEXT = "# Provide a native collection for dmsetup based statistics for dm-cache";
-	private static final String SIMPLE_NAME = "inputs.dmcache";
-	private static final String FULL_NAME = "[[inputs.dmcache]]";
-	private static final String KV_PER_DEVICE = "per_device";
-  
-
-	public InputsDMCache() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsDMCache(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## Whether to report per-device stats or not"));
-		keyValuePairList.add(new KeyValuePair(1, KV_PER_DEVICE, null, null, null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsDMCache { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsDMCache extends Input implements Serializable
+{
+	private static final long serialVersionUID = 1971225518311922917L;
+	
+	private static final String DEFINITION_TEXT = "# Provide a native collection for dmsetup based statistics for dm-cache";
+	private static final String SIMPLE_NAME = "inputs.dmcache";
+	private static final String FULL_NAME = "[[inputs.dmcache]]";
+	private static final String KV_PER_DEVICE = "per_device";
+  
+
+	public InputsDMCache() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsDMCache(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## Whether to report per-device stats or not"));
+		keyValuePairList.add(new KeyValuePair(1, KV_PER_DEVICE, null, null, null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsDMCache { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsDNSQuery.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsDNSQuery.java
index 3e168e7f59b2872c02fc9f87d44b487423290aff..7a813784d9c02cc49e4a19d6664b2dbaa605f187 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsDNSQuery.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsDNSQuery.java
@@ -1,85 +1,85 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsDNSQuery extends Input implements Serializable
-{
-	private static final long serialVersionUID = -430556094776458880L;
-	private static final String DEFINITION_TEXT = "# Query given DNS server and gives statistics";
-	private static final String SIMPLE_NAME = "inputs.dns_query";
-	private static final String FULL_NAME = "[[inputs.dns_query]]";
-	private static final String KV_SERVERS = "servers";
-	private static final String KV_DOMAINS = "domains";
-	private static final String KV_RECORD_TYPE = "record_type";
-	private static final String KV_PORT = "port";
-	private static final String KV_TIMEOUT = "timeout";
-  
-
-	public InputsDNSQuery() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsDNSQuery(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
- 
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## servers to query"));
-		keyValuePairList.add(new KeyValuePair(1, KV_SERVERS, null, null, "# required", list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Domains or subdomains to query. \".\"(root) is default"));
-		keyValuePairList.add(new KeyValuePair(2, KV_DOMAINS, null, null, "# optional", list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Query record type. Default is \"A\""));
-		list.add(new Comment(3, "## Posible values: A, AAAA, CNAME, MX, NS, PTR, TXT, SOA, SPF, SRV."));
-		keyValuePairList.add(new KeyValuePair(3, KV_RECORD_TYPE, null, null, "# optional", list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Dns server port. 53 is default"));
-		keyValuePairList.add(new KeyValuePair(4, KV_PORT, null, null, "# optional", list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Query timeout in seconds. Default is 2 seconds"));
-		keyValuePairList.add(new KeyValuePair(5, KV_TIMEOUT, null, null, "# optional", list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsDNSQuery { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsDNSQuery extends Input implements Serializable
+{
+	private static final long serialVersionUID = -430556094776458880L;
+	private static final String DEFINITION_TEXT = "# Query given DNS server and gives statistics";
+	private static final String SIMPLE_NAME = "inputs.dns_query";
+	private static final String FULL_NAME = "[[inputs.dns_query]]";
+	private static final String KV_SERVERS = "servers";
+	private static final String KV_DOMAINS = "domains";
+	private static final String KV_RECORD_TYPE = "record_type";
+	private static final String KV_PORT = "port";
+	private static final String KV_TIMEOUT = "timeout";
+  
+
+	public InputsDNSQuery() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsDNSQuery(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+ 
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## servers to query"));
+		keyValuePairList.add(new KeyValuePair(1, KV_SERVERS, null, null, "# required", list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Domains or subdomains to query. \".\"(root) is default"));
+		keyValuePairList.add(new KeyValuePair(2, KV_DOMAINS, null, null, "# optional", list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Query record type. Default is \"A\""));
+		list.add(new Comment(3, "## Posible values: A, AAAA, CNAME, MX, NS, PTR, TXT, SOA, SPF, SRV."));
+		keyValuePairList.add(new KeyValuePair(3, KV_RECORD_TYPE, null, null, "# optional", list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Dns server port. 53 is default"));
+		keyValuePairList.add(new KeyValuePair(4, KV_PORT, null, null, "# optional", list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Query timeout in seconds. Default is 2 seconds"));
+		keyValuePairList.add(new KeyValuePair(5, KV_TIMEOUT, null, null, "# optional", list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsDNSQuery { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsDisk.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsDisk.java
index cf1ee6c6c614b267f0cc631de531d325f4372530..00cc1a47099c060993218c61470004b63bf669bc 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsDisk.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsDisk.java
@@ -1,69 +1,68 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsDisk extends Input implements Serializable
-{
-	private static final long serialVersionUID = -6304580473288354007L;
-	
-	private static final String DEFINITION_TEXT = "# Read metrics about disk usage by mount point";
-	private static final String SIMPLE_NAME = "inputs.disk";
-	private static final String FULL_NAME = "[[inputs.disk]]";
-	private static final String KV_MOUNT_POINTS = "mount_points";
-	private static final String KV_IGNORE_FS = "ignore_fs";
-
-	
-	public InputsDisk() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsDisk(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-  
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## By default, telegraf gather stats for all mountpoints."));
-		list.add(new Comment(2, "## Setting mountpoints will restrict the stats to the specified mountpoints."));
-		keyValuePairList.add(new KeyValuePair(1, KV_MOUNT_POINTS, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Ignore some mountpoints by filesystem type. For example (dev)tmpfs (usually"));
-		list.add(new Comment(3, "## present on /run, /var/run, /dev/shm or /dev)."));
-		keyValuePairList.add(new KeyValuePair(2, KV_IGNORE_FS, null, null, null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsDisk { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsDisk extends Input implements Serializable
+{
+	private static final long serialVersionUID = -6304580473288354007L;
+	
+	private static final String DEFINITION_TEXT = "# Read metrics about disk usage by mount point";
+	private static final String SIMPLE_NAME = "inputs.disk";
+	private static final String FULL_NAME = "[[inputs.disk]]";
+	private static final String KV_MOUNT_POINTS = "mount_points";
+	private static final String KV_IGNORE_FS = "ignore_fs";
+
+	
+	public InputsDisk() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsDisk(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+  
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## By default stats will be gathered for all mount points."));
+		list.add(new Comment(2, "## Set mount_points will restrict the stats to only the specified mount points."));
+		keyValuePairList.add(new KeyValuePair(1, KV_MOUNT_POINTS, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Ignore mount points by filesystem type."));
+		keyValuePairList.add(new KeyValuePair(2, KV_IGNORE_FS, null, "# ", null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsDisk { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsDiskIO.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsDiskIO.java
index 63cef1bb2642761b0b3e1c7680385510b9c491a9..51f222da15e91913bd7e73b9f4d844aca92a9cbf 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsDiskIO.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsDiskIO.java
@@ -1,91 +1,91 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsDiskIO extends Input implements Serializable
-	{
-	private static final long serialVersionUID = -5386182707322606793L;
-	
-	private static final String DEFINITION_TEXT = "# Read metrics about disk IO by device";
-	private static final String SIMPLE_NAME = "inputs.diskio";
-	private static final String FULL_NAME = "[[inputs.diskio]]";
-	private static final String KV_DEVICES = "devices";
-	private static final String KV_SKIP_SERIAL_NUMBER = "skip_serial_number";
-	private static final String KV_DEVICE_TAGS = "device_tags";
-	private static final String KV_NAME_TEMPLATES = "name_templates";
-  
-
-	public InputsDiskIO() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsDiskIO(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-	
-  
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "## By default, telegraf will gather stats for all devices including"));
-		list.add(new Comment(2, "## disk partitions."));
-		list.add(new Comment(3, "## Setting devices will restrict the stats to the specified devices."));
-		keyValuePairList.add(new KeyValuePair(1, KV_DEVICES, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Uncomment the following line if you need disk serial numbers."));
-		keyValuePairList.add(new KeyValuePair(2, KV_SKIP_SERIAL_NUMBER, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## On systems which support it, device metadata can be added in the form of"));
-		list.add(new Comment(3, "## tags."));
-		list.add(new Comment(4, "## Currently only Linux is supported via udev properties. You can view"));
-		list.add(new Comment(5, "## available properties for a device by running:"));
-		list.add(new Comment(6, "## 'udevadm info -q property -n /dev/sda'"));
-		keyValuePairList.add(new KeyValuePair(3, KV_DEVICE_TAGS, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Using the same metadata source as device_tags, you can also customize the"));
-		list.add(new Comment(3, "## name of the device via templates."));
-		list.add(new Comment(4, "## The 'name_templates' parameter is a list of templates to try and apply to"));
-		list.add(new Comment(5, "## the device. The template may contain variables in the form of '$PROPERTY' or"));
-		list.add(new Comment(6, "## '${PROPERTY}'. The first template which does not contain any variables not"));
-		list.add(new Comment(7, "## present for the device is used as the device name tag."));
-		list.add(new Comment(8, "## The typical use case is for LVM volumes, to get the VG/LV name instead of"));
-		list.add(new Comment(9, "## the near-meaningless DM-0 name."));
-		keyValuePairList.add(new KeyValuePair(10, KV_NAME_TEMPLATES, null, "# ", null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsDiskIO { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsDiskIO extends Input implements Serializable
+	{
+	private static final long serialVersionUID = -5386182707322606793L;
+	
+	private static final String DEFINITION_TEXT = "# Read metrics about disk IO by device";
+	private static final String SIMPLE_NAME = "inputs.diskio";
+	private static final String FULL_NAME = "[[inputs.diskio]]";
+	private static final String KV_DEVICES = "devices";
+	private static final String KV_SKIP_SERIAL_NUMBER = "skip_serial_number";
+	private static final String KV_DEVICE_TAGS = "device_tags";
+	private static final String KV_NAME_TEMPLATES = "name_templates";
+  
+
+	public InputsDiskIO() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsDiskIO(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+	
+  
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "## By default, telegraf will gather stats for all devices including"));
+		list.add(new Comment(2, "## disk partitions."));
+		list.add(new Comment(3, "## Setting devices will restrict the stats to the specified devices."));
+		keyValuePairList.add(new KeyValuePair(1, KV_DEVICES, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Uncomment the following line if you need disk serial numbers."));
+		keyValuePairList.add(new KeyValuePair(2, KV_SKIP_SERIAL_NUMBER, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## On systems which support it, device metadata can be added in the form of"));
+		list.add(new Comment(3, "## tags."));
+		list.add(new Comment(4, "## Currently only Linux is supported via udev properties. You can view"));
+		list.add(new Comment(5, "## available properties for a device by running:"));
+		list.add(new Comment(6, "## 'udevadm info -q property -n /dev/sda'"));
+		keyValuePairList.add(new KeyValuePair(3, KV_DEVICE_TAGS, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Using the same metadata source as device_tags, you can also customize the"));
+		list.add(new Comment(3, "## name of the device via templates."));
+		list.add(new Comment(4, "## The 'name_templates' parameter is a list of templates to try and apply to"));
+		list.add(new Comment(5, "## the device. The template may contain variables in the form of '$PROPERTY' or"));
+		list.add(new Comment(6, "## '${PROPERTY}'. The first template which does not contain any variables not"));
+		list.add(new Comment(7, "## present for the device is used as the device name tag."));
+		list.add(new Comment(8, "## The typical use case is for LVM volumes, to get the VG/LV name instead of"));
+		list.add(new Comment(9, "## the near-meaningless DM-0 name."));
+		keyValuePairList.add(new KeyValuePair(10, KV_NAME_TEMPLATES, null, "# ", null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsDiskIO { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsDisque.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsDisque.java
index 85b96a3808d18b3fad84aa40a5a618c820cb131c..aa9b0a34adeac65151c24d74bbd73afb1f9664b9 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsDisque.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsDisque.java
@@ -1,64 +1,64 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsDisque extends Input implements Serializable
-{
-	private static final long serialVersionUID = -3767788918224217249L;
-	
-	private static final String DEFINITION_TEXT = "# Read metrics from one or many disque servers";
-	private static final String SIMPLE_NAME = "inputs.disque";
-	private static final String FULL_NAME = "[[inputs.disque]]";
-	private static final String KV_SERVERS = "servers";
-  
-	
-	public InputsDisque() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsDisque(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## An array of URI to gather stats about. Specify an ip or hostname"));
-		list.add(new Comment(2, "## with optional port and password."));
-		list.add(new Comment(3, "## ie disque://localhost, disque://10.10.3.33:18832, 10.0.0.1:10000, etc."));
-		list.add(new Comment(4, "## If no servers are specified, then localhost is used as the host."));
-		keyValuePairList.add(new KeyValuePair(1, KV_SERVERS, null, null, null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsDisque { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsDisque extends Input implements Serializable
+{
+	private static final long serialVersionUID = -3767788918224217249L;
+	
+	private static final String DEFINITION_TEXT = "# Read metrics from one or many disque servers";
+	private static final String SIMPLE_NAME = "inputs.disque";
+	private static final String FULL_NAME = "[[inputs.disque]]";
+	private static final String KV_SERVERS = "servers";
+  
+	
+	public InputsDisque() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsDisque(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## An array of URI to gather stats about. Specify an ip or hostname"));
+		list.add(new Comment(2, "## with optional port and password."));
+		list.add(new Comment(3, "## ie disque://localhost, disque://10.10.3.33:18832, 10.0.0.1:10000, etc."));
+		list.add(new Comment(4, "## If no servers are specified, then localhost is used as the host."));
+		keyValuePairList.add(new KeyValuePair(1, KV_SERVERS, null, null, null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsDisque { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsDocker.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsDocker.java
index cc8d90ecb62d97c38ef8ba02fd4a280b9e927e62..cdc74fc16038e45772954bac8b5cd495128c3f82 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsDocker.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsDocker.java
@@ -1,95 +1,95 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsDocker extends Input implements Serializable
-{
-	private static final long serialVersionUID = 2484253868249485612L;
-	
-	private static final String DEFINITION_TEXT = "# Read metrics about docker containers";
-	private static final String SIMPLE_NAME = "inputs.docker";
-	private static final String FULL_NAME = "[[inputs.docker]]";
-	private static final String KV_ENDPOINT = "endpoint";
-	private static final String KV_CONTAINER_NAMES = "container_names";
-	private static final String KV_TIMEOUT = "timeout";
-	private static final String KV_PERDEVICE = "perdevice";
-	private static final String KV_TOTAL = "total";
-	private static final String KV_DOCKER_LABEL_INCLUDE = "docker_label_include";
-	private static final String KV_DOCKER_LABEL_EXCLUDE = "docker_label_exclude";
-  
-
-	public InputsDocker() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsDocker(final String definitionText, final String simpleName,
-			final String fullName, String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## Docker Endpoint"));
-		list.add(new Comment(2, "##   To use TCP, set endpoint=\"tcp://[ip]:[port]\""));
-		list.add(new Comment(3, "##   To use environment variables (ie, docker-machine), set endpoint=\"ENV\""));
-		keyValuePairList.add(new KeyValuePair(1, KV_ENDPOINT, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Only collect metrics for these containers, collect all if empty"));
-		keyValuePairList.add(new KeyValuePair(2, KV_CONTAINER_NAMES, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Timeout for docker list, info, and stats commands"));
-		keyValuePairList.add(new KeyValuePair(3, KV_TIMEOUT, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Whether to report for each container per-device blkio (8:0, 8:1...) and"));
-		list.add(new Comment(3, "## network (eth0, eth1, ...) stats or not"));
-		keyValuePairList.add(new KeyValuePair(4, KV_PERDEVICE, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Whether to report for each container total blkio and network stats or not"));
-		keyValuePairList.add(new KeyValuePair(5, KV_TOTAL, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## docker labels to include and exclude as tags.  Globs accepted."));
-		list.add(new Comment(3, "## Note that an empty array for both will include all labels as tags"));
-		keyValuePairList.add(new KeyValuePair(6, KV_DOCKER_LABEL_INCLUDE, null, null, null, list));
-		    
-		keyValuePairList.add(new KeyValuePair(7, KV_DOCKER_LABEL_EXCLUDE, null, null, null, null));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsDocker { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsDocker extends Input implements Serializable
+{
+	private static final long serialVersionUID = 2484253868249485612L;
+	
+	private static final String DEFINITION_TEXT = "# Read metrics about docker containers";
+	private static final String SIMPLE_NAME = "inputs.docker";
+	private static final String FULL_NAME = "[[inputs.docker]]";
+	private static final String KV_ENDPOINT = "endpoint";
+	private static final String KV_CONTAINER_NAMES = "container_names";
+	private static final String KV_TIMEOUT = "timeout";
+	private static final String KV_PERDEVICE = "perdevice";
+	private static final String KV_TOTAL = "total";
+	private static final String KV_DOCKER_LABEL_INCLUDE = "docker_label_include";
+	private static final String KV_DOCKER_LABEL_EXCLUDE = "docker_label_exclude";
+  
+
+	public InputsDocker() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsDocker(final String definitionText, final String simpleName,
+			final String fullName, String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## Docker Endpoint"));
+		list.add(new Comment(2, "##   To use TCP, set endpoint=\"tcp://[ip]:[port]\""));
+		list.add(new Comment(3, "##   To use environment variables (ie, docker-machine), set endpoint=\"ENV\""));
+		keyValuePairList.add(new KeyValuePair(1, KV_ENDPOINT, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Only collect metrics for these containers, collect all if empty"));
+		keyValuePairList.add(new KeyValuePair(2, KV_CONTAINER_NAMES, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Timeout for docker list, info, and stats commands"));
+		keyValuePairList.add(new KeyValuePair(3, KV_TIMEOUT, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Whether to report for each container per-device blkio (8:0, 8:1...) and"));
+		list.add(new Comment(3, "## network (eth0, eth1, ...) stats or not"));
+		keyValuePairList.add(new KeyValuePair(4, KV_PERDEVICE, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Whether to report for each container total blkio and network stats or not"));
+		keyValuePairList.add(new KeyValuePair(5, KV_TOTAL, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## docker labels to include and exclude as tags.  Globs accepted."));
+		list.add(new Comment(3, "## Note that an empty array for both will include all labels as tags"));
+		keyValuePairList.add(new KeyValuePair(6, KV_DOCKER_LABEL_INCLUDE, null, null, null, list));
+		    
+		keyValuePairList.add(new KeyValuePair(7, KV_DOCKER_LABEL_EXCLUDE, null, null, null, null));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsDocker { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsDovecot.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsDovecot.java
index 295c56dda3379375150a036d1541461105fd3dd2..9a7082229d96cb5c1bd2bee5950c35d3e71cb891 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsDovecot.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsDovecot.java
@@ -1,76 +1,76 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsDovecot extends Input implements Serializable
-{
-	private static final long serialVersionUID = 3627067940284343939L;
-	
-	private static final String DEFINITION_TEXT = "# Read statistics from one or many dovecot servers";
-	private static final String SIMPLE_NAME = "inputs.dovecot";
-	private static final String FULL_NAME = "[[inputs.dovecot]]";
-	private static final String KV_SERVERS = "servers";
-	private static final String KV_TYPE = "type";
-	private static final String KV_FILTERS = "filters";
-  
-
-	public InputsDovecot() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsDovecot(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## specify dovecot servers via an address:port list"));
-		list.add(new Comment(2, "##  e.g."));
-		list.add(new Comment(3, "##    localhost:24242"));
-		list.add(new Comment(4, "##"));
-		list.add(new Comment(5, "## If no servers are specified, then localhost is used as the host."));
-		keyValuePairList.add(new KeyValuePair(1, KV_SERVERS, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Type is one of \"user\", \"domain\", \"ip\", or \"global\""));
-		keyValuePairList.add(new KeyValuePair(2, KV_TYPE, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Wildcard matches like \"*.com\". An empty string \"\" is same as \"*\""));
-		list.add(new Comment(2, "## If type = \"ip\" filters should be <IP/network>"));
-		keyValuePairList.add(new KeyValuePair(3, KV_FILTERS, null, null, null, list));
-	}
-  
-
-	@Override	
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsDovecot { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsDovecot extends Input implements Serializable
+{
+	private static final long serialVersionUID = 3627067940284343939L;
+	
+	private static final String DEFINITION_TEXT = "# Read statistics from one or many dovecot servers";
+	private static final String SIMPLE_NAME = "inputs.dovecot";
+	private static final String FULL_NAME = "[[inputs.dovecot]]";
+	private static final String KV_SERVERS = "servers";
+	private static final String KV_TYPE = "type";
+	private static final String KV_FILTERS = "filters";
+  
+
+	public InputsDovecot() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsDovecot(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## specify dovecot servers via an address:port list"));
+		list.add(new Comment(2, "##  e.g."));
+		list.add(new Comment(3, "##    localhost:24242"));
+		list.add(new Comment(4, "##"));
+		list.add(new Comment(5, "## If no servers are specified, then localhost is used as the host."));
+		keyValuePairList.add(new KeyValuePair(1, KV_SERVERS, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Type is one of \"user\", \"domain\", \"ip\", or \"global\""));
+		keyValuePairList.add(new KeyValuePair(2, KV_TYPE, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Wildcard matches like \"*.com\". An empty string \"\" is same as \"*\""));
+		list.add(new Comment(2, "## If type = \"ip\" filters should be <IP/network>"));
+		keyValuePairList.add(new KeyValuePair(3, KV_FILTERS, null, null, null, list));
+	}
+  
+
+	@Override	
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsDovecot { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsElasticsearch.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsElasticsearch.java
index 0ea2681fadf9383efd84a864e82ed41952372c90..a9dc63d3392dfa392337994283894b7ae73901ba 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsElasticsearch.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsElasticsearch.java
@@ -1,107 +1,107 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsElasticsearch extends Input implements Serializable
-{
-	private static final long serialVersionUID = 7014783617283981600L;
-	  
-	private static final String DEFINITION_TEXT = "# Read stats from one or more Elasticsearch servers or clusters";
-	private static final String SIMPLE_NAME = "inputs.elasticsearch";
-	private static final String FULL_NAME = "[[inputs.elasticsearch]]";
-	private static final String KV_SERVERS = "servers";
-	private static final String KV_HTTP_TIMEOUT = "http_timeout";
-	private static final String KV_LOCAL = "local";
-	private static final String KV_CLUSTER_HEALTH = "cluster_health";
-	private static final String KV_CLUSTER_STATS = "cluster_stats";
-	private static final String KV_SSL_CA = "ssl_ca";
-	private static final String KV_SSL_CERT = "ssl_cert";
-	private static final String KV_SSL_KEY = "ssl_key";
-	private static final String KV_INSECURE_SKIP_VERIFY = "insecure_skip_verify";
-  
-
-	public InputsElasticsearch() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsElasticsearch(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## specify a list of one or more Elasticsearch servers"));
-		list.add(new Comment(2, "# you can add username and password to your url to use basic authentication:"));
-		list.add(new Comment(3, "# servers=[\"http://user:pass@localhost:9200\"]"));
-		keyValuePairList.add(new KeyValuePair(1, KV_SERVERS, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Timeout for HTTP requests to the elastic search server(s)"));
-		keyValuePairList.add(new KeyValuePair(2, KV_HTTP_TIMEOUT, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## When local is true (the default), the node will read only its own stats."));
-		list.add(new Comment(3, "## Set local to false when you want to read the node stats from all nodes"));
-		list.add(new Comment(4, "## of the cluster."));
-		keyValuePairList.add(new KeyValuePair(3, KV_LOCAL, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Set cluster_health to true when you want to also obtain cluster health stats"));
-		keyValuePairList.add(new KeyValuePair(4, KV_CLUSTER_HEALTH, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Set cluster_stats to true when you want to also obtain cluster stats from the"));
-		list.add(new Comment(3, "## Master node."));
-		keyValuePairList.add(new KeyValuePair(5, KV_CLUSTER_STATS, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Optional SSL Config"));
-		keyValuePairList.add(new KeyValuePair(6, KV_SSL_CA, null, "# ", null, list));
-		    
-		keyValuePairList.add(new KeyValuePair(7, KV_SSL_CERT, null, "# ", null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(8, KV_SSL_KEY, null, "# ", null, null));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Use SSL but skip chain & host verification"));
-		keyValuePairList.add(new KeyValuePair(9, KV_INSECURE_SKIP_VERIFY, null, "# ", null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsElasticsearch { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsElasticsearch extends Input implements Serializable
+{
+	private static final long serialVersionUID = 7014783617283981600L;
+	  
+	private static final String DEFINITION_TEXT = "# Read stats from one or more Elasticsearch servers or clusters";
+	private static final String SIMPLE_NAME = "inputs.elasticsearch";
+	private static final String FULL_NAME = "[[inputs.elasticsearch]]";
+	private static final String KV_SERVERS = "servers";
+	private static final String KV_HTTP_TIMEOUT = "http_timeout";
+	private static final String KV_LOCAL = "local";
+	private static final String KV_CLUSTER_HEALTH = "cluster_health";
+	private static final String KV_CLUSTER_STATS = "cluster_stats";
+	private static final String KV_SSL_CA = "ssl_ca";
+	private static final String KV_SSL_CERT = "ssl_cert";
+	private static final String KV_SSL_KEY = "ssl_key";
+	private static final String KV_INSECURE_SKIP_VERIFY = "insecure_skip_verify";
+  
+
+	public InputsElasticsearch() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsElasticsearch(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## specify a list of one or more Elasticsearch servers"));
+		list.add(new Comment(2, "# you can add username and password to your url to use basic authentication:"));
+		list.add(new Comment(3, "# servers=[\"http://user:pass@localhost:9200\"]"));
+		keyValuePairList.add(new KeyValuePair(1, KV_SERVERS, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Timeout for HTTP requests to the elastic search server(s)"));
+		keyValuePairList.add(new KeyValuePair(2, KV_HTTP_TIMEOUT, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## When local is true (the default), the node will read only its own stats."));
+		list.add(new Comment(3, "## Set local to false when you want to read the node stats from all nodes"));
+		list.add(new Comment(4, "## of the cluster."));
+		keyValuePairList.add(new KeyValuePair(3, KV_LOCAL, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Set cluster_health to true when you want to also obtain cluster health stats"));
+		keyValuePairList.add(new KeyValuePair(4, KV_CLUSTER_HEALTH, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Set cluster_stats to true when you want to also obtain cluster stats from the"));
+		list.add(new Comment(3, "## Master node."));
+		keyValuePairList.add(new KeyValuePair(5, KV_CLUSTER_STATS, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Optional SSL Config"));
+		keyValuePairList.add(new KeyValuePair(6, KV_SSL_CA, null, "# ", null, list));
+		    
+		keyValuePairList.add(new KeyValuePair(7, KV_SSL_CERT, null, "# ", null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(8, KV_SSL_KEY, null, "# ", null, null));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Use SSL but skip chain & host verification"));
+		keyValuePairList.add(new KeyValuePair(9, KV_INSECURE_SKIP_VERIFY, null, "# ", null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsElasticsearch { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsExec.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsExec.java
index 34915a30461f75a72023bd4a589f0a9cbfeafa51..eb4f2a1560080498ffdf8ee4d3259181028d6347 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsExec.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsExec.java
@@ -1,82 +1,82 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsExec extends Input implements Serializable
-{
-	private static final long serialVersionUID = -988909275779838167L;
-	  
-	private static final String DEFINITION_TEXT = "# Read metrics from one or more commands that can output to stdout";
-	private static final String SIMPLE_NAME = "inputs.exec";
-	private static final String FULL_NAME = "[[inputs.exec]]";
-	private static final String KV_COMMANDS = "commands";
-	private static final String KV_TIMEOUT = "timeout";
-	private static final String KV_NAME_SUFFIX = "name_suffix";
-	private static final String KV_DATA_FORMAT = "data_format";
-  
-
-	public InputsExec() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsExec(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## Commands array"));
-		keyValuePairList.add(new KeyValuePair(1, KV_COMMANDS, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Timeout for each command to complete."));
-		keyValuePairList.add(new KeyValuePair(2, KV_TIMEOUT, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## measurement name suffix (for separating different commands)"));
-		keyValuePairList.add(new KeyValuePair(3, KV_NAME_SUFFIX, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Data format to consume."));
-		list.add(new Comment(3, "## Each data format has its own unique set of configuration options, read"));
-		list.add(new Comment(4, "## more about them here:"));
-		list.add(new Comment(5, "## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md"));
-		keyValuePairList.add(new KeyValuePair(4, KV_DATA_FORMAT, null, null, null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsExec { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsExec extends Input implements Serializable
+{
+	private static final long serialVersionUID = -988909275779838167L;
+	  
+	private static final String DEFINITION_TEXT = "# Read metrics from one or more commands that can output to stdout";
+	private static final String SIMPLE_NAME = "inputs.exec";
+	private static final String FULL_NAME = "[[inputs.exec]]";
+	private static final String KV_COMMANDS = "commands";
+	private static final String KV_TIMEOUT = "timeout";
+	private static final String KV_NAME_SUFFIX = "name_suffix";
+	private static final String KV_DATA_FORMAT = "data_format";
+  
+
+	public InputsExec() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsExec(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## Commands array"));
+		keyValuePairList.add(new KeyValuePair(1, KV_COMMANDS, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Timeout for each command to complete."));
+		keyValuePairList.add(new KeyValuePair(2, KV_TIMEOUT, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## measurement name suffix (for separating different commands)"));
+		keyValuePairList.add(new KeyValuePair(3, KV_NAME_SUFFIX, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Data format to consume."));
+		list.add(new Comment(3, "## Each data format has its own unique set of configuration options, read"));
+		list.add(new Comment(4, "## more about them here:"));
+		list.add(new Comment(5, "## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md"));
+		keyValuePairList.add(new KeyValuePair(4, KV_DATA_FORMAT, null, null, null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsExec { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsFilestat.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsFilestat.java
index fbe70096a49632903f025eb83198677dc4213080..a68043dc33d560265f3be2c6486ae036d6fe326e 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsFilestat.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsFilestat.java
@@ -1,74 +1,74 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsFilestat extends Input implements Serializable
-{
-	private static final long serialVersionUID = 4123945699667499375L;
-	
-	private static final String DEFINITION_TEXT = "# Read stats about given file(s)";
-	private static final String SIMPLE_NAME = "inputs.filestat";
-	private static final String FULL_NAME = "[[inputs.filestat]]";
-	private static final String KV_FILES = "files";
-	private static final String KV_MD5 = "md5";
-  
-
-	public InputsFilestat() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsFilestat(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## Files to gather stats about."));
-		list.add(new Comment(2, "## These accept standard unix glob matching rules, but with the addition of"));
-		list.add(new Comment(3, "## ** as a \"super asterisk\". ie:"));
-		list.add(new Comment(4, "##   \"/var/log/**.log\"  -> recursively find all .log files in /var/log"));
-		list.add(new Comment(5, "##   \"/var/log/*/*.log\" -> find all .log files with a parent dir in /var/log"));
-		list.add(new Comment(6, "##   \"/var/log/apache.log\" -> just tail the apache log file"));
-		list.add(new Comment(7, "##"));
-		list.add(new Comment(8, "## See https://github.com/gobwas/glob for more examples"));
-		list.add(new Comment(9, "##"));
-		keyValuePairList.add(new KeyValuePair(1, KV_FILES, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## If true, read the entire file and calculate an md5 checksum."));
-		keyValuePairList.add(new KeyValuePair(2, KV_MD5, null, null, null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsFilestat { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsFilestat extends Input implements Serializable
+{
+	private static final long serialVersionUID = 4123945699667499375L;
+	
+	private static final String DEFINITION_TEXT = "# Read stats about given file(s)";
+	private static final String SIMPLE_NAME = "inputs.filestat";
+	private static final String FULL_NAME = "[[inputs.filestat]]";
+	private static final String KV_FILES = "files";
+	private static final String KV_MD5 = "md5";
+  
+
+	public InputsFilestat() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsFilestat(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## Files to gather stats about."));
+		list.add(new Comment(2, "## These accept standard unix glob matching rules, but with the addition of"));
+		list.add(new Comment(3, "## ** as a \"super asterisk\". ie:"));
+		list.add(new Comment(4, "##   \"/var/log/**.log\"  -> recursively find all .log files in /var/log"));
+		list.add(new Comment(5, "##   \"/var/log/*/*.log\" -> find all .log files with a parent dir in /var/log"));
+		list.add(new Comment(6, "##   \"/var/log/apache.log\" -> just tail the apache log file"));
+		list.add(new Comment(7, "##"));
+		list.add(new Comment(8, "## See https://github.com/gobwas/glob for more examples"));
+		list.add(new Comment(9, "##"));
+		keyValuePairList.add(new KeyValuePair(1, KV_FILES, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## If true, read the entire file and calculate an md5 checksum."));
+		keyValuePairList.add(new KeyValuePair(2, KV_MD5, null, null, null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsFilestat { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsGraylog.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsGraylog.java
index 03cddf15f04647e44445e0648b3b96842cad9b93..8b4ccf08a6886ee2228e80cfac234fb32401f380 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsGraylog.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsGraylog.java
@@ -1,105 +1,105 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsGraylog extends Input implements Serializable
-{
-	private static final long serialVersionUID = -4959071793031941853L;
-	private static final String DEFINITION_TEXT = "# Read flattened metrics from one or more GrayLog HTTP endpoints";
-	
-	private static final String SIMPLE_NAME = "inputs.graylog";
-	private static final String FULL_NAME = "[[inputs.graylog]]";
-	private static final String KV_SERVERS = "servers";
-	private static final String KV_METRICS = "metrics";
-	private static final String KV_USERNAME = "username";
-	private static final String KV_PASSWORD = "password";
-	private static final String KV_SSL_CA = "ssl_ca";
-	private static final String KV_SSL_CERT = "ssl_cert";
-	private static final String KV_SSL_KEY = "ssl_key";
-	private static final String KV_INSECURE_SKIP_VERIFY = "insecure_skip_verify";
-  
-
-	public InputsGraylog() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsGraylog(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## API endpoint, currently supported API:"));
-		list.add(new Comment(2, "##"));
-		list.add(new Comment(3, "##   - multiple  (Ex http://<host>:12900/system/metrics/multiple)"));
-		list.add(new Comment(4, "##   - namespace (Ex http://<host>:12900/system/metrics/namespace/{namespace})"));
-		list.add(new Comment(5, "##"));
-		list.add(new Comment(6, "## For namespace endpoint, the metrics array will be ignored for that call."));
-		list.add(new Comment(7, "## Endpoint can contain namespace and multiple type calls."));
-		list.add(new Comment(8, "##"));
-		list.add(new Comment(9, "## Please check http://[graylog-server-ip]:12900/api-browser for full list"));
-		list.add(new Comment(10, "## of endpoints"));
-		keyValuePairList.add(new KeyValuePair(1, KV_SERVERS, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Metrics list"));
-		list.add(new Comment(3, "## List of metrics can be found on Graylog webservice documentation."));
-		list.add(new Comment(4, "## Or by hitting the the web service api at:"));
-		list.add(new Comment(5, "##   http://[graylog-host]:12900/system/metrics"));
-		keyValuePairList.add(new KeyValuePair(2, KV_METRICS, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Username and password"));
-		keyValuePairList.add(new KeyValuePair(3, KV_USERNAME, null, null, null, list));
-		    
-		keyValuePairList.add(new KeyValuePair(4, KV_PASSWORD, null, null, null, null));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Optional SSL Config"));
-		keyValuePairList.add(new KeyValuePair(5, KV_SSL_CA, null, "# ", null, list));
-		    
-		keyValuePairList.add(new KeyValuePair(6, KV_SSL_CERT, null, "# ", null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(7, KV_SSL_KEY, null, "# ", null, null));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Use SSL but skip chain & host verification"));
-		keyValuePairList.add(new KeyValuePair(8, KV_INSECURE_SKIP_VERIFY, null, "# ", null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsGraylog { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsGraylog extends Input implements Serializable
+{
+	private static final long serialVersionUID = -4959071793031941853L;
+	private static final String DEFINITION_TEXT = "# Read flattened metrics from one or more GrayLog HTTP endpoints";
+	
+	private static final String SIMPLE_NAME = "inputs.graylog";
+	private static final String FULL_NAME = "[[inputs.graylog]]";
+	private static final String KV_SERVERS = "servers";
+	private static final String KV_METRICS = "metrics";
+	private static final String KV_USERNAME = "username";
+	private static final String KV_PASSWORD = "password";
+	private static final String KV_SSL_CA = "ssl_ca";
+	private static final String KV_SSL_CERT = "ssl_cert";
+	private static final String KV_SSL_KEY = "ssl_key";
+	private static final String KV_INSECURE_SKIP_VERIFY = "insecure_skip_verify";
+  
+
+	public InputsGraylog() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsGraylog(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## API endpoint, currently supported API:"));
+		list.add(new Comment(2, "##"));
+		list.add(new Comment(3, "##   - multiple  (Ex http://<host>:12900/system/metrics/multiple)"));
+		list.add(new Comment(4, "##   - namespace (Ex http://<host>:12900/system/metrics/namespace/{namespace})"));
+		list.add(new Comment(5, "##"));
+		list.add(new Comment(6, "## For namespace endpoint, the metrics array will be ignored for that call."));
+		list.add(new Comment(7, "## Endpoint can contain namespace and multiple type calls."));
+		list.add(new Comment(8, "##"));
+		list.add(new Comment(9, "## Please check http://[graylog-server-ip]:12900/api-browser for full list"));
+		list.add(new Comment(10, "## of endpoints"));
+		keyValuePairList.add(new KeyValuePair(1, KV_SERVERS, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Metrics list"));
+		list.add(new Comment(3, "## List of metrics can be found on Graylog webservice documentation."));
+		list.add(new Comment(4, "## Or by hitting the the web service api at:"));
+		list.add(new Comment(5, "##   http://[graylog-host]:12900/system/metrics"));
+		keyValuePairList.add(new KeyValuePair(2, KV_METRICS, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Username and password"));
+		keyValuePairList.add(new KeyValuePair(3, KV_USERNAME, null, null, null, list));
+		    
+		keyValuePairList.add(new KeyValuePair(4, KV_PASSWORD, null, null, null, null));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Optional SSL Config"));
+		keyValuePairList.add(new KeyValuePair(5, KV_SSL_CA, null, "# ", null, list));
+		    
+		keyValuePairList.add(new KeyValuePair(6, KV_SSL_CERT, null, "# ", null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(7, KV_SSL_KEY, null, "# ", null, null));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Use SSL but skip chain & host verification"));
+		keyValuePairList.add(new KeyValuePair(8, KV_INSECURE_SKIP_VERIFY, null, "# ", null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsGraylog { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsHAProxy.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsHAProxy.java
index cd485a874b45e1f4290e0480a09f57965aea7043..648af80be4c4b7e17768f8802762d91d35695ad6 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsHAProxy.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsHAProxy.java
@@ -1,96 +1,96 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsHAProxy extends Input implements Serializable
-{
-	private static final long serialVersionUID = -2192072602774060186L;
-	
-	private static final String DEFINITION_TEXT = "# Read metrics of haproxy, via socket or csv stats page";
-	private static final String SIMPLE_NAME = "inputs.haproxy";
-	private static final String FULL_NAME = "[[inputs.haproxy]]";
-	private static final String KV_SERVERS = "servers";
-	private static final String KV_KEEP_FIELD_NAMES = "keep_field_names";
-	private static final String KV_SSL_CA = "ssl_ca";
-	private static final String KV_SSL_CERT = "ssl_cert";
-	private static final String KV_SSL_KEY = "ssl_key";
-	private static final String KV_INSECURE_SKIP_VERIFY = "insecure_skip_verify";
-  
-
-	public InputsHAProxy() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsHAProxy(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## An array of address to gather stats about. Specify an ip on hostname"));
-		list.add(new Comment(2, "## with optional port. ie localhost, 10.10.3.33:1936, etc."));
-		list.add(new Comment(3, "## Make sure you specify the complete path to the stats endpoint"));
-		list.add(new Comment(4, "## including the protocol, ie http://10.10.3.33:1936/haproxy?stats"));
-		list.add(new Comment(5, ""));
-		list.add(new Comment(6, "## If no servers are specified, then default to 127.0.0.1:1936/haproxy?stats"));
-		keyValuePairList.add(new KeyValuePair(1, KV_SERVERS, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## You can also use local socket with standard wildcard globbing."));
-		list.add(new Comment(3, "## Server address not starting with 'http' will be treated as a possible"));
-		list.add(new Comment(4, "## socket, so both examples below are valid."));
-		list.add(new Comment(5, "# servers=[\"socket:/run/haproxy/admin.sock\", \"/run/haproxy/*.sock\"]"));
-		list.add(new Comment(6, ""));
-		list.add(new Comment(7, "## By default, some of the fields are renamed from what haproxy calls them."));
-		list.add(new Comment(8, "## Setting this option to true results in the plugin keeping the original"));
-		list.add(new Comment(9, "## field names."));
-		keyValuePairList.add(new KeyValuePair(2, KV_KEEP_FIELD_NAMES, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Optional SSL Config"));
-		keyValuePairList.add(new KeyValuePair(3, KV_SSL_CA, null, "# ", null, list));
-		    
-		keyValuePairList.add(new KeyValuePair(4, KV_SSL_CERT, null, "# ", null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(5, KV_SSL_KEY, null, "# ", null, null));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Use SSL but skip chain & host verification"));
-		keyValuePairList.add(new KeyValuePair(6, KV_INSECURE_SKIP_VERIFY, null, "# ", null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsHAProxy { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsHAProxy extends Input implements Serializable
+{
+	private static final long serialVersionUID = -2192072602774060186L;
+	
+	private static final String DEFINITION_TEXT = "# Read metrics of haproxy, via socket or csv stats page";
+	private static final String SIMPLE_NAME = "inputs.haproxy";
+	private static final String FULL_NAME = "[[inputs.haproxy]]";
+	private static final String KV_SERVERS = "servers";
+	private static final String KV_KEEP_FIELD_NAMES = "keep_field_names";
+	private static final String KV_SSL_CA = "ssl_ca";
+	private static final String KV_SSL_CERT = "ssl_cert";
+	private static final String KV_SSL_KEY = "ssl_key";
+	private static final String KV_INSECURE_SKIP_VERIFY = "insecure_skip_verify";
+  
+
+	public InputsHAProxy() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsHAProxy(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## An array of address to gather stats about. Specify an ip on hostname"));
+		list.add(new Comment(2, "## with optional port. ie localhost, 10.10.3.33:1936, etc."));
+		list.add(new Comment(3, "## Make sure you specify the complete path to the stats endpoint"));
+		list.add(new Comment(4, "## including the protocol, ie http://10.10.3.33:1936/haproxy?stats"));
+		list.add(new Comment(5, ""));
+		list.add(new Comment(6, "## If no servers are specified, then default to 127.0.0.1:1936/haproxy?stats"));
+		keyValuePairList.add(new KeyValuePair(1, KV_SERVERS, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## You can also use local socket with standard wildcard globbing."));
+		list.add(new Comment(3, "## Server address not starting with 'http' will be treated as a possible"));
+		list.add(new Comment(4, "## socket, so both examples below are valid."));
+		list.add(new Comment(5, "# servers=[\"socket:/run/haproxy/admin.sock\", \"/run/haproxy/*.sock\"]"));
+		list.add(new Comment(6, ""));
+		list.add(new Comment(7, "## By default, some of the fields are renamed from what haproxy calls them."));
+		list.add(new Comment(8, "## Setting this option to true results in the plugin keeping the original"));
+		list.add(new Comment(9, "## field names."));
+		keyValuePairList.add(new KeyValuePair(2, KV_KEEP_FIELD_NAMES, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Optional SSL Config"));
+		keyValuePairList.add(new KeyValuePair(3, KV_SSL_CA, null, "# ", null, list));
+		    
+		keyValuePairList.add(new KeyValuePair(4, KV_SSL_CERT, null, "# ", null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(5, KV_SSL_KEY, null, "# ", null, null));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Use SSL but skip chain & host verification"));
+		keyValuePairList.add(new KeyValuePair(6, KV_INSECURE_SKIP_VERIFY, null, "# ", null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsHAProxy { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsHDDTemp.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsHDDTemp.java
index 81260b88bd9ebd0274dfcf6f1cc1f096a93115dc..5e394f29668a7f68ab054ae6232aaa61a43f6b70 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsHDDTemp.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsHDDTemp.java
@@ -1,70 +1,70 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsHDDTemp extends Input implements Serializable
-{
-	private static final long serialVersionUID = 4428044029656624352L;
-	
-	private static final String DEFINITION_TEXT = "# Monitor disks' temperatures using hddtemp";
-	private static final String SIMPLE_NAME = "inputs.hddtemp";
-	private static final String FULL_NAME = "[[inputs.hddtemp]]";
-	private static final String KV_ADDRESS = "address";
-	private static final String KV_DEVICES = "devices";
-  
-
-	public InputsHDDTemp() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsHDDTemp(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## By default, telegraf gathers temps data from all disks detected by the"));
-		list.add(new Comment(2, "## hddtemp."));
-		list.add(new Comment(3, "##"));
-		list.add(new Comment(4, "## Only collect temps from the selected disks."));
-		list.add(new Comment(5, "##"));
-		list.add(new Comment(6, "## A * as the device name will return the temperature values of all disks."));
-		list.add(new Comment(7, "##"));
-		keyValuePairList.add(new KeyValuePair(1, KV_ADDRESS, null, "# ", null, list));
-		    
-		keyValuePairList.add(new KeyValuePair(2, KV_DEVICES, null, "# ", null, null));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsHDDTemp { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsHDDTemp extends Input implements Serializable
+{
+	private static final long serialVersionUID = 4428044029656624352L;
+	
+	private static final String DEFINITION_TEXT = "# Monitor disks' temperatures using hddtemp";
+	private static final String SIMPLE_NAME = "inputs.hddtemp";
+	private static final String FULL_NAME = "[[inputs.hddtemp]]";
+	private static final String KV_ADDRESS = "address";
+	private static final String KV_DEVICES = "devices";
+  
+
+	public InputsHDDTemp() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsHDDTemp(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## By default, telegraf gathers temps data from all disks detected by the"));
+		list.add(new Comment(2, "## hddtemp."));
+		list.add(new Comment(3, "##"));
+		list.add(new Comment(4, "## Only collect temps from the selected disks."));
+		list.add(new Comment(5, "##"));
+		list.add(new Comment(6, "## A * as the device name will return the temperature values of all disks."));
+		list.add(new Comment(7, "##"));
+		keyValuePairList.add(new KeyValuePair(1, KV_ADDRESS, null, "# ", null, list));
+		    
+		keyValuePairList.add(new KeyValuePair(2, KV_DEVICES, null, "# ", null, null));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsHDDTemp { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsHTTPJSON.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsHTTPJSON.java
index e156cb128c9fd5ea2c160f5284d66feb04ba784f..b1d136ca285dd685a313df2618d036106b792363 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsHTTPJSON.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsHTTPJSON.java
@@ -1,129 +1,129 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsHTTPJSON extends Input implements Serializable
-{
-	private static final long serialVersionUID = 5334207089724229176L;
-	
-	private static final String DEFINITION_TEXT = "# Read flattened metrics from one or more JSON HTTP endpoints";
-	private static final String SIMPLE_NAME = "inputs.httpjson";
-	private static final String FULL_NAME = "[[inputs.httpjson]]";
-	private static final String KV_NAME = "name";
-	private static final String KV_SERVERS = "servers";
-	private static final String KV_RESPONSE_TIMEOUT = "response_timeout";
-	private static final String KV_METHOD = "method";
-	private static final String KV_TAG_KEYS = "tag_keys";
-	private static final String KV_EVENT_TYPE = "event_type";
-	private static final String KV_THRESHOLD = "threshold";
-	private static final String KV_X_AUTH_TOKEN = "X-Auth-Token";
-	private static final String KV_APIVERSION = "apiVersion";
-	private static final String KV_SSL_CA = "ssl_ca";
-	private static final String KV_SSL_CERT = "ssl_cert";
-	private static final String KV_SSL_KEY = "ssl_key";
-	private static final String KV_INSECURE_SKIP_VERIFY = "insecure_skip_verify";
-	private static final String ST_PARAMETERS = "[inputs.httpjson.parameters]";
-	private static final String ST_HEADERS = "[inputs.httpjson.headers]";
-  
-	
-	public InputsHTTPJSON() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsHTTPJSON(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		List<Comment> subtableCommentList = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "## NOTE This plugin only reads numerical measurements, strings and booleans"));
-		list.add(new Comment(2, "## will be ignored."));
-		list.add(new Comment(3, ""));
-		list.add(new Comment(4, "## Name for the service being polled.  Will be appended to the name of the"));
-		list.add(new Comment(5, "## measurement e.g. httpjson_webserver_stats"));
-		list.add(new Comment(6, "##"));
-		list.add(new Comment(7, "## Deprecated (1.3.0): Use name_override, name_suffix, name_prefix instead."));
-		keyValuePairList.add(new KeyValuePair(1, KV_NAME, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## URL of each server in the service's cluster"));
-		keyValuePairList.add(new KeyValuePair(2, KV_SERVERS, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Set response_timeout (default 5 seconds)"));
-		keyValuePairList.add(new KeyValuePair(3, KV_RESPONSE_TIMEOUT, null, null, null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## HTTP method to use: GET or POST (case-sensitive)"));
-		keyValuePairList.add(new KeyValuePair(4, KV_METHOD, null, null, null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## List of tag names to extract from top-level of JSON server response"));
-		keyValuePairList.add(new KeyValuePair(5, KV_TAG_KEYS, null, "# ", null, list));
-    
-		subtableCommentList.add(new Comment(1, ""));
-		subtableCommentList.add(new Comment(2, "## HTTP parameters (all values must be strings).  For \"GET\" requests, data"));
-		subtableCommentList.add(new Comment(3, "## will be included in the query.  For \"POST\" requests, data will be included"));
-		subtableCommentList.add(new Comment(4, "## in the request body as \"x-www-form-urlencoded\"."));
-		keyValuePairList.add(new KeyValuePair(6, KV_EVENT_TYPE, null, null, null, null, ST_PARAMETERS, ST_PARAMETERS, subtableCommentList, "# "));
-		    
-		keyValuePairList.add(new KeyValuePair(7, KV_THRESHOLD, null, null, null, null, ST_PARAMETERS, ST_PARAMETERS, null, "# "));
-    
-		subtableCommentList = new ArrayList<Comment>();
-		subtableCommentList.add(new Comment(1, ""));
-		subtableCommentList.add(new Comment(2, "## HTTP Headers (all values must be strings)"));
-		keyValuePairList.add(new KeyValuePair(8, KV_X_AUTH_TOKEN, null, null, null, null, ST_HEADERS, ST_HEADERS, subtableCommentList, "# "));
-		    
-		keyValuePairList.add(new KeyValuePair(9, KV_APIVERSION, null, null, null, null, ST_HEADERS, ST_HEADERS, null, "# "));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Optional SSL Config"));
-		keyValuePairList.add(new KeyValuePair(10, KV_SSL_CA, null, "# ", null, list));
-		    
-		keyValuePairList.add(new KeyValuePair(11, KV_SSL_CERT, null, "# ", null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(12, KV_SSL_KEY, null, "# ", null, null));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Use SSL but skip chain & host verification"));
-		keyValuePairList.add(new KeyValuePair(13, KV_INSECURE_SKIP_VERIFY, null, "# ", null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsHTTPJSON { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsHTTPJSON extends Input implements Serializable
+{
+	private static final long serialVersionUID = 5334207089724229176L;
+	
+	private static final String DEFINITION_TEXT = "# Read flattened metrics from one or more JSON HTTP endpoints";
+	private static final String SIMPLE_NAME = "inputs.httpjson";
+	private static final String FULL_NAME = "[[inputs.httpjson]]";
+	private static final String KV_NAME = "name";
+	private static final String KV_SERVERS = "servers";
+	private static final String KV_RESPONSE_TIMEOUT = "response_timeout";
+	private static final String KV_METHOD = "method";
+	private static final String KV_TAG_KEYS = "tag_keys";
+	private static final String KV_EVENT_TYPE = "event_type";
+	private static final String KV_THRESHOLD = "threshold";
+	private static final String KV_X_AUTH_TOKEN = "X-Auth-Token";
+	private static final String KV_APIVERSION = "apiVersion";
+	private static final String KV_SSL_CA = "ssl_ca";
+	private static final String KV_SSL_CERT = "ssl_cert";
+	private static final String KV_SSL_KEY = "ssl_key";
+	private static final String KV_INSECURE_SKIP_VERIFY = "insecure_skip_verify";
+	private static final String ST_PARAMETERS = "[inputs.httpjson.parameters]";
+	private static final String ST_HEADERS = "[inputs.httpjson.headers]";
+  
+	
+	public InputsHTTPJSON() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsHTTPJSON(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		List<Comment> subtableCommentList = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "## NOTE This plugin only reads numerical measurements, strings and booleans"));
+		list.add(new Comment(2, "## will be ignored."));
+		list.add(new Comment(3, ""));
+		list.add(new Comment(4, "## Name for the service being polled.  Will be appended to the name of the"));
+		list.add(new Comment(5, "## measurement e.g. httpjson_webserver_stats"));
+		list.add(new Comment(6, "##"));
+		list.add(new Comment(7, "## Deprecated (1.3.0): Use name_override, name_suffix, name_prefix instead."));
+		keyValuePairList.add(new KeyValuePair(1, KV_NAME, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## URL of each server in the service's cluster"));
+		keyValuePairList.add(new KeyValuePair(2, KV_SERVERS, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Set response_timeout (default 5 seconds)"));
+		keyValuePairList.add(new KeyValuePair(3, KV_RESPONSE_TIMEOUT, null, null, null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## HTTP method to use: GET or POST (case-sensitive)"));
+		keyValuePairList.add(new KeyValuePair(4, KV_METHOD, null, null, null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## List of tag names to extract from top-level of JSON server response"));
+		keyValuePairList.add(new KeyValuePair(5, KV_TAG_KEYS, null, "# ", null, list));
+    
+		subtableCommentList.add(new Comment(1, ""));
+		subtableCommentList.add(new Comment(2, "## HTTP parameters (all values must be strings).  For \"GET\" requests, data"));
+		subtableCommentList.add(new Comment(3, "## will be included in the query.  For \"POST\" requests, data will be included"));
+		subtableCommentList.add(new Comment(4, "## in the request body as \"x-www-form-urlencoded\"."));
+		keyValuePairList.add(new KeyValuePair(6, KV_EVENT_TYPE, null, null, null, null, ST_PARAMETERS, ST_PARAMETERS, subtableCommentList, "# "));
+		    
+		keyValuePairList.add(new KeyValuePair(7, KV_THRESHOLD, null, null, null, null, ST_PARAMETERS, ST_PARAMETERS, null, "# "));
+    
+		subtableCommentList = new ArrayList<Comment>();
+		subtableCommentList.add(new Comment(1, ""));
+		subtableCommentList.add(new Comment(2, "## HTTP Headers (all values must be strings)"));
+		keyValuePairList.add(new KeyValuePair(8, KV_X_AUTH_TOKEN, null, null, null, null, ST_HEADERS, ST_HEADERS, subtableCommentList, "# "));
+		    
+		keyValuePairList.add(new KeyValuePair(9, KV_APIVERSION, null, null, null, null, ST_HEADERS, ST_HEADERS, null, "# "));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Optional SSL Config"));
+		keyValuePairList.add(new KeyValuePair(10, KV_SSL_CA, null, "# ", null, list));
+		    
+		keyValuePairList.add(new KeyValuePair(11, KV_SSL_CERT, null, "# ", null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(12, KV_SSL_KEY, null, "# ", null, null));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Use SSL but skip chain & host verification"));
+		keyValuePairList.add(new KeyValuePair(13, KV_INSECURE_SKIP_VERIFY, null, "# ", null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsHTTPJSON { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsHTTPResponse.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsHTTPResponse.java
index 5d0d73d09df61a22a0162a04ad44d0bbe41bc1d3..84326f2ebe4ca57330dd40e015ab01143d248bb3 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsHTTPResponse.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsHTTPResponse.java
@@ -1,110 +1,123 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsHTTPResponse extends Input implements Serializable
-{
-	private static final long serialVersionUID = -1687222966919282631L;
-	  
-	private static final String DEFINITION_TEXT = "# HTTP/HTTPS request given an address a method and a timeout";
-	private static final String SIMPLE_NAME = "inputs.http_response";
-	private static final String FULL_NAME = "[[inputs.http_response]]";
-	private static final String KV_ADDRESS = "address";
-	private static final String KV_RESPONSE_TIMEOUT = "response_timeout";
-	private static final String KV_METHOD = "method";
-	private static final String KV_FOLLOW_REDIRECTS = "follow_redirects";
-	private static final String KV_SSL_CA = "ssl_ca";
-	private static final String KV_SSL_CERT = "ssl_cert";
-	private static final String KV_SSL_KEY = "ssl_key";
-	private static final String KV_INSECURE_SKIP_VERIFY = "insecure_skip_verify";
-	private static final String KV_HOST = "Host";
-	private static final String KV_BODY = "body";
-	private static final String ST_HEADERS = "[inputs.http_response.headers]";
-  
-
-	public InputsHTTPResponse() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsHTTPResponse(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		List<Comment> subtableCommentList = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## Server address (default http://localhost) Sock Shop Front End"));
-		keyValuePairList.add(new KeyValuePair(1, KV_ADDRESS, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Set response_timeout (default 5 seconds)"));
-		keyValuePairList.add(new KeyValuePair(2, KV_RESPONSE_TIMEOUT, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## HTTP Request Method"));
-		keyValuePairList.add(new KeyValuePair(3, KV_METHOD, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Whether to follow redirects from the server (defaults to false)"));
-		keyValuePairList.add(new KeyValuePair(4, KV_FOLLOW_REDIRECTS, null, null, null, list));
-		    
-		subtableCommentList.add(new Comment(1, "## HTTP Request Headers (all values must be strings)"));
-		keyValuePairList.add(new KeyValuePair(5, KV_HOST, null, null, null, null, ST_HEADERS, ST_HEADERS, subtableCommentList, "# "));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(Integer.valueOf(1), ""));
-		list.add(new Comment(Integer.valueOf(2), "## Optional HTTP Request Body"));
-		keyValuePairList.add(new KeyValuePair(Integer.valueOf(6), KV_BODY, "'''|@|{'fake':'data'}'''", "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Optional substring or regex match in body of the response"));
-		list.add(new Comment(3, "## response_string_match = \"\\\"service_status\\\": \\\"up\\\"\""));
-		list.add(new Comment(4, "## response_string_match = \"ok\""));
-		list.add(new Comment(5, "## response_string_match = \"\\\".*_status\\\".?:.?\\\"up\\\"\""));
-		list.add(new Comment(6, ""));
-		list.add(new Comment(7, "## Optional SSL Config"));
-		keyValuePairList.add(new KeyValuePair(7, KV_SSL_CA, null, "# ", null, list));
-		    
-		keyValuePairList.add(new KeyValuePair(8, KV_SSL_CERT, null, "# ", null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(9, KV_SSL_KEY, null, "# ", null, null));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Use SSL but skip chain & host verification"));
-		keyValuePairList.add(new KeyValuePair(10, KV_INSECURE_SKIP_VERIFY, null, "# ", null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsHTTPResponse { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsHTTPResponse extends Input implements Serializable
+{
+	private static final long serialVersionUID = -1687222966919282631L;
+	  
+	private static final String DEFINITION_TEXT = "# HTTP/HTTPS request given an address a method and a timeout";
+	private static final String SIMPLE_NAME = "inputs.http_response";
+	private static final String FULL_NAME = "[[inputs.http_response]]";
+	private static final String KV_ADDRESS = "address";
+	private static final String KV_HTTP_PROXY = "http_proxy";
+	private static final String KV_RESPONSE_TIMEOUT = "response_timeout";
+	private static final String KV_METHOD = "method";
+	private static final String KV_FOLLOW_REDIRECTS = "follow_redirects";
+	private static final String KV_BODY = "body";
+	private static final String KV_RESPONSE_STRING_MATCH = "response_string_match";
+	private static final String KV_TLS_CA = "tls_ca";
+	private static final String KV_TLS_CERT = "tls_cert";
+	private static final String KV_TLS_KEY = "tls_key";
+	private static final String KV_INSECURE_SKIP_VERIFY = "insecure_skip_verify";
+	private static final String KV_HOST = "Host";
+	private static final String ST_HEADERS = "[inputs.http_response.headers]";
+  
+
+	public InputsHTTPResponse() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsHTTPResponse(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		List<Comment> subtableCommentList = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## Server address (default http://localhost)"));
+		keyValuePairList.add(new KeyValuePair(1, KV_ADDRESS, null, "# ", null, list));
+		
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Set http_proxy (telegraf uses the system wide proxy settings if it's is not set)"));
+		keyValuePairList.add(new KeyValuePair(2, KV_HTTP_PROXY, null, "# ", null, list));
+		   
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Set response_timeout (default 5 seconds)"));
+		keyValuePairList.add(new KeyValuePair(3, KV_RESPONSE_TIMEOUT, null, "# ", null, list));
+		
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## HTTP Request Method"));
+		keyValuePairList.add(new KeyValuePair(4, KV_METHOD, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Whether to follow redirects from the server (defaults to false)"));
+		keyValuePairList.add(new KeyValuePair(5, KV_FOLLOW_REDIRECTS, null, "# ", null, list));
+		
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Optional HTTP Request Body"));
+		keyValuePairList.add(new KeyValuePair(6, KV_BODY, "'''|@|{'fake':'data'}'''", "# ", null, list));
+		
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Optional substring or regex match in body of the response"));
+		list.add(new Comment(3, "## response_string_match = \"\\\"service_status\\\": \\\"up\\\"\""));
+		list.add(new Comment(4, "## response_string_match = \"ok\""));
+		list.add(new Comment(5, "## response_string_match = \"\\\".*_status\\\".?:.?\\\"up\\\"\""));
+		keyValuePairList.add(new KeyValuePair(7, KV_RESPONSE_STRING_MATCH, null, "# ", null, list));
+		
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Optional TLS Config"));
+		keyValuePairList.add(new KeyValuePair(8, KV_TLS_CA, null, "# ", null, list));
+		    
+		keyValuePairList.add(new KeyValuePair(9, KV_TLS_CERT, null, "# ", null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(10, KV_TLS_KEY, null, "# ", null, null));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Use TLS but skip chain & host verification"));
+		keyValuePairList.add(new KeyValuePair(11, KV_INSECURE_SKIP_VERIFY, null, "# ", null, list));
+		
+		subtableCommentList.add(new Comment(1, "## HTTP Request Headers (all values must be strings)"));
+		keyValuePairList.add(new KeyValuePair(12, KV_HOST, null, null, null, null, ST_HEADERS, ST_HEADERS, subtableCommentList, "# "));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsHTTPResponse { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsIPMISensor.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsIPMISensor.java
index 4f72bc31939a6414db0c25c51b205daa4d61fdb0..3373852bbcaa73cfcaffb31b1a98735432be422e 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsIPMISensor.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsIPMISensor.java
@@ -1,72 +1,72 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-public final class InputsIPMISensor extends Input implements Serializable
-{
-	private static final long serialVersionUID = -5344298202895589884L;
-	
-	private static final String DEFINITION_TEXT = "# Read metrics from the bare metal servers via IPMI";
-	private static final String SIMPLE_NAME = "inputs.ipmi_sensor";
-	private static final String FULL_NAME = "[[inputs.ipmi_sensor]]";
-	private static final String KV_PATH = "path";
-	private static final String KV_SERVERS = "servers";
-  
-
-	public InputsIPMISensor() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsIPMISensor(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-	
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## optionally specify the path to the ipmitool executable"));
-		keyValuePairList.add(new KeyValuePair(1, KV_PATH, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "#"));
-		list.add(new Comment(2, "## optionally specify one or more servers via a url matching"));
-		list.add(new Comment(3, "##  [username[:password]@][protocol[(address)]]"));
-		list.add(new Comment(4, "##  e.g."));
-		list.add(new Comment(5, "##    root:passwd@lan(127.0.0.1)"));
-		list.add(new Comment(6, "##"));
-		list.add(new Comment(7, "## if no servers are specified, local machine sensor stats will be queried"));
-		list.add(new Comment(8, "##"));
-		keyValuePairList.add(new KeyValuePair(2, KV_SERVERS, null, "# ", null, list));
-	}
-	
-  
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsIPMISensor { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+public final class InputsIPMISensor extends Input implements Serializable
+{
+	private static final long serialVersionUID = -5344298202895589884L;
+	
+	private static final String DEFINITION_TEXT = "# Read metrics from the bare metal servers via IPMI";
+	private static final String SIMPLE_NAME = "inputs.ipmi_sensor";
+	private static final String FULL_NAME = "[[inputs.ipmi_sensor]]";
+	private static final String KV_PATH = "path";
+	private static final String KV_SERVERS = "servers";
+  
+
+	public InputsIPMISensor() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsIPMISensor(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+	
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## optionally specify the path to the ipmitool executable"));
+		keyValuePairList.add(new KeyValuePair(1, KV_PATH, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "#"));
+		list.add(new Comment(2, "## optionally specify one or more servers via a url matching"));
+		list.add(new Comment(3, "##  [username[:password]@][protocol[(address)]]"));
+		list.add(new Comment(4, "##  e.g."));
+		list.add(new Comment(5, "##    root:passwd@lan(127.0.0.1)"));
+		list.add(new Comment(6, "##"));
+		list.add(new Comment(7, "## if no servers are specified, local machine sensor stats will be queried"));
+		list.add(new Comment(8, "##"));
+		keyValuePairList.add(new KeyValuePair(2, KV_SERVERS, null, "# ", null, list));
+	}
+	
+  
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsIPMISensor { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsIPTables.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsIPTables.java
index 1d49d908fcbd788956d6d8a6f5b3b88f923b12ca..293e355cf6e08ebeb1bc7fd2204c7c959673e0e6 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsIPTables.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsIPTables.java
@@ -1,82 +1,82 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsIPTables extends Input implements Serializable
-{
-	private static final long serialVersionUID = -5494673025868173520L;
-	
-	private static final String DEFINITION_TEXT = "# Gather packets and bytes throughput from iptables";
-	private static final String SIMPLE_NAME = "inputs.iptables";
-	private static final String FULL_NAME = "[[inputs.iptables]]";
-	private static final String KV_USE_SUDO = "use_sudo";
-	private static final String KV_USE_LOCK = "use_lock";
-	private static final String KV_TABLE = "table";
-	private static final String KV_CHAINS = "chains";
-  
-
-	public InputsIPTables() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsIPTables(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-	
-  
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## iptables require root access on most systems."));
-		list.add(new Comment(2, "## Setting 'use_sudo' to true will make use of sudo to run iptables."));
-		list.add(new Comment(3, "## Users must configure sudo to allow telegraf user to run iptables with no password."));
-		list.add(new Comment(4, "## iptables can be restricted to only list command \"iptables -nvL\"."));
-		keyValuePairList.add(new KeyValuePair(1, KV_USE_SUDO, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Setting 'use_lock' to true runs iptables with the \"-w\" option."));
-		list.add(new Comment(2, "## Adjust your sudo settings appropriately if using this option (\"iptables -wnvl\")"));
-		keyValuePairList.add(new KeyValuePair(2, KV_USE_LOCK, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## defines the table to monitor:"));
-		keyValuePairList.add(new KeyValuePair(3, KV_TABLE, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## defines the chains to monitor."));
-		list.add(new Comment(2, "## NOTE: iptables rules without a comment will not be monitored."));
-		list.add(new Comment(3, "## Read the plugin documentation for more information."));
-		keyValuePairList.add(new KeyValuePair(4, KV_CHAINS, null, null, null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsIPTables { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsIPTables extends Input implements Serializable
+{
+	private static final long serialVersionUID = -5494673025868173520L;
+	
+	private static final String DEFINITION_TEXT = "# Gather packets and bytes throughput from iptables";
+	private static final String SIMPLE_NAME = "inputs.iptables";
+	private static final String FULL_NAME = "[[inputs.iptables]]";
+	private static final String KV_USE_SUDO = "use_sudo";
+	private static final String KV_USE_LOCK = "use_lock";
+	private static final String KV_TABLE = "table";
+	private static final String KV_CHAINS = "chains";
+  
+
+	public InputsIPTables() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsIPTables(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+	
+  
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## iptables require root access on most systems."));
+		list.add(new Comment(2, "## Setting 'use_sudo' to true will make use of sudo to run iptables."));
+		list.add(new Comment(3, "## Users must configure sudo to allow telegraf user to run iptables with no password."));
+		list.add(new Comment(4, "## iptables can be restricted to only list command \"iptables -nvL\"."));
+		keyValuePairList.add(new KeyValuePair(1, KV_USE_SUDO, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Setting 'use_lock' to true runs iptables with the \"-w\" option."));
+		list.add(new Comment(2, "## Adjust your sudo settings appropriately if using this option (\"iptables -wnvl\")"));
+		keyValuePairList.add(new KeyValuePair(2, KV_USE_LOCK, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## defines the table to monitor:"));
+		keyValuePairList.add(new KeyValuePair(3, KV_TABLE, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## defines the chains to monitor."));
+		list.add(new Comment(2, "## NOTE: iptables rules without a comment will not be monitored."));
+		list.add(new Comment(3, "## Read the plugin documentation for more information."));
+		keyValuePairList.add(new KeyValuePair(4, KV_CHAINS, null, null, null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsIPTables { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsInfluxDB.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsInfluxDB.java
index 141dba6ec7d33024d5f5e5a6a349155e271e6b3f..5494da9862fc07ccd0219dbded8316f2f7ffdd9e 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsInfluxDB.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsInfluxDB.java
@@ -1,73 +1,73 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsInfluxDB extends Input implements Serializable
-{
-	private static final long serialVersionUID = 147269905016508545L;
-	
-	private static final String DEFINITION_TEXT = "# Read InfluxDB-formatted JSON metrics from one or more HTTP endpoints";
-	private static final String SIMPLE_NAME = "inputs.influxdb";
-	private static final String FULL_NAME = "[[inputs.influxdb]]";
-	private static final String KV_URLS = "urls";
-	private static final String KV_TIMEOUT = "timeout";
-  
-
-	public InputsInfluxDB() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-
-	public InputsInfluxDB(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## Works with InfluxDB debug endpoints out of the box,"));
-		list.add(new Comment(2, "## but other services can use this format too."));
-		list.add(new Comment(3, "## See the influxdb plugin's README for more details."));
-		list.add(new Comment(4, ""));
-		list.add(new Comment(5, "## Multiple URLs from which to read InfluxDB-formatted JSON"));
-		list.add(new Comment(6, "## Default is \"http://localhost:8086/debug/vars\"."));
-		keyValuePairList.add(new KeyValuePair(1, KV_URLS, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## http request & header timeout"));
-		keyValuePairList.add(new KeyValuePair(2, KV_TIMEOUT, null, null, null, list));
-	}
-	
-  
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsInfluxDB { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsInfluxDB extends Input implements Serializable
+{
+	private static final long serialVersionUID = 147269905016508545L;
+	
+	private static final String DEFINITION_TEXT = "# Read InfluxDB-formatted JSON metrics from one or more HTTP endpoints";
+	private static final String SIMPLE_NAME = "inputs.influxdb";
+	private static final String FULL_NAME = "[[inputs.influxdb]]";
+	private static final String KV_URLS = "urls";
+	private static final String KV_TIMEOUT = "timeout";
+  
+
+	public InputsInfluxDB() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+
+	public InputsInfluxDB(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## Works with InfluxDB debug endpoints out of the box,"));
+		list.add(new Comment(2, "## but other services can use this format too."));
+		list.add(new Comment(3, "## See the influxdb plugin's README for more details."));
+		list.add(new Comment(4, ""));
+		list.add(new Comment(5, "## Multiple URLs from which to read InfluxDB-formatted JSON"));
+		list.add(new Comment(6, "## Default is \"http://localhost:8086/debug/vars\"."));
+		keyValuePairList.add(new KeyValuePair(1, KV_URLS, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## http request & header timeout"));
+		keyValuePairList.add(new KeyValuePair(2, KV_TIMEOUT, null, null, null, list));
+	}
+	
+  
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsInfluxDB { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsInternal.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsInternal.java
index 12d757d4c07d36de78a1aef6e51f6f46e092e975..a34aac0f4e142a7a38cad398dd7c5c9fa49d9e68 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsInternal.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsInternal.java
@@ -1,61 +1,61 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsInternal extends Input implements Serializable
-{
-	private static final long serialVersionUID = 2598564018025006038L;
-	
-	private static final String DEFINITION_TEXT = "# Collect statistics about itself";
-	private static final String SIMPLE_NAME = "inputs.internal";
-	private static final String FULL_NAME = "[[inputs.internal]]";
-	private static final String KV_COLLECT_MEMSTATS = "collect_memstats";
-  
-
-	public InputsInternal() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsInternal(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-
-		list.add(new Comment(1, "## If true, collect telegraf memory stats."));
-		keyValuePairList.add(new KeyValuePair(1, KV_COLLECT_MEMSTATS, null, null, null, list));
-	}
-	
-  
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsInternal { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsInternal extends Input implements Serializable
+{
+	private static final long serialVersionUID = 2598564018025006038L;
+	
+	private static final String DEFINITION_TEXT = "# Collect statistics about itself";
+	private static final String SIMPLE_NAME = "inputs.internal";
+	private static final String FULL_NAME = "[[inputs.internal]]";
+	private static final String KV_COLLECT_MEMSTATS = "collect_memstats";
+  
+
+	public InputsInternal() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsInternal(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+
+		list.add(new Comment(1, "## If true, collect telegraf memory stats."));
+		keyValuePairList.add(new KeyValuePair(1, KV_COLLECT_MEMSTATS, null, null, null, list));
+	}
+	
+  
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsInternal { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsInterrupts.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsInterrupts.java
index 03ca49506c4a6aa451f7c077bea6e0a75b7f4f03..5ddcf18208fbb3063bc662a7e50e18ed91d97454 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsInterrupts.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsInterrupts.java
@@ -1,62 +1,62 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsInterrupts extends Input implements Serializable
-{
-	private static final long serialVersionUID = 458355081563459376L;
-	
-	private static final String DEFINITION_TEXT = "# This plugin gathers interrupts data from /proc/interrupts and /proc/softirqs.";
-	private static final String SIMPLE_NAME = "inputs.interrupts";
-	private static final String FULL_NAME = "[[inputs.interrupts]]";
-	private static final String KV_IRQ = "irq";
-	private static final String ST_TAGDROP = "[inputs.interrupts.tagdrop]";
-  
-
-	public InputsInterrupts() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsInterrupts(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-	
-  
-	public void initComponent() {
-		List<Comment> subtableCommentList = new ArrayList<Comment>();
-    
-		subtableCommentList.add(new Comment(1, "## To filter which IRQs to collect, make use of tagpass / tagdrop, i.e."));
-		keyValuePairList.add(new KeyValuePair(1, KV_IRQ, null, null, null, null, ST_TAGDROP, ST_TAGDROP, subtableCommentList, "# "));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsInterrupts { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsInterrupts extends Input implements Serializable
+{
+	private static final long serialVersionUID = 458355081563459376L;
+	
+	private static final String DEFINITION_TEXT = "# This plugin gathers interrupts data from /proc/interrupts and /proc/softirqs.";
+	private static final String SIMPLE_NAME = "inputs.interrupts";
+	private static final String FULL_NAME = "[[inputs.interrupts]]";
+	private static final String KV_IRQ = "irq";
+	private static final String ST_TAGDROP = "[inputs.interrupts.tagdrop]";
+  
+
+	public InputsInterrupts() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsInterrupts(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+	
+  
+	public void initComponent() {
+		List<Comment> subtableCommentList = new ArrayList<Comment>();
+    
+		subtableCommentList.add(new Comment(1, "## To filter which IRQs to collect, make use of tagpass / tagdrop, i.e."));
+		keyValuePairList.add(new KeyValuePair(1, KV_IRQ, null, null, null, null, ST_TAGDROP, ST_TAGDROP, subtableCommentList, "# "));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsInterrupts { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsJolokia.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsJolokia.java
index 63d038781974a833dbdfe3ce722b3800bd5f447f..2e339b3afe5e570ecbdfef8e8785e0616b85a8f2 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsJolokia.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsJolokia.java
@@ -1,145 +1,145 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsJolokia extends Input implements Serializable
-{
-	private static final long serialVersionUID = -6507355200045372860L;
-	
-	private static final String DEFINITION_TEXT = "# Read JMX metrics through Jolokia";
-	private static final String SIMPLE_NAME = "inputs.jolokia";
-	private static final String FULL_NAME = "[[inputs.jolokia]]";
-	private static final String KV_CONTEXT = "context";
-	private static final String KV_MODE = "mode";
-	private static final String KV_RESPONSE_HEADER_TIMEOUT = "response_header_timeout";
-	private static final String KV_CLIENT_TIMEOUT = "client_timeout";
-	private static final String KV_DELIMITER = "delimiter";
-	private static final String KV_NAME = "name";
-	private static final String KV_HOST = "host";
-	private static final String KV_PORT = "port";
-	private static final String KV_USERNAME = "username";
-	private static final String KV_PASSWORD = "password";
-	private static final String KV_MBEAN = "mbean";
-	private static final String KV_ATTRIBUTE = "attribute";
-	private static final String ST_PROXY = "[inputs.jolokia.proxy]";
-	private static final String ST_SERVERS_FULL = "[[inputs.jolokia.servers]]";
-	private static final String ST_METRICS_01 = "[[inputs.jolokia.metrics]](1)";
-	private static final String ST_METRICS_02 = "[[inputs.jolokia.metrics]](2)";
-	private static final String ST_METRICS_03 = "[[inputs.jolokia.metrics]](3)";
-	private static final String ST_METRICS_FULL = "[[inputs.jolokia.metrics]]";
-  
-
-	public InputsJolokia() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsJolokia(String definitionText, String simpleName, String fullName, String namePreComment, List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		List<Comment> subtableCommentList = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## This is the context root used to compose the jolokia url"));
-		list.add(new Comment(2, "## NOTE that Jolokia requires a trailing slash at the end of the context root"));
-		list.add(new Comment(3, "## NOTE that your jolokia security policy must allow for POST requests."));
-		keyValuePairList.add(new KeyValuePair(1, KV_CONTEXT, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## This specifies the mode used"));
-		keyValuePairList.add(new KeyValuePair(2, KV_MODE, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "#"));
-		list.add(new Comment(2, "## Optional http timeouts"));
-		list.add(new Comment(3, "##"));
-		list.add(new Comment(4, "## response_header_timeout, if non-zero, specifies the amount of time to wait"));
-		list.add(new Comment(5, "## for a server's response headers after fully writing the request."));
-		keyValuePairList.add(new KeyValuePair(4, KV_RESPONSE_HEADER_TIMEOUT, null, "# ", null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## client_timeout specifies a time limit for requests made by this client."));
-		list.add(new Comment(2, "## Includes connection time, any redirects, and reading the response body."));
-		keyValuePairList.add(new KeyValuePair(5, KV_CLIENT_TIMEOUT, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Attribute delimiter"));
-		list.add(new Comment(3, "##"));
-		list.add(new Comment(3, "## When multiple attributes are returned for a single"));
-		list.add(new Comment(4, "## [inputs.jolokia.metrics], the field name is a concatenation of the metric"));
-		list.add(new Comment(5, "## name, and the attribute name, separated by the given delimiter."));
-		keyValuePairList.add(new KeyValuePair(6, KV_DELIMITER, null, "# ", null, list));
-    
-		subtableCommentList = new ArrayList<Comment>();
-		subtableCommentList.add(new Comment(1, "## List of servers exposing jolokia read service"));
-		keyValuePairList.add(new KeyValuePair(7, KV_NAME, null, null, null, null, ST_SERVERS_FULL, ST_SERVERS_FULL, subtableCommentList, null));
-		    
-		keyValuePairList.add(new KeyValuePair(8, KV_HOST, null, null, null, null, ST_SERVERS_FULL, ST_SERVERS_FULL, null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(9, KV_PORT, null, null, null, null, ST_SERVERS_FULL, ST_SERVERS_FULL, null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(10, KV_USERNAME, null, null, null, null, ST_SERVERS_FULL, ST_SERVERS_FULL, null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(11, KV_PASSWORD, null, null, null, null, ST_SERVERS_FULL, ST_SERVERS_FULL, null, null));
-    
-		subtableCommentList = new ArrayList<Comment>();
-		subtableCommentList.add(new Comment(1, "## List of metrics collected on above servers"));
-		subtableCommentList.add(new Comment(2, "## Each metric consists in a name, a jmx path and either"));
-		subtableCommentList.add(new Comment(3, "## a pass or drop slice attribute."));
-		subtableCommentList.add(new Comment(4, "## This collect all heap memory usage metrics."));
-		keyValuePairList.add(new KeyValuePair(12, KV_NAME, null, null, null, null, ST_METRICS_01, ST_METRICS_FULL, subtableCommentList, null));
-		    
-		keyValuePairList.add(new KeyValuePair(13, KV_MBEAN, null, null, null, null, ST_METRICS_01, ST_METRICS_FULL, null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(14, KV_ATTRIBUTE, null, null, null, null, ST_METRICS_01, ST_METRICS_FULL, null, null));
-		    
-		subtableCommentList = new ArrayList<Comment>();
-		subtableCommentList.add(new Comment(1, "## This collect thread counts metrics."));
-		keyValuePairList.add(new KeyValuePair(15, KV_NAME, null, null, null, null, ST_METRICS_02, ST_METRICS_FULL, subtableCommentList, null));
-		    
-		keyValuePairList.add(new KeyValuePair(16, KV_MBEAN, null, null, null, null, ST_METRICS_02, ST_METRICS_FULL, null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(17, KV_ATTRIBUTE, null, null, null, null, ST_METRICS_02, ST_METRICS_FULL, null, null));
-		    
-		subtableCommentList = new ArrayList<Comment>();
-		subtableCommentList.add(new Comment(1, "## This collect number of class loaded/unloaded counts metrics."));
-		keyValuePairList.add(new KeyValuePair(18, KV_NAME, null, null, null, null, ST_METRICS_03, ST_METRICS_FULL, subtableCommentList, null));
-		    
-		keyValuePairList.add(new KeyValuePair(19, KV_MBEAN, null, null, null, null, ST_METRICS_03, ST_METRICS_FULL, null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(20, KV_ATTRIBUTE, null, null, null, null, ST_METRICS_03, ST_METRICS_FULL, null, null));
-	}
-	
-  
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsJolokia { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsJolokia extends Input implements Serializable
+{
+	private static final long serialVersionUID = -6507355200045372860L;
+	
+	private static final String DEFINITION_TEXT = "# Read JMX metrics through Jolokia";
+	private static final String SIMPLE_NAME = "inputs.jolokia";
+	private static final String FULL_NAME = "[[inputs.jolokia]]";
+	private static final String KV_CONTEXT = "context";
+	private static final String KV_MODE = "mode";
+	private static final String KV_RESPONSE_HEADER_TIMEOUT = "response_header_timeout";
+	private static final String KV_CLIENT_TIMEOUT = "client_timeout";
+	private static final String KV_DELIMITER = "delimiter";
+	private static final String KV_NAME = "name";
+	private static final String KV_HOST = "host";
+	private static final String KV_PORT = "port";
+	private static final String KV_USERNAME = "username";
+	private static final String KV_PASSWORD = "password";
+	private static final String KV_MBEAN = "mbean";
+	private static final String KV_ATTRIBUTE = "attribute";
+	private static final String ST_PROXY = "[inputs.jolokia.proxy]";
+	private static final String ST_SERVERS_FULL = "[[inputs.jolokia.servers]]";
+	private static final String ST_METRICS_01 = "[[inputs.jolokia.metrics]](1)";
+	private static final String ST_METRICS_02 = "[[inputs.jolokia.metrics]](2)";
+	private static final String ST_METRICS_03 = "[[inputs.jolokia.metrics]](3)";
+	private static final String ST_METRICS_FULL = "[[inputs.jolokia.metrics]]";
+  
+
+	public InputsJolokia() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsJolokia(String definitionText, String simpleName, String fullName, String namePreComment, List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		List<Comment> subtableCommentList = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## This is the context root used to compose the jolokia url"));
+		list.add(new Comment(2, "## NOTE that Jolokia requires a trailing slash at the end of the context root"));
+		list.add(new Comment(3, "## NOTE that your jolokia security policy must allow for POST requests."));
+		keyValuePairList.add(new KeyValuePair(1, KV_CONTEXT, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## This specifies the mode used"));
+		keyValuePairList.add(new KeyValuePair(2, KV_MODE, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "#"));
+		list.add(new Comment(2, "## Optional http timeouts"));
+		list.add(new Comment(3, "##"));
+		list.add(new Comment(4, "## response_header_timeout, if non-zero, specifies the amount of time to wait"));
+		list.add(new Comment(5, "## for a server's response headers after fully writing the request."));
+		keyValuePairList.add(new KeyValuePair(4, KV_RESPONSE_HEADER_TIMEOUT, null, "# ", null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## client_timeout specifies a time limit for requests made by this client."));
+		list.add(new Comment(2, "## Includes connection time, any redirects, and reading the response body."));
+		keyValuePairList.add(new KeyValuePair(5, KV_CLIENT_TIMEOUT, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Attribute delimiter"));
+		list.add(new Comment(3, "##"));
+		list.add(new Comment(3, "## When multiple attributes are returned for a single"));
+		list.add(new Comment(4, "## [inputs.jolokia.metrics], the field name is a concatenation of the metric"));
+		list.add(new Comment(5, "## name, and the attribute name, separated by the given delimiter."));
+		keyValuePairList.add(new KeyValuePair(6, KV_DELIMITER, null, "# ", null, list));
+    
+		subtableCommentList = new ArrayList<Comment>();
+		subtableCommentList.add(new Comment(1, "## List of servers exposing jolokia read service"));
+		keyValuePairList.add(new KeyValuePair(7, KV_NAME, null, null, null, null, ST_SERVERS_FULL, ST_SERVERS_FULL, subtableCommentList, null));
+		    
+		keyValuePairList.add(new KeyValuePair(8, KV_HOST, null, null, null, null, ST_SERVERS_FULL, ST_SERVERS_FULL, null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(9, KV_PORT, null, null, null, null, ST_SERVERS_FULL, ST_SERVERS_FULL, null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(10, KV_USERNAME, null, null, null, null, ST_SERVERS_FULL, ST_SERVERS_FULL, null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(11, KV_PASSWORD, null, null, null, null, ST_SERVERS_FULL, ST_SERVERS_FULL, null, null));
+    
+		subtableCommentList = new ArrayList<Comment>();
+		subtableCommentList.add(new Comment(1, "## List of metrics collected on above servers"));
+		subtableCommentList.add(new Comment(2, "## Each metric consists in a name, a jmx path and either"));
+		subtableCommentList.add(new Comment(3, "## a pass or drop slice attribute."));
+		subtableCommentList.add(new Comment(4, "## This collect all heap memory usage metrics."));
+		keyValuePairList.add(new KeyValuePair(12, KV_NAME, null, null, null, null, ST_METRICS_01, ST_METRICS_FULL, subtableCommentList, null));
+		    
+		keyValuePairList.add(new KeyValuePair(13, KV_MBEAN, null, null, null, null, ST_METRICS_01, ST_METRICS_FULL, null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(14, KV_ATTRIBUTE, null, null, null, null, ST_METRICS_01, ST_METRICS_FULL, null, null));
+		    
+		subtableCommentList = new ArrayList<Comment>();
+		subtableCommentList.add(new Comment(1, "## This collect thread counts metrics."));
+		keyValuePairList.add(new KeyValuePair(15, KV_NAME, null, null, null, null, ST_METRICS_02, ST_METRICS_FULL, subtableCommentList, null));
+		    
+		keyValuePairList.add(new KeyValuePair(16, KV_MBEAN, null, null, null, null, ST_METRICS_02, ST_METRICS_FULL, null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(17, KV_ATTRIBUTE, null, null, null, null, ST_METRICS_02, ST_METRICS_FULL, null, null));
+		    
+		subtableCommentList = new ArrayList<Comment>();
+		subtableCommentList.add(new Comment(1, "## This collect number of class loaded/unloaded counts metrics."));
+		keyValuePairList.add(new KeyValuePair(18, KV_NAME, null, null, null, null, ST_METRICS_03, ST_METRICS_FULL, subtableCommentList, null));
+		    
+		keyValuePairList.add(new KeyValuePair(19, KV_MBEAN, null, null, null, null, ST_METRICS_03, ST_METRICS_FULL, null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(20, KV_ATTRIBUTE, null, null, null, null, ST_METRICS_03, ST_METRICS_FULL, null, null));
+	}
+	
+  
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsJolokia { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsKapacitor.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsKapacitor.java
index f0a39ea24ae2b80eedf4f12ed4e0e303def38fd5..88f4e0c8f8a12bfd83e48bf2c86bec7d072f58d6 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsKapacitor.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsKapacitor.java
@@ -1,68 +1,68 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsKapacitor extends Input implements Serializable
-{
-	private static final long serialVersionUID = 2307243847529539647L;
-	
-	private static final String DEFINITION_TEXT = "# Read Kapacitor-formatted JSON metrics from one or more HTTP endpoints";
-	private static final String SIMPLE_NAME = "inputs.kapacitor";
-	private static final String FULL_NAME = "[[inputs.kapacitor]]";
-	private static final String KV_URLS = "urls";
-	private static final String KV_TIMEOUT = "timeout";
-	
-  
-	public InputsKapacitor() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsKapacitor(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## Multiple URLs from which to read Kapacitor-formatted JSON"));
-		list.add(new Comment(2, "## Default is \"http://localhost:9092/kapacitor/v1/debug/vars\"."));
-		keyValuePairList.add(new KeyValuePair(1, KV_URLS, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Time limit for http requests"));
-		keyValuePairList.add(new KeyValuePair(2, KV_TIMEOUT, null, null, null, list));
-	}
-	
-  
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsKapacitor { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsKapacitor extends Input implements Serializable
+{
+	private static final long serialVersionUID = 2307243847529539647L;
+	
+	private static final String DEFINITION_TEXT = "# Read Kapacitor-formatted JSON metrics from one or more HTTP endpoints";
+	private static final String SIMPLE_NAME = "inputs.kapacitor";
+	private static final String FULL_NAME = "[[inputs.kapacitor]]";
+	private static final String KV_URLS = "urls";
+	private static final String KV_TIMEOUT = "timeout";
+	
+  
+	public InputsKapacitor() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsKapacitor(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## Multiple URLs from which to read Kapacitor-formatted JSON"));
+		list.add(new Comment(2, "## Default is \"http://localhost:9092/kapacitor/v1/debug/vars\"."));
+		keyValuePairList.add(new KeyValuePair(1, KV_URLS, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Time limit for http requests"));
+		keyValuePairList.add(new KeyValuePair(2, KV_TIMEOUT, null, null, null, list));
+	}
+	
+  
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsKapacitor { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsKernel.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsKernel.java
index 978179ac48029afed89ad3a7823907792b3d8099..cfabf442fd90596a94028e1174b4c1132de02fb3 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsKernel.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsKernel.java
@@ -1,60 +1,60 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsKernel extends Input implements Serializable
-{
-	private static final long serialVersionUID = 6056294546021426714L;
-	
-	private static final String DEFINITION_TEXT = "# Get kernel statistics from /proc/stat";
-	private static final String SIMPLE_NAME = "inputs.kernel";
-	private static final String FULL_NAME = "[[inputs.kernel]]";
-	
-  
-	public InputsKernel() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsKernel(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "# no configuration"));
-		keyValuePairList.add(new KeyValuePair(1, null, null, null, null, list));
-	}
-	
-  
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsKernel { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsKernel extends Input implements Serializable
+{
+	private static final long serialVersionUID = 6056294546021426714L;
+	
+	private static final String DEFINITION_TEXT = "# Get kernel statistics from /proc/stat";
+	private static final String SIMPLE_NAME = "inputs.kernel";
+	private static final String FULL_NAME = "[[inputs.kernel]]";
+	
+  
+	public InputsKernel() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsKernel(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "# no configuration"));
+		keyValuePairList.add(new KeyValuePair(1, null, null, null, null, list));
+	}
+	
+  
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsKernel { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsKernelVMStat.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsKernelVMStat.java
index d0bf81bb5f6bac080cc5246fc6cb75074456d8de..d2da353bebc17923110e1e23e616946a1e5dbe4b 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsKernelVMStat.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsKernelVMStat.java
@@ -1,60 +1,60 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsKernelVMStat extends Input implements Serializable
-{
-	private static final long serialVersionUID = -1721820953118115302L;
-	
-	private static final String DEFINITION_TEXT = "# Get kernel statistics from /proc/vmstat";
-	private static final String SIMPLE_NAME = "inputs.kernel_vmstat";
-	private static final String FULL_NAME = "[[inputs.kernel_vmstat]]";
-  
-
-	public InputsKernelVMStat() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsKernelVMStat(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-	
-  
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-
-		list.add(new Comment(1, "# no configuration"));
-		keyValuePairList.add(new KeyValuePair(1, null, null, null, null, list));
-	}
-  
-	
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsKernelVMStat { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsKernelVMStat extends Input implements Serializable
+{
+	private static final long serialVersionUID = -1721820953118115302L;
+	
+	private static final String DEFINITION_TEXT = "# Get kernel statistics from /proc/vmstat";
+	private static final String SIMPLE_NAME = "inputs.kernel_vmstat";
+	private static final String FULL_NAME = "[[inputs.kernel_vmstat]]";
+  
+
+	public InputsKernelVMStat() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsKernelVMStat(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+	
+  
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+
+		list.add(new Comment(1, "# no configuration"));
+		keyValuePairList.add(new KeyValuePair(1, null, null, null, null, list));
+	}
+  
+	
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsKernelVMStat { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsKubernetes.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsKubernetes.java
index 4e9f1faa97d92ba67f61433c0e3a8fde3e86572f..92b06e9ac81290796f87bd3b7e5b33a38020d197 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsKubernetes.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsKubernetes.java
@@ -1,84 +1,84 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsKubernetes extends Input implements Serializable
-{
-	private static final long serialVersionUID = 6064423949498618818L;
-	
-	private static final String DEFINITION_TEXT = "# Read metrics from the kubernetes kubelet api";
-	private static final String SIMPLE_NAME = "inputs.kubernetes";
-	private static final String FULL_NAME = "[[inputs.kubernetes]]";
-	private static final String KV_URL = "url";
-	private static final String KV_BEARER_TOKEN = "bearer_token";
-	private static final String KV_SSL_CA = "ssl_ca";
-	private static final String KV_SSL_CERT = "ssl_cert";
-	private static final String KV_SSL_KEY = "ssl_key";
-	private static final String KV_INSECURE_SKIP_VERIFY = "insecure_skip_verify";
-  
-
-	public InputsKubernetes() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsKubernetes(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "## URL for the kubelet"));
-		keyValuePairList.add(new KeyValuePair(1, KV_URL, null, null, null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Use bearer token for authorization"));
-		keyValuePairList.add(new KeyValuePair(2, KV_BEARER_TOKEN, null, "# ", null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Optional SSL Config"));
-		keyValuePairList.add(new KeyValuePair(3, KV_SSL_CA, null, "# ", null, list));
-    
-		keyValuePairList.add(new KeyValuePair(4, KV_SSL_CERT, null, "# ", null, null));
-    
-		keyValuePairList.add(new KeyValuePair(5, KV_SSL_KEY, null, "# ", null, null));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Use SSL but skip chain & host verification"));
-		keyValuePairList.add(new KeyValuePair(6, KV_INSECURE_SKIP_VERIFY, null, "# ", null, list));
-	}
-  
-	
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsKubernetes { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsKubernetes extends Input implements Serializable
+{
+	private static final long serialVersionUID = 6064423949498618818L;
+	
+	private static final String DEFINITION_TEXT = "# Read metrics from the kubernetes kubelet api";
+	private static final String SIMPLE_NAME = "inputs.kubernetes";
+	private static final String FULL_NAME = "[[inputs.kubernetes]]";
+	private static final String KV_URL = "url";
+	private static final String KV_BEARER_TOKEN = "bearer_token";
+	private static final String KV_SSL_CA = "ssl_ca";
+	private static final String KV_SSL_CERT = "ssl_cert";
+	private static final String KV_SSL_KEY = "ssl_key";
+	private static final String KV_INSECURE_SKIP_VERIFY = "insecure_skip_verify";
+  
+
+	public InputsKubernetes() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsKubernetes(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "## URL for the kubelet"));
+		keyValuePairList.add(new KeyValuePair(1, KV_URL, null, null, null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Use bearer token for authorization"));
+		keyValuePairList.add(new KeyValuePair(2, KV_BEARER_TOKEN, null, "# ", null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Optional SSL Config"));
+		keyValuePairList.add(new KeyValuePair(3, KV_SSL_CA, null, "# ", null, list));
+    
+		keyValuePairList.add(new KeyValuePair(4, KV_SSL_CERT, null, "# ", null, null));
+    
+		keyValuePairList.add(new KeyValuePair(5, KV_SSL_KEY, null, "# ", null, null));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Use SSL but skip chain & host verification"));
+		keyValuePairList.add(new KeyValuePair(6, KV_INSECURE_SKIP_VERIFY, null, "# ", null, list));
+	}
+  
+	
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsKubernetes { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsLeoFS.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsLeoFS.java
index 0817c14f7c24ea5e10a3f2b0ee2bc586b48be166..ceb39e71dc6fe0f67c3544be4459e47c22e2e89e 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsLeoFS.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsLeoFS.java
@@ -1,62 +1,62 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsLeoFS extends Input implements Serializable
-{
-	private static final long serialVersionUID = 2056714824847333973L;
-	
-	private static final String DEFINITION_TEXT = "# Read metrics from a LeoFS Server via SNMP";
-	private static final String SIMPLE_NAME = "inputs.leofs";
-	private static final String FULL_NAME = "[[inputs.leofs]]";
-	private static final String KV_SERVERS = "servers";
-  
-  
-	public InputsLeoFS() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsLeoFS(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-	
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "## An array of URI to gather stats about LeoFS."));
-		list.add(new Comment(2, "## Specify an ip or hostname with port. ie 127.0.0.1:4020"));
-		keyValuePairList.add(new KeyValuePair(1, KV_SERVERS, null, null, null, list));
-	}
-	
-  
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsLeoFS { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsLeoFS extends Input implements Serializable
+{
+	private static final long serialVersionUID = 2056714824847333973L;
+	
+	private static final String DEFINITION_TEXT = "# Read metrics from a LeoFS Server via SNMP";
+	private static final String SIMPLE_NAME = "inputs.leofs";
+	private static final String FULL_NAME = "[[inputs.leofs]]";
+	private static final String KV_SERVERS = "servers";
+  
+  
+	public InputsLeoFS() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsLeoFS(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+	
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "## An array of URI to gather stats about LeoFS."));
+		list.add(new Comment(2, "## Specify an ip or hostname with port. ie 127.0.0.1:4020"));
+		keyValuePairList.add(new KeyValuePair(1, KV_SERVERS, null, null, null, list));
+	}
+	
+  
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsLeoFS { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsLinuxSysCtlFS.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsLinuxSysCtlFS.java
index c614a0e246bad51008f620f008b7cdca325ac847..342c15ab8c3bba80710e39bff4b659affddda479 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsLinuxSysCtlFS.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsLinuxSysCtlFS.java
@@ -1,60 +1,60 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsLinuxSysCtlFS extends Input implements Serializable
-{
-	private static final long serialVersionUID = 4151133624049297548L;
-	
-	private static final String DEFINITION_TEXT = "# Provides Linux sysctl fs metrics";
-	private static final String SIMPLE_NAME = "inputs.linux_sysctl_fs";
-	private static final String FULL_NAME = "[[inputs.linux_sysctl_fs]]";
-  
-
-	public InputsLinuxSysCtlFS() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsLinuxSysCtlFS(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "# no configuration"));
-		keyValuePairList.add(new KeyValuePair(1, null, null, null, null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsLinuxSysCtlFS { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsLinuxSysCtlFS extends Input implements Serializable
+{
+	private static final long serialVersionUID = 4151133624049297548L;
+	
+	private static final String DEFINITION_TEXT = "# Provides Linux sysctl fs metrics";
+	private static final String SIMPLE_NAME = "inputs.linux_sysctl_fs";
+	private static final String FULL_NAME = "[[inputs.linux_sysctl_fs]]";
+  
+
+	public InputsLinuxSysCtlFS() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsLinuxSysCtlFS(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "# no configuration"));
+		keyValuePairList.add(new KeyValuePair(1, null, null, null, null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsLinuxSysCtlFS { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsLustre2.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsLustre2.java
index fc3c2094944cef2e834f4d4e521abef31114c840..e7499b78773a3fd9336d737bb371be9349f4eb41 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsLustre2.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsLustre2.java
@@ -1,66 +1,66 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsLustre2 extends Input implements Serializable
-{
-	private static final long serialVersionUID = -1842262263617264843L;
-	
-	private static final String DEFINITION_TEXT = "# Read metrics from local Lustre service on OST, MDS";
-	private static final String SIMPLE_NAME = "inputs.lustre2";
-	private static final String FULL_NAME = "[[inputs.lustre2]]";
-	private static final String KV_OST_PROCFILES = "ost_procfiles";
-	private static final String KV_MDS_PROCFILES = "mds_procfiles";
-  
-
-	public InputsLustre2() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsLustre2(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-	
-  
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## An array of /proc globs to search for Lustre stats"));
-		list.add(new Comment(2, "## If not specified, the default will work on Lustre 2.5.x"));
-		list.add(new Comment(3, "##"));
-		keyValuePairList.add(new KeyValuePair(1, KV_OST_PROCFILES, null, "# ", null, list));
-		    
-		keyValuePairList.add(new KeyValuePair(2, KV_MDS_PROCFILES, null, "# ", null, null));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsLustre2 { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsLustre2 extends Input implements Serializable
+{
+	private static final long serialVersionUID = -1842262263617264843L;
+	
+	private static final String DEFINITION_TEXT = "# Read metrics from local Lustre service on OST, MDS";
+	private static final String SIMPLE_NAME = "inputs.lustre2";
+	private static final String FULL_NAME = "[[inputs.lustre2]]";
+	private static final String KV_OST_PROCFILES = "ost_procfiles";
+	private static final String KV_MDS_PROCFILES = "mds_procfiles";
+  
+
+	public InputsLustre2() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsLustre2(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+	
+  
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## An array of /proc globs to search for Lustre stats"));
+		list.add(new Comment(2, "## If not specified, the default will work on Lustre 2.5.x"));
+		list.add(new Comment(3, "##"));
+		keyValuePairList.add(new KeyValuePair(1, KV_OST_PROCFILES, null, "# ", null, list));
+		    
+		keyValuePairList.add(new KeyValuePair(2, KV_MDS_PROCFILES, null, "# ", null, null));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsLustre2 { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsMailChimp.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsMailChimp.java
index ed8b32360cbdb671a54690c26428756d7b1899bf..bcb0dddc65b833ccf663905cce01874e4459d8d7 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsMailChimp.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsMailChimp.java
@@ -1,73 +1,73 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsMailChimp extends Input implements Serializable
-{
-	private static final long serialVersionUID = -7410257103679342258L;
-	
-	private static final String DEFINITION_TEXT = "# Gathers metrics from the /3.0/reports MailChimp API";
-	private static final String SIMPLE_NAME = "inputs.mailchimp";
-	private static final String FULL_NAME = "[[inputs.mailchimp]]";
-	private static final String KV_API_KEY = "api_key";
-	private static final String KV_DAYS_OLD = "days_old";
-	private static final String KV_CAMPAIGN_ID = "campaign_id";
-  
-
-	public InputsMailChimp() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsMailChimp(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## MailChimp API key"));
-		list.add(new Comment(2, "## get from https://admin.mailchimp.com/account/api/"));
-		keyValuePairList.add(new KeyValuePair(1, KV_API_KEY, null, null, "# required", list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Reports for campaigns sent more than days_old ago will not be collected."));
-		list.add(new Comment(2, "## 0 means collect all."));
-		keyValuePairList.add(new KeyValuePair(2, KV_DAYS_OLD, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Campaign ID to get, if empty gets all campaigns, this option overrides days_old"));
-		keyValuePairList.add(new KeyValuePair(3, KV_CAMPAIGN_ID, null, "# ", null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsMailChimp { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsMailChimp extends Input implements Serializable
+{
+	private static final long serialVersionUID = -7410257103679342258L;
+	
+	private static final String DEFINITION_TEXT = "# Gathers metrics from the /3.0/reports MailChimp API";
+	private static final String SIMPLE_NAME = "inputs.mailchimp";
+	private static final String FULL_NAME = "[[inputs.mailchimp]]";
+	private static final String KV_API_KEY = "api_key";
+	private static final String KV_DAYS_OLD = "days_old";
+	private static final String KV_CAMPAIGN_ID = "campaign_id";
+  
+
+	public InputsMailChimp() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsMailChimp(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## MailChimp API key"));
+		list.add(new Comment(2, "## get from https://admin.mailchimp.com/account/api/"));
+		keyValuePairList.add(new KeyValuePair(1, KV_API_KEY, null, null, "# required", list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Reports for campaigns sent more than days_old ago will not be collected."));
+		list.add(new Comment(2, "## 0 means collect all."));
+		keyValuePairList.add(new KeyValuePair(2, KV_DAYS_OLD, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Campaign ID to get, if empty gets all campaigns, this option overrides days_old"));
+		keyValuePairList.add(new KeyValuePair(3, KV_CAMPAIGN_ID, null, "# ", null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsMailChimp { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsMem.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsMem.java
index 6c2ad1ecfdd906dcfabcfb4881477774c744189f..2f803a0c3dbc4767e2ba076cb4d776330c7c49c6 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsMem.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsMem.java
@@ -1,60 +1,60 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsMem extends Input implements Serializable
-{
-	private static final long serialVersionUID = -6154894780000174491L;
-	
-	private static final String DEFINITION_TEXT = "# Read metrics about memory usage";
-	private static final String SIMPLE_NAME = "inputs.mem";
-	private static final String FULL_NAME = "[[inputs.mem]]";
-  
-
-	public InputsMem() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsMem(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-	
-  
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "# no configuration"));
-		keyValuePairList.add(new KeyValuePair(1, null, null, null, null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsMem { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsMem extends Input implements Serializable
+{
+	private static final long serialVersionUID = -6154894780000174491L;
+	
+	private static final String DEFINITION_TEXT = "# Read metrics about memory usage";
+	private static final String SIMPLE_NAME = "inputs.mem";
+	private static final String FULL_NAME = "[[inputs.mem]]";
+  
+
+	public InputsMem() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsMem(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+	
+  
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "# no configuration"));
+		keyValuePairList.add(new KeyValuePair(1, null, null, null, null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsMem { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsMemCached.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsMemCached.java
index f5f07d27f2f65f9eed22ab02a84bd1528dd46080..51e594ef7920969bcaf83696522196ba6449e641 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsMemCached.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsMemCached.java
@@ -1,65 +1,65 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsMemCached extends Input implements Serializable
-{
-	private static final long serialVersionUID = -915136304086975076L;
-	
-	private static final String DEFINITION_TEXT = "# Read metrics from one or many memcached servers";
-	private static final String SIMPLE_NAME = "inputs.memcached";
-	private static final String FULL_NAME = "[[inputs.memcached]]";
-	private static final String KV_SERVERS = "servers";
-	private static final String KV_UNIX_SOCKETS = "unix_sockets";
-  
-
-	public InputsMemCached() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsMemCached(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## An array of address to gather stats about. Specify an ip on hostname"));
-		list.add(new Comment(2, "## with optional port. ie localhost, 10.0.0.1:11211, etc."));
-		keyValuePairList.add(new KeyValuePair(1, KV_SERVERS, null, null, null, list));
-		    
-		keyValuePairList.add(new KeyValuePair(2, KV_UNIX_SOCKETS, null, "# ", null, null));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsMemCached { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsMemCached extends Input implements Serializable
+{
+	private static final long serialVersionUID = -915136304086975076L;
+	
+	private static final String DEFINITION_TEXT = "# Read metrics from one or many memcached servers";
+	private static final String SIMPLE_NAME = "inputs.memcached";
+	private static final String FULL_NAME = "[[inputs.memcached]]";
+	private static final String KV_SERVERS = "servers";
+	private static final String KV_UNIX_SOCKETS = "unix_sockets";
+  
+
+	public InputsMemCached() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsMemCached(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## An array of address to gather stats about. Specify an ip on hostname"));
+		list.add(new Comment(2, "## with optional port. ie localhost, 10.0.0.1:11211, etc."));
+		keyValuePairList.add(new KeyValuePair(1, KV_SERVERS, null, null, null, list));
+		    
+		keyValuePairList.add(new KeyValuePair(2, KV_UNIX_SOCKETS, null, "# ", null, null));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsMemCached { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsMesos.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsMesos.java
index 99a6c3aa16737bc3cd8f5c9b5723261ae402c365..85b200a9b64403facf572a48ffb1f310e71cd6de 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsMesos.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsMesos.java
@@ -1,81 +1,81 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsMesos extends Input implements Serializable
-{
-	private static final long serialVersionUID = -9185865562357509552L;
-	
-	private static final String DEFINITION_TEXT = "# Telegraf plugin for gathering metrics from N Mesos masters";
-	private static final String SIMPLE_NAME = "inputs.mesos";
-	private static final String FULL_NAME = "[[inputs.mesos]]";
-	private static final String KV_TIMEOUT = "timeout";
-	private static final String KV_MASTERS = "masters";
-	private static final String KV_MASTER_COLLECTIONS = "master_collections";
-	private static final String KV_SLAVES = "slaves";
-	private static final String KV_SLAVE_COLLECTIONS = "slave_collections";
-  
-
-	public InputsMesos() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsMesos(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-	
-  
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## Timeout, in ms."));
-		keyValuePairList.add(new KeyValuePair(1, KV_TIMEOUT, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## A list of Mesos masters."));
-		keyValuePairList.add(new KeyValuePair(2, KV_MASTERS, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Master metrics groups to be collected, by default, all enabled."));
-		keyValuePairList.add(new KeyValuePair(3, KV_MASTER_COLLECTIONS, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## A list of Mesos slaves, default is []"));
-		keyValuePairList.add(new KeyValuePair(4, KV_SLAVES, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Slave metrics groups to be collected, by default, all enabled."));
-		keyValuePairList.add(new KeyValuePair(5, KV_SLAVE_COLLECTIONS, null, "# ", null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsMesos { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsMesos extends Input implements Serializable
+{
+	private static final long serialVersionUID = -9185865562357509552L;
+	
+	private static final String DEFINITION_TEXT = "# Telegraf plugin for gathering metrics from N Mesos masters";
+	private static final String SIMPLE_NAME = "inputs.mesos";
+	private static final String FULL_NAME = "[[inputs.mesos]]";
+	private static final String KV_TIMEOUT = "timeout";
+	private static final String KV_MASTERS = "masters";
+	private static final String KV_MASTER_COLLECTIONS = "master_collections";
+	private static final String KV_SLAVES = "slaves";
+	private static final String KV_SLAVE_COLLECTIONS = "slave_collections";
+  
+
+	public InputsMesos() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsMesos(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+	
+  
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## Timeout, in ms."));
+		keyValuePairList.add(new KeyValuePair(1, KV_TIMEOUT, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## A list of Mesos masters."));
+		keyValuePairList.add(new KeyValuePair(2, KV_MASTERS, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Master metrics groups to be collected, by default, all enabled."));
+		keyValuePairList.add(new KeyValuePair(3, KV_MASTER_COLLECTIONS, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## A list of Mesos slaves, default is []"));
+		keyValuePairList.add(new KeyValuePair(4, KV_SLAVES, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Slave metrics groups to be collected, by default, all enabled."));
+		keyValuePairList.add(new KeyValuePair(5, KV_SLAVE_COLLECTIONS, null, "# ", null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsMesos { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsMongoDB.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsMongoDB.java
index 4efeca045307028dd6190342aed1e6870f8bfecb..95724b54614fdd74a46a8133b0549db6b940e516 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsMongoDB.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsMongoDB.java
@@ -1,85 +1,85 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsMongoDB extends Input implements Serializable
-{
-	private static final long serialVersionUID = 517137075053068458L;
-	
-	private static final String DEFINITION_TEXT = "# Read metrics from one or many MongoDB servers";
-	private static final String SIMPLE_NAME = "inputs.mongodb";
-	private static final String FULL_NAME = "[[inputs.mongodb]]";
-	private static final String KV_SERVERS = "servers";
-	private static final String KV_GATHER_PERDB_STATS = "gather_perdb_stats";
-	private static final String KV_SSL_CA = "ssl_ca";
-	private static final String KV_SSL_CERT = "ssl_cert";
-	private static final String KV_SSL_KEY = "ssl_key";
-	private static final String KV_INSECURE_SKIP_VERIFY = "insecure_skip_verify";
-  
-
-	public InputsMongoDB() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsMongoDB(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-	
-  
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## An array of URI to gather stats about. Specify an ip or hostname"));
-		list.add(new Comment(2, "## with optional port add password. ie,"));
-		list.add(new Comment(3, "##   mongodb://user:auth_key@10.10.3.30:27017,"));
-		list.add(new Comment(4, "##   mongodb://10.10.3.33:18832,"));
-		list.add(new Comment(5, "##   10.0.0.1:10000, etc."));
-		keyValuePairList.add(new KeyValuePair(1, KV_SERVERS, null, null, null, list));
-		    
-		keyValuePairList.add(new KeyValuePair(2, KV_GATHER_PERDB_STATS, null, null, null, null));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Optional SSL Config"));
-		keyValuePairList.add(new KeyValuePair(3, KV_SSL_CA, null, "# ", null, list));
-		    
-		keyValuePairList.add(new KeyValuePair(4, KV_SSL_CERT, null, "# ", null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(5, KV_SSL_KEY, null, "# ", null, null));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Use SSL but skip chain & host verification"));
-		keyValuePairList.add(new KeyValuePair(6, KV_INSECURE_SKIP_VERIFY, null, "# ", null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsMongoDB { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsMongoDB extends Input implements Serializable
+{
+	private static final long serialVersionUID = 517137075053068458L;
+	
+	private static final String DEFINITION_TEXT = "# Read metrics from one or many MongoDB servers";
+	private static final String SIMPLE_NAME = "inputs.mongodb";
+	private static final String FULL_NAME = "[[inputs.mongodb]]";
+	private static final String KV_SERVERS = "servers";
+	private static final String KV_GATHER_PERDB_STATS = "gather_perdb_stats";
+	private static final String KV_SSL_CA = "ssl_ca";
+	private static final String KV_SSL_CERT = "ssl_cert";
+	private static final String KV_SSL_KEY = "ssl_key";
+	private static final String KV_INSECURE_SKIP_VERIFY = "insecure_skip_verify";
+  
+
+	public InputsMongoDB() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsMongoDB(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+	
+  
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## An array of URI to gather stats about. Specify an ip or hostname"));
+		list.add(new Comment(2, "## with optional port add password. ie,"));
+		list.add(new Comment(3, "##   mongodb://user:auth_key@10.10.3.30:27017,"));
+		list.add(new Comment(4, "##   mongodb://10.10.3.33:18832,"));
+		list.add(new Comment(5, "##   10.0.0.1:10000, etc."));
+		keyValuePairList.add(new KeyValuePair(1, KV_SERVERS, null, null, null, list));
+		    
+		keyValuePairList.add(new KeyValuePair(2, KV_GATHER_PERDB_STATS, null, null, null, null));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Optional SSL Config"));
+		keyValuePairList.add(new KeyValuePair(3, KV_SSL_CA, null, "# ", null, list));
+		    
+		keyValuePairList.add(new KeyValuePair(4, KV_SSL_CERT, null, "# ", null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(5, KV_SSL_KEY, null, "# ", null, null));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Use SSL but skip chain & host verification"));
+		keyValuePairList.add(new KeyValuePair(6, KV_INSECURE_SKIP_VERIFY, null, "# ", null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsMongoDB { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsMySQL.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsMySQL.java
index 2138407a427f8ba2818e792ef163e443b86d3f6d..2b724dc9676f27a1874471b7a11bd61194f35f2a 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsMySQL.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsMySQL.java
@@ -1,168 +1,168 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsMySQL extends Input implements Serializable
-{
-	private static final long serialVersionUID = 6150040967980509556L;
-	
-	private static final String DEFINITION_TEXT = "# Read metrics from one or many mysql servers";
-	private static final String SIMPLE_NAME = "inputs.mysql";
-	private static final String FULL_NAME = "[[inputs.mysql]]";
-	private static final String KV_SERVERS = "servers";
-	private static final String KV_PERF_EVENTS_STATEMENTS_DIGEST_TEXT_LIMIT = "perf_events_statements_digest_text_limit";
-	private static final String KV_PERF_EVENTS_STATEMENTS_LIMIT = "perf_events_statements_limit";
-	private static final String KV_PERF_EVENTS_STATEMENTS_TIME_LIMIT = "perf_events_statements_time_limit";
-	private static final String KV_TABLE_SCHEMA_DATABASES = "table_schema_databases";
-	private static final String KV_GATHER_TABLE_SCHEMA = "gather_table_schema";
-	private static final String KV_GATHER_PROCESS_LIST = "gather_process_list";
-	private static final String KV_GATHER_USER_STATISTICS = "gather_user_statistics";
-	private static final String KV_GATHER_INFO_SCHEMA_AUTO_INC = "gather_info_schema_auto_inc";
-	private static final String KV_GATHER_INNODB_METRICS = "gather_innodb_metrics";
-	private static final String KV_GATHER_SLAVE_STATUS = "gather_slave_status";
-	private static final String KV_GATHER_BINARY_LOGS = "gather_binary_logs";
-	private static final String KV_GATHER_TABLE_IO_WAITS = "gather_table_io_waits";
-	private static final String KV_GATHER_TABLE_LOCK_WAITS = "gather_table_lock_waits";
-	private static final String KV_GATHER_INDEX_IO_WAITS = "gather_index_io_waits";
-	private static final String KV_GATHER_EVENT_WAITS = "gather_event_waits";
-	private static final String KV_GATHER_FILE_EVENTS_STATS = "gather_file_events_stats";
-	private static final String KV_GATHER_PERF_EVENTS_STATEMENTS = "gather_perf_events_statements";
-	private static final String KV_INTERVAL_SLOW = "interval_slow";
-  
-
-	public InputsMySQL() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsMySQL(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "## specify servers via a url matching:"));
-		list.add(new Comment(2, "##  [username[:password]@][protocol[(address)]]/[?tls=[true|false|skip-verify]]"));
-		list.add(new Comment(3, "##  see https://github.com/go-sql-driver/mysql#dsn-data-source-name"));
-		list.add(new Comment(4, "##  e.g."));
-		list.add(new Comment(5, "##    servers=[\"user:passwd@tcp(127.0.0.1:3306)/?tls=false\"]"));
-		list.add(new Comment(6, "##    servers=[\"user@tcp(127.0.0.1:3306)/?tls=false\"]"));
-		list.add(new Comment(7, "#"));
-		list.add(new Comment(8, "## If no servers are specified, then localhost is used as the host."));
-		keyValuePairList.add(new KeyValuePair(1, KV_SERVERS, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## the limits for metrics form perf_events_statements"));
-		keyValuePairList.add(new KeyValuePair(2, KV_PERF_EVENTS_STATEMENTS_DIGEST_TEXT_LIMIT, null, null, null, list));
-		    
-		keyValuePairList.add(new KeyValuePair(3, KV_PERF_EVENTS_STATEMENTS_LIMIT, null, null, null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(4, KV_PERF_EVENTS_STATEMENTS_TIME_LIMIT, null, null, null, null));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "#"));
-		list.add(new Comment(2, "## if the list is empty, then metrics are gathered from all database tables"));
-		keyValuePairList.add(new KeyValuePair(5, KV_TABLE_SCHEMA_DATABASES, null, null, null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "#"));
-		list.add(new Comment(2, "## gather metrics from INFORMATION_SCHEMA.TABLES for databases provided above list"));
-		keyValuePairList.add(new KeyValuePair(6, KV_GATHER_TABLE_SCHEMA, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "#"));
-		list.add(new Comment(2, "## gather thread state counts from INFORMATION_SCHEMA.PROCESSLIST"));
-		keyValuePairList.add(new KeyValuePair(7, KV_GATHER_PROCESS_LIST, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "#"));
-		list.add(new Comment(2, "## gather thread state counts from INFORMATION_SCHEMA.USER_STATISTICS"));
-		keyValuePairList.add(new KeyValuePair(8, KV_GATHER_USER_STATISTICS, null, null, null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "#"));
-		list.add(new Comment(2, "## gather auto_increment columns and max values from information schema"));
-		keyValuePairList.add(new KeyValuePair(9, KV_GATHER_INFO_SCHEMA_AUTO_INC, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "#"));
-		list.add(new Comment(2, "## gather metrics from INFORMATION_SCHEMA.INNODB_METRICS"));
-		keyValuePairList.add(new KeyValuePair(10, KV_GATHER_INNODB_METRICS, null, null, null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "#"));
-		list.add(new Comment(2, "## gather metrics from SHOW SLAVE STATUS command output"));
-		keyValuePairList.add(new KeyValuePair(11, KV_GATHER_SLAVE_STATUS, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "#"));
-		list.add(new Comment(2, "## gather metrics from SHOW BINARY LOGS command output"));
-		keyValuePairList.add(new KeyValuePair(12, KV_GATHER_BINARY_LOGS, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "#"));
-		list.add(new Comment(2, "## gather metrics from PERFORMANCE_SCHEMA.TABLE_IO_WAITS_SUMMARY_BY_TABLE"));
-		keyValuePairList.add(new KeyValuePair(13, KV_GATHER_TABLE_IO_WAITS, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "#"));
-		list.add(new Comment(2, "## gather metrics from PERFORMANCE_SCHEMA.TABLE_LOCK_WAITS"));
-		keyValuePairList.add(new KeyValuePair(14, KV_GATHER_TABLE_LOCK_WAITS, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "#"));
-		list.add(new Comment(2, "## gather metrics from PERFORMANCE_SCHEMA.TABLE_IO_WAITS_SUMMARY_BY_INDEX_USAGE"));
-		keyValuePairList.add(new KeyValuePair(15, KV_GATHER_INDEX_IO_WAITS, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "#"));
-		list.add(new Comment(2, "## gather metrics from PERFORMANCE_SCHEMA.EVENT_WAITS"));
-		keyValuePairList.add(new KeyValuePair(16, KV_GATHER_EVENT_WAITS, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "#"));
-		list.add(new Comment(2, "## gather metrics from PERFORMANCE_SCHEMA.FILE_SUMMARY_BY_EVENT_NAME"));
-		keyValuePairList.add(new KeyValuePair(17, KV_GATHER_FILE_EVENTS_STATS, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "#"));
-		list.add(new Comment(2, "## gather metrics from PERFORMANCE_SCHEMA.EVENTS_STATEMENTS_SUMMARY_BY_DIGEST"));
-		keyValuePairList.add(new KeyValuePair(18, KV_GATHER_PERF_EVENTS_STATEMENTS, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "#"));
-		list.add(new Comment(2, "## Some queries we may want to run less often (such as SHOW GLOBAL VARIABLES)"));
-		keyValuePairList.add(new KeyValuePair(19, KV_INTERVAL_SLOW, null, null, null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsMySQL { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsMySQL extends Input implements Serializable
+{
+	private static final long serialVersionUID = 6150040967980509556L;
+	
+	private static final String DEFINITION_TEXT = "# Read metrics from one or many mysql servers";
+	private static final String SIMPLE_NAME = "inputs.mysql";
+	private static final String FULL_NAME = "[[inputs.mysql]]";
+	private static final String KV_SERVERS = "servers";
+	private static final String KV_PERF_EVENTS_STATEMENTS_DIGEST_TEXT_LIMIT = "perf_events_statements_digest_text_limit";
+	private static final String KV_PERF_EVENTS_STATEMENTS_LIMIT = "perf_events_statements_limit";
+	private static final String KV_PERF_EVENTS_STATEMENTS_TIME_LIMIT = "perf_events_statements_time_limit";
+	private static final String KV_TABLE_SCHEMA_DATABASES = "table_schema_databases";
+	private static final String KV_GATHER_TABLE_SCHEMA = "gather_table_schema";
+	private static final String KV_GATHER_PROCESS_LIST = "gather_process_list";
+	private static final String KV_GATHER_USER_STATISTICS = "gather_user_statistics";
+	private static final String KV_GATHER_INFO_SCHEMA_AUTO_INC = "gather_info_schema_auto_inc";
+	private static final String KV_GATHER_INNODB_METRICS = "gather_innodb_metrics";
+	private static final String KV_GATHER_SLAVE_STATUS = "gather_slave_status";
+	private static final String KV_GATHER_BINARY_LOGS = "gather_binary_logs";
+	private static final String KV_GATHER_TABLE_IO_WAITS = "gather_table_io_waits";
+	private static final String KV_GATHER_TABLE_LOCK_WAITS = "gather_table_lock_waits";
+	private static final String KV_GATHER_INDEX_IO_WAITS = "gather_index_io_waits";
+	private static final String KV_GATHER_EVENT_WAITS = "gather_event_waits";
+	private static final String KV_GATHER_FILE_EVENTS_STATS = "gather_file_events_stats";
+	private static final String KV_GATHER_PERF_EVENTS_STATEMENTS = "gather_perf_events_statements";
+	private static final String KV_INTERVAL_SLOW = "interval_slow";
+  
+
+	public InputsMySQL() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsMySQL(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "## specify servers via a url matching:"));
+		list.add(new Comment(2, "##  [username[:password]@][protocol[(address)]]/[?tls=[true|false|skip-verify]]"));
+		list.add(new Comment(3, "##  see https://github.com/go-sql-driver/mysql#dsn-data-source-name"));
+		list.add(new Comment(4, "##  e.g."));
+		list.add(new Comment(5, "##    servers=[\"user:passwd@tcp(127.0.0.1:3306)/?tls=false\"]"));
+		list.add(new Comment(6, "##    servers=[\"user@tcp(127.0.0.1:3306)/?tls=false\"]"));
+		list.add(new Comment(7, "#"));
+		list.add(new Comment(8, "## If no servers are specified, then localhost is used as the host."));
+		keyValuePairList.add(new KeyValuePair(1, KV_SERVERS, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## the limits for metrics form perf_events_statements"));
+		keyValuePairList.add(new KeyValuePair(2, KV_PERF_EVENTS_STATEMENTS_DIGEST_TEXT_LIMIT, null, null, null, list));
+		    
+		keyValuePairList.add(new KeyValuePair(3, KV_PERF_EVENTS_STATEMENTS_LIMIT, null, null, null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(4, KV_PERF_EVENTS_STATEMENTS_TIME_LIMIT, null, null, null, null));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "#"));
+		list.add(new Comment(2, "## if the list is empty, then metrics are gathered from all database tables"));
+		keyValuePairList.add(new KeyValuePair(5, KV_TABLE_SCHEMA_DATABASES, null, null, null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "#"));
+		list.add(new Comment(2, "## gather metrics from INFORMATION_SCHEMA.TABLES for databases provided above list"));
+		keyValuePairList.add(new KeyValuePair(6, KV_GATHER_TABLE_SCHEMA, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "#"));
+		list.add(new Comment(2, "## gather thread state counts from INFORMATION_SCHEMA.PROCESSLIST"));
+		keyValuePairList.add(new KeyValuePair(7, KV_GATHER_PROCESS_LIST, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "#"));
+		list.add(new Comment(2, "## gather thread state counts from INFORMATION_SCHEMA.USER_STATISTICS"));
+		keyValuePairList.add(new KeyValuePair(8, KV_GATHER_USER_STATISTICS, null, null, null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "#"));
+		list.add(new Comment(2, "## gather auto_increment columns and max values from information schema"));
+		keyValuePairList.add(new KeyValuePair(9, KV_GATHER_INFO_SCHEMA_AUTO_INC, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "#"));
+		list.add(new Comment(2, "## gather metrics from INFORMATION_SCHEMA.INNODB_METRICS"));
+		keyValuePairList.add(new KeyValuePair(10, KV_GATHER_INNODB_METRICS, null, null, null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "#"));
+		list.add(new Comment(2, "## gather metrics from SHOW SLAVE STATUS command output"));
+		keyValuePairList.add(new KeyValuePair(11, KV_GATHER_SLAVE_STATUS, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "#"));
+		list.add(new Comment(2, "## gather metrics from SHOW BINARY LOGS command output"));
+		keyValuePairList.add(new KeyValuePair(12, KV_GATHER_BINARY_LOGS, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "#"));
+		list.add(new Comment(2, "## gather metrics from PERFORMANCE_SCHEMA.TABLE_IO_WAITS_SUMMARY_BY_TABLE"));
+		keyValuePairList.add(new KeyValuePair(13, KV_GATHER_TABLE_IO_WAITS, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "#"));
+		list.add(new Comment(2, "## gather metrics from PERFORMANCE_SCHEMA.TABLE_LOCK_WAITS"));
+		keyValuePairList.add(new KeyValuePair(14, KV_GATHER_TABLE_LOCK_WAITS, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "#"));
+		list.add(new Comment(2, "## gather metrics from PERFORMANCE_SCHEMA.TABLE_IO_WAITS_SUMMARY_BY_INDEX_USAGE"));
+		keyValuePairList.add(new KeyValuePair(15, KV_GATHER_INDEX_IO_WAITS, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "#"));
+		list.add(new Comment(2, "## gather metrics from PERFORMANCE_SCHEMA.EVENT_WAITS"));
+		keyValuePairList.add(new KeyValuePair(16, KV_GATHER_EVENT_WAITS, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "#"));
+		list.add(new Comment(2, "## gather metrics from PERFORMANCE_SCHEMA.FILE_SUMMARY_BY_EVENT_NAME"));
+		keyValuePairList.add(new KeyValuePair(17, KV_GATHER_FILE_EVENTS_STATS, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "#"));
+		list.add(new Comment(2, "## gather metrics from PERFORMANCE_SCHEMA.EVENTS_STATEMENTS_SUMMARY_BY_DIGEST"));
+		keyValuePairList.add(new KeyValuePair(18, KV_GATHER_PERF_EVENTS_STATEMENTS, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "#"));
+		list.add(new Comment(2, "## Some queries we may want to run less often (such as SHOW GLOBAL VARIABLES)"));
+		keyValuePairList.add(new KeyValuePair(19, KV_INTERVAL_SLOW, null, null, null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsMySQL { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsNSQ.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsNSQ.java
index bfc64b2efef10847ad556e541ad6348f5b2838b3..14aecbdae8a0d14448c1417d1927406e99c02195 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsNSQ.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsNSQ.java
@@ -1,61 +1,61 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsNSQ extends Input implements Serializable
-{
-	private static final long serialVersionUID = 2293064344609622476L;
-	
-	private static final String DEFINITION_TEXT = "# Read NSQ topic and channel statistics.";
-	private static final String SIMPLE_NAME = "inputs.nsq";
-	private static final String FULL_NAME = "[[inputs.nsq]]";
-	private static final String KV_ENDPOINTS = "endpoints";
-  
-
-	public InputsNSQ() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsNSQ(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## An array of NSQD HTTP API endpoints"));
-		keyValuePairList.add(new KeyValuePair(1, KV_ENDPOINTS, null, null, null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsNSQ { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsNSQ extends Input implements Serializable
+{
+	private static final long serialVersionUID = 2293064344609622476L;
+	
+	private static final String DEFINITION_TEXT = "# Read NSQ topic and channel statistics.";
+	private static final String SIMPLE_NAME = "inputs.nsq";
+	private static final String FULL_NAME = "[[inputs.nsq]]";
+	private static final String KV_ENDPOINTS = "endpoints";
+  
+
+	public InputsNSQ() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsNSQ(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## An array of NSQD HTTP API endpoints"));
+		keyValuePairList.add(new KeyValuePair(1, KV_ENDPOINTS, null, null, null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsNSQ { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsNStat.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsNStat.java
index 3172ab7e203d5e0ab850682830983ada9556da46..7ac5bf87c3ebb1fbb105d821dbe51861b3f4ad20 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsNStat.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsNStat.java
@@ -1,74 +1,74 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsNStat extends Input implements Serializable
-{
-	private static final long serialVersionUID = 2977751100212900024L;
-	
-	private static final String DEFINITION_TEXT = "# Collect kernel snmp counters and network interface statistics";
-	private static final String SIMPLE_NAME = "inputs.nstat";
-	private static final String FULL_NAME = "[[inputs.nstat]]";
-	private static final String KV_PROC_NET_NETSTAT = "proc_net_netstat";
-	private static final String KV_PROC_NET_SNMP = "proc_net_snmp";
-	private static final String KV_PROC_NET_SNMP6 = "proc_net_snmp6";
-	private static final String KV_DUMP_ZEROS = "dump_zeros";
-  
-
-	public InputsNStat() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsNStat(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## file paths for proc files. If empty default paths will be used:"));
-		list.add(new Comment(2, "##    /proc/net/netstat, /proc/net/snmp, /proc/net/snmp6"));
-		list.add(new Comment(3, "## These can also be overridden with env variables, see README."));
-		keyValuePairList.add(new KeyValuePair(1, KV_PROC_NET_NETSTAT, null, null, null, list));
-		    
-		keyValuePairList.add(new KeyValuePair(2, KV_PROC_NET_SNMP, null, null, null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(3, KV_PROC_NET_SNMP6, null, null, null, null));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## dump metrics with 0 values too"));
-		keyValuePairList.add(new KeyValuePair(4, KV_DUMP_ZEROS, null, null, null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsNStat { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsNStat extends Input implements Serializable
+{
+	private static final long serialVersionUID = 2977751100212900024L;
+	
+	private static final String DEFINITION_TEXT = "# Collect kernel snmp counters and network interface statistics";
+	private static final String SIMPLE_NAME = "inputs.nstat";
+	private static final String FULL_NAME = "[[inputs.nstat]]";
+	private static final String KV_PROC_NET_NETSTAT = "proc_net_netstat";
+	private static final String KV_PROC_NET_SNMP = "proc_net_snmp";
+	private static final String KV_PROC_NET_SNMP6 = "proc_net_snmp6";
+	private static final String KV_DUMP_ZEROS = "dump_zeros";
+  
+
+	public InputsNStat() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsNStat(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## file paths for proc files. If empty default paths will be used:"));
+		list.add(new Comment(2, "##    /proc/net/netstat, /proc/net/snmp, /proc/net/snmp6"));
+		list.add(new Comment(3, "## These can also be overridden with env variables, see README."));
+		keyValuePairList.add(new KeyValuePair(1, KV_PROC_NET_NETSTAT, null, null, null, list));
+		    
+		keyValuePairList.add(new KeyValuePair(2, KV_PROC_NET_SNMP, null, null, null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(3, KV_PROC_NET_SNMP6, null, null, null, null));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## dump metrics with 0 values too"));
+		keyValuePairList.add(new KeyValuePair(4, KV_DUMP_ZEROS, null, null, null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsNStat { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsNTPQ.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsNTPQ.java
index 2a6038f680a6bdd793abc02c8d76857049c1af9b..6d27626240a9b87f598a903649429e27ef447297 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsNTPQ.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsNTPQ.java
@@ -1,61 +1,61 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsNTPQ extends Input implements Serializable
-{
-	private static final long serialVersionUID = 5964273457917789889L;
-	
-	private static final String DEFINITION_TEXT = "# Get standard NTP query metrics, requires ntpq executable.";
-	private static final String SIMPLE_NAME = "inputs.ntpq";
-	private static final String FULL_NAME = "[[inputs.ntpq]]";
-	private static final String KV_DNS_LOOKUP = "dns_lookup";
-  
-
-	public InputsNTPQ() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsNTPQ(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## If false, set the -n ntpq flag. Can reduce metric gather time."));
-		keyValuePairList.add(new KeyValuePair(1, KV_DNS_LOOKUP, null, null, null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsNTPQ { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsNTPQ extends Input implements Serializable
+{
+	private static final long serialVersionUID = 5964273457917789889L;
+	
+	private static final String DEFINITION_TEXT = "# Get standard NTP query metrics, requires ntpq executable.";
+	private static final String SIMPLE_NAME = "inputs.ntpq";
+	private static final String FULL_NAME = "[[inputs.ntpq]]";
+	private static final String KV_DNS_LOOKUP = "dns_lookup";
+  
+
+	public InputsNTPQ() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsNTPQ(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## If false, set the -n ntpq flag. Can reduce metric gather time."));
+		keyValuePairList.add(new KeyValuePair(1, KV_DNS_LOOKUP, null, null, null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsNTPQ { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsNet.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsNet.java
index 823b8c925739c79166134e3aa19848a666706550..400e9c0073b9c7ce7155f81d9b2077da8218557a 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsNet.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsNet.java
@@ -1,64 +1,64 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsNet extends Input implements Serializable
-{
-	private static final long serialVersionUID = 4350722930502918324L;
-	
-	private static final String DEFINITION_TEXT = "# Read metrics about network interface usage";
-	private static final String SIMPLE_NAME = "inputs.net";
-	private static final String FULL_NAME = "[[inputs.net]]";
-	private static final String KV_INTERFACES = "interfaces";
-  
-
-	public InputsNet() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsNet(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## By default, telegraf gathers stats from any up interface (excluding loopback)"));
-		list.add(new Comment(2, "## Setting interfaces will tell it to gather these explicit interfaces,"));
-		list.add(new Comment(3, "## regardless of status."));
-		list.add(new Comment(4, "##"));
-		keyValuePairList.add(new KeyValuePair(1, KV_INTERFACES, null, "# ", null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsNet { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsNet extends Input implements Serializable
+{
+	private static final long serialVersionUID = 4350722930502918324L;
+	
+	private static final String DEFINITION_TEXT = "# Read metrics about network interface usage";
+	private static final String SIMPLE_NAME = "inputs.net";
+	private static final String FULL_NAME = "[[inputs.net]]";
+	private static final String KV_INTERFACES = "interfaces";
+  
+
+	public InputsNet() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsNet(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## By default, telegraf gathers stats from any up interface (excluding loopback)"));
+		list.add(new Comment(2, "## Setting interfaces will tell it to gather these explicit interfaces,"));
+		list.add(new Comment(3, "## regardless of status."));
+		list.add(new Comment(4, "##"));
+		keyValuePairList.add(new KeyValuePair(1, KV_INTERFACES, null, "# ", null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsNet { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsNetResponse.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsNetResponse.java
index 7a5807a393574995c262da628397e2c9dfe3c331..14d00dedcd428edd089876516ed12a136bafd634 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsNetResponse.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsNetResponse.java
@@ -1,93 +1,93 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsNetResponse extends Input implements Serializable
-{
-	private static final long serialVersionUID = 9013180078462258119L;
-	
-	private static final String DEFINITION_TEXT = "# TCP or UDP 'ping' given url and collect response time in seconds";
-	private static final String SIMPLE_NAME = "inputs.net_response";
-	private static final String FULL_NAME = "[[inputs.net_response]]";
-	private static final String KV_PROTOCOL = "protocol";
-	private static final String KV_ADDRESS = "address";
-	private static final String KV_TIMEOUT = "timeout";
-	private static final String KV_READ_TIMEOUT = "read_timeout";
-	private static final String KV_SEND = "send";
-	private static final String KV_EXPECT = "expect";
-  
-
-	public InputsNetResponse() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsNetResponse(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## Protocol, must be \"tcp\" or \"udp\""));
-		list.add(new Comment(2, "## NOTE: because the \"udp\" protocol does not respond to requests, it requires"));
-		list.add(new Comment(3, "## a send/expect string pair (see below)."));
-		keyValuePairList.add(new KeyValuePair(1, KV_PROTOCOL, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Server address (default localhost)"));
-		keyValuePairList.add(new KeyValuePair(2, KV_ADDRESS, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Set timeout"));
-		keyValuePairList.add(new KeyValuePair(3, KV_TIMEOUT, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Set read timeout (only used if expecting a response)"));
-		keyValuePairList.add(new KeyValuePair(4, KV_READ_TIMEOUT, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## The following options are required for UDP checks. For TCP, they are"));
-		list.add(new Comment(3, "## optional. The plugin will send the given string to the server and then"));
-		list.add(new Comment(4, "## expect to receive the given 'expect' string back."));
-		list.add(new Comment(5, "## string sent to the server"));
-		keyValuePairList.add(new KeyValuePair(5, KV_SEND, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## expected string in answer"));
-		keyValuePairList.add(new KeyValuePair(6, KV_EXPECT, null, "# ", null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsNetResponse { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsNetResponse extends Input implements Serializable
+{
+	private static final long serialVersionUID = 9013180078462258119L;
+	
+	private static final String DEFINITION_TEXT = "# TCP or UDP 'ping' given url and collect response time in seconds";
+	private static final String SIMPLE_NAME = "inputs.net_response";
+	private static final String FULL_NAME = "[[inputs.net_response]]";
+	private static final String KV_PROTOCOL = "protocol";
+	private static final String KV_ADDRESS = "address";
+	private static final String KV_TIMEOUT = "timeout";
+	private static final String KV_READ_TIMEOUT = "read_timeout";
+	private static final String KV_SEND = "send";
+	private static final String KV_EXPECT = "expect";
+  
+
+	public InputsNetResponse() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsNetResponse(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## Protocol, must be \"tcp\" or \"udp\""));
+		list.add(new Comment(2, "## NOTE: because the \"udp\" protocol does not respond to requests, it requires"));
+		list.add(new Comment(3, "## a send/expect string pair (see below)."));
+		keyValuePairList.add(new KeyValuePair(1, KV_PROTOCOL, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Server address (default localhost)"));
+		keyValuePairList.add(new KeyValuePair(2, KV_ADDRESS, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Set timeout"));
+		keyValuePairList.add(new KeyValuePair(3, KV_TIMEOUT, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Set read timeout (only used if expecting a response)"));
+		keyValuePairList.add(new KeyValuePair(4, KV_READ_TIMEOUT, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## The following options are required for UDP checks. For TCP, they are"));
+		list.add(new Comment(3, "## optional. The plugin will send the given string to the server and then"));
+		list.add(new Comment(4, "## expect to receive the given 'expect' string back."));
+		list.add(new Comment(5, "## string sent to the server"));
+		keyValuePairList.add(new KeyValuePair(5, KV_SEND, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## expected string in answer"));
+		keyValuePairList.add(new KeyValuePair(6, KV_EXPECT, null, "# ", null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsNetResponse { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsNetStat.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsNetStat.java
index 5152cd331b4406de881d39f1097281d796981d6c..d510eec93c0b9cbd557f8eeaccfd8ba7e7caa393 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsNetStat.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsNetStat.java
@@ -1,60 +1,60 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsNetStat extends Input implements Serializable
-{
-	private static final long serialVersionUID = -4298980797287583327L;
-	
-	private static final String DEFINITION_TEXT = "# Read TCP metrics such as established, time wait and sockets counts.";
-	private static final String SIMPLE_NAME = "inputs.netstat";
-	private static final String FULL_NAME = "[[inputs.netstat]]";
-  
-
-	public InputsNetStat() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsNetStat(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-	
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "# no configuration"));
-		keyValuePairList.add(new KeyValuePair(1, null, null, null, null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsNetStat { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsNetStat extends Input implements Serializable
+{
+	private static final long serialVersionUID = -4298980797287583327L;
+	
+	private static final String DEFINITION_TEXT = "# Read TCP metrics such as established, time wait and sockets counts.";
+	private static final String SIMPLE_NAME = "inputs.netstat";
+	private static final String FULL_NAME = "[[inputs.netstat]]";
+  
+
+	public InputsNetStat() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsNetStat(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+	
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "# no configuration"));
+		keyValuePairList.add(new KeyValuePair(1, null, null, null, null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsNetStat { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsNginx.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsNginx.java
index d926d4fd28573f78c7c5c37b4268f7148c136a2b..aa085539a0c06583e6e5d63c100fa6f5788d9421 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsNginx.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsNginx.java
@@ -1,61 +1,61 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsNginx extends Input implements Serializable
-{
-	private static final long serialVersionUID = -7380379318886285212L;
-	
-	private static final String DEFINITION_TEXT = "# Read Nginx's basic status information (ngx_http_stub_status_module)";
-	private static final String SIMPLE_NAME = "inputs.nginx";
-	private static final String FULL_NAME = "[[inputs.nginx]]";
-	private static final String KV_URLS = "urls";
-  
-
-	public InputsNginx() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsNginx(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-	
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## An array of Nginx stub_status URI to gather stats."));
-		keyValuePairList.add(new KeyValuePair(1, KV_URLS, null, null, null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsNginx { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsNginx extends Input implements Serializable
+{
+	private static final long serialVersionUID = -7380379318886285212L;
+	
+	private static final String DEFINITION_TEXT = "# Read Nginx's basic status information (ngx_http_stub_status_module)";
+	private static final String SIMPLE_NAME = "inputs.nginx";
+	private static final String FULL_NAME = "[[inputs.nginx]]";
+	private static final String KV_URLS = "urls";
+  
+
+	public InputsNginx() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsNginx(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+	
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## An array of Nginx stub_status URI to gather stats."));
+		keyValuePairList.add(new KeyValuePair(1, KV_URLS, null, null, null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsNginx { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsPassenger.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsPassenger.java
index a10e84c6d691d6c6f44178ee4d1f01e98bf93421..ffe8cdbb842dd0c7ecd06d0f89874ebac97d8f66 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsPassenger.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsPassenger.java
@@ -1,68 +1,68 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsPassenger extends Input implements Serializable
-{
-	private static final long serialVersionUID = 8452404479357631340L;
-	
-	private static final String DEFINITION_TEXT = "# Read metrics of passenger using passenger-status";
-	private static final String SIMPLE_NAME = "inputs.passenger";
-	private static final String FULL_NAME = "[[inputs.passenger]]";
-	private static final String KV_COMMAND = "command";
-  
-
-	public InputsPassenger() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsPassenger(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "## Path of passenger-status."));
-		list.add(new Comment(2, "##"));
-		list.add(new Comment(3, "## Plugin gather metric via parsing XML output of passenger-status"));
-		list.add(new Comment(4, "## More information about the tool:"));
-		list.add(new Comment(5, "##   https://www.phusionpassenger.com/library/admin/apache/overall_status_report.html"));
-		list.add(new Comment(6, "##"));
-		list.add(new Comment(7, "## If no path is specified, then the plugin simply execute passenger-status"));
-		list.add(new Comment(8, "## hopefully it can be found in your PATH"));
-		keyValuePairList.add(new KeyValuePair(1, KV_COMMAND, null, null, null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsPassenger { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsPassenger extends Input implements Serializable
+{
+	private static final long serialVersionUID = 8452404479357631340L;
+	
+	private static final String DEFINITION_TEXT = "# Read metrics of passenger using passenger-status";
+	private static final String SIMPLE_NAME = "inputs.passenger";
+	private static final String FULL_NAME = "[[inputs.passenger]]";
+	private static final String KV_COMMAND = "command";
+  
+
+	public InputsPassenger() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsPassenger(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "## Path of passenger-status."));
+		list.add(new Comment(2, "##"));
+		list.add(new Comment(3, "## Plugin gather metric via parsing XML output of passenger-status"));
+		list.add(new Comment(4, "## More information about the tool:"));
+		list.add(new Comment(5, "##   https://www.phusionpassenger.com/library/admin/apache/overall_status_report.html"));
+		list.add(new Comment(6, "##"));
+		list.add(new Comment(7, "## If no path is specified, then the plugin simply execute passenger-status"));
+		list.add(new Comment(8, "## hopefully it can be found in your PATH"));
+		keyValuePairList.add(new KeyValuePair(1, KV_COMMAND, null, null, null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsPassenger { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsPhpfpm.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsPhpfpm.java
index 5cc792a301ec4d8e1f632412fa77240ef5534b08..804675cab8053a0818c9b2aea9781f3d0bfa4068 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsPhpfpm.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsPhpfpm.java
@@ -1,78 +1,78 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsPhpfpm extends Input implements Serializable
-{
-	private static final long serialVersionUID = -4196624702883348417L;
-	
-	private static final String DEFINITION_TEXT = "# Read metrics of phpfpm, via HTTP status page or socket";
-	private static final String SIMPLE_NAME = "inputs.phpfpm";
-	private static final String FULL_NAME = "[[inputs.phpfpm]]";
-	private static final String KV_URLS = "urls";
-  
-	public InputsPhpfpm() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsPhpfpm(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "## An array of addresses to gather stats about. Specify an ip or hostname"));
-		list.add(new Comment(2, "## with optional port and path"));
-		list.add(new Comment(3, "##"));
-		list.add(new Comment(4, "## Plugin can be configured in three modes (either can be used):"));
-		list.add(new Comment(5, "##   - http: the URL must start with http:// or https://, ie:"));
-		list.add(new Comment(6, "##       \"http://localhost/status\""));
-		list.add(new Comment(7, "##       \"http://192.168.130.1/status?full\""));
-		list.add(new Comment(8, "##"));
-		list.add(new Comment(9, "##   - unixsocket: path to fpm socket, ie:"));
-		list.add(new Comment(10, "##       \"/var/run/php5-fpm.sock\""));
-		list.add(new Comment(Integer.valueOf(11), "##      or using a custom fpm status path:"));
-		list.add(new Comment(Integer.valueOf(12), "##       \"/var/run/php5-fpm.sock:fpm-custom-status-path\""));
-		list.add(new Comment(Integer.valueOf(13), "##"));
-		list.add(new Comment(Integer.valueOf(14), "##   - fcgi: the URL must start with fcgi:// or cgi://, and port must be present, ie:"));
-		list.add(new Comment(Integer.valueOf(15), "##       \"fcgi://10.0.0.12:9000/status\""));
-		list.add(new Comment(Integer.valueOf(16), "##       \"cgi://10.0.10.12:9001/status\""));
-		list.add(new Comment(Integer.valueOf(17), "##"));
-		list.add(new Comment(Integer.valueOf(18), "## Example of multiple gathering from local socket and remove host"));
-		list.add(new Comment(Integer.valueOf(19), "## urls=[\"http://192.168.1.20/status\", \"/tmp/fpm.sock\"]"));
-		keyValuePairList.add(new KeyValuePair(Integer.valueOf(1), KV_URLS, null, null, null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsPhpfpm { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsPhpfpm extends Input implements Serializable
+{
+	private static final long serialVersionUID = -4196624702883348417L;
+	
+	private static final String DEFINITION_TEXT = "# Read metrics of phpfpm, via HTTP status page or socket";
+	private static final String SIMPLE_NAME = "inputs.phpfpm";
+	private static final String FULL_NAME = "[[inputs.phpfpm]]";
+	private static final String KV_URLS = "urls";
+  
+	public InputsPhpfpm() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsPhpfpm(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "## An array of addresses to gather stats about. Specify an ip or hostname"));
+		list.add(new Comment(2, "## with optional port and path"));
+		list.add(new Comment(3, "##"));
+		list.add(new Comment(4, "## Plugin can be configured in three modes (either can be used):"));
+		list.add(new Comment(5, "##   - http: the URL must start with http:// or https://, ie:"));
+		list.add(new Comment(6, "##       \"http://localhost/status\""));
+		list.add(new Comment(7, "##       \"http://192.168.130.1/status?full\""));
+		list.add(new Comment(8, "##"));
+		list.add(new Comment(9, "##   - unixsocket: path to fpm socket, ie:"));
+		list.add(new Comment(10, "##       \"/var/run/php5-fpm.sock\""));
+		list.add(new Comment(Integer.valueOf(11), "##      or using a custom fpm status path:"));
+		list.add(new Comment(Integer.valueOf(12), "##       \"/var/run/php5-fpm.sock:fpm-custom-status-path\""));
+		list.add(new Comment(Integer.valueOf(13), "##"));
+		list.add(new Comment(Integer.valueOf(14), "##   - fcgi: the URL must start with fcgi:// or cgi://, and port must be present, ie:"));
+		list.add(new Comment(Integer.valueOf(15), "##       \"fcgi://10.0.0.12:9000/status\""));
+		list.add(new Comment(Integer.valueOf(16), "##       \"cgi://10.0.10.12:9001/status\""));
+		list.add(new Comment(Integer.valueOf(17), "##"));
+		list.add(new Comment(Integer.valueOf(18), "## Example of multiple gathering from local socket and remove host"));
+		list.add(new Comment(Integer.valueOf(19), "## urls=[\"http://192.168.1.20/status\", \"/tmp/fpm.sock\"]"));
+		keyValuePairList.add(new KeyValuePair(Integer.valueOf(1), KV_URLS, null, null, null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsPhpfpm { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsPing.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsPing.java
index 4fdbd149e50fbb0cf878d39267597db06dfe6358..2bb3b57c4dd3e57bd101a34b73817dd9aac45712 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsPing.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsPing.java
@@ -1,84 +1,106 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsPing extends Input implements Serializable
-{
-	private static final long serialVersionUID = 7058271274334999341L;
-	
-	private static final String DEFINITION_TEXT = "# Ping given url(s) and return statistics";
-	private static final String SIMPLE_NAME = "inputs.ping";
-	private static final String FULL_NAME = "[[inputs.ping]]";
-	private static final String KV_URLS = "urls";
-	private static final String KV_COUNT = "count";
-	private static final String KV_PING_INTERVAL = "ping_interval";
-	private static final String KV_TIMEOUT = "timeout";
-	private static final String KV_INTERFACE = "interface";
-  
-
-	public InputsPing() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsPing(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## NOTE: this plugin forks the ping command. You may need to set capabilities"));
-		list.add(new Comment(2, "## via setcap cap_net_raw+p /bin/ping"));
-		list.add(new Comment(3, "#"));
-		list.add(new Comment(4, "## List of urls to ping"));
-		keyValuePairList.add(new KeyValuePair(1, KV_URLS, null, null, "# required", list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## number of pings to send per collection (ping -c <COUNT>)"));
-		keyValuePairList.add(new KeyValuePair(2, KV_COUNT, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## interval, in s, at which to ping. 0 == default (ping -i <PING_INTERVAL>)"));
-		keyValuePairList.add(new KeyValuePair(3, KV_PING_INTERVAL, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## per-ping timeout, in s. 0 == no timeout (ping -W <TIMEOUT>)"));
-		keyValuePairList.add(new KeyValuePair(4, KV_TIMEOUT, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## interface to send ping from (ping -I <INTERFACE>)"));
-		keyValuePairList.add(new KeyValuePair(5, KV_INTERFACE, null, "# ", null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsPing { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsPing extends Input implements Serializable
+{
+	private static final long serialVersionUID = 7058271274334999341L;
+	
+	private static final String DEFINITION_TEXT = "# Ping given url(s) and return statistics";
+	private static final String SIMPLE_NAME = "inputs.ping";
+	private static final String FULL_NAME = "[[inputs.ping]]";
+	private static final String KV_URLS = "urls";
+	private static final String KV_COUNT = "count";
+	private static final String KV_PING_INTERVAL = "ping_interval";
+	private static final String KV_TIMEOUT = "timeout";
+	private static final String KV_DEADLINE = "deadline";
+	private static final String KV_INTERFACE = "interface";
+	private static final String KV_BINARY = "binary";
+	private static final String KV_ARGUMENTS = "arguments";
+  
+
+	public InputsPing() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsPing(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## List of urls to ping"));
+		keyValuePairList.add(new KeyValuePair(1, KV_URLS, null, "# ", "# required", list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Number of pings to send per collection (ping -c <COUNT>)"));
+		keyValuePairList.add(new KeyValuePair(2, KV_COUNT, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Interval, in s, at which to ping. 0 == default (ping -i <PING_INTERVAL>)"));
+		list.add(new Comment(3, "## Not available in Windows."));
+		keyValuePairList.add(new KeyValuePair(3, KV_PING_INTERVAL, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Per-ping timeout, in s. 0 == no timeout (ping -W <TIMEOUT>)"));
+		keyValuePairList.add(new KeyValuePair(4, KV_TIMEOUT, null, "# ", null, list));
+		
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Total-ping deadline, in s. 0 == no deadline (ping -w <DEADLINE>)"));
+		keyValuePairList.add(new KeyValuePair(5, KV_DEADLINE, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Interface or source address to send ping from (ping -I <INTERFACE/SRC_ADDR>)"));
+		list.add(new Comment(3, "## on Darwin and Freebsd only source address possible: (ping -S <SRC_ADDR>)"));
+		keyValuePairList.add(new KeyValuePair(6, KV_INTERFACE, null, "# ", null, list));
+		
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Specify the ping executable binary, default is \"ping\""));
+		keyValuePairList.add(new KeyValuePair(7, KV_BINARY, null, "# ", null, list));
+		
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Arguments for ping command"));
+		list.add(new Comment(3, "## when arguments is not empty, other options (ping_interval, timeout, etc) will be ignored"));
+		keyValuePairList.add(new KeyValuePair(8, KV_ARGUMENTS, null, "# ", null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsPing { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsPostgreSQL.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsPostgreSQL.java
index 6f0e1cd62c3aab3b7c8fca49083857d812dc5a36..f33a085b423667c3ccd90e544eb5c6a1d298ee68 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsPostgreSQL.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsPostgreSQL.java
@@ -1,86 +1,86 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsPostgreSQL extends Input implements Serializable
-{
-	private static final long serialVersionUID = -7529000490719791801L;
-	
-	private static final String DEFINITION_TEXT = "# Read metrics from one or many postgresql servers";
-	private static final String SIMPLE_NAME = "inputs.postgresql";
-	private static final String FULL_NAME = "[[inputs.postgresql]]";
-	private static final String KV_ADDRESS = "address";
-	private static final String KV_IGNORED_DATABASES = "ignored_databases";
-	private static final String KV_DATABASES = "databases";
-  
-
-	public InputsPostgreSQL() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-
-	public InputsPostgreSQL(String definitionText, String simpleName, String fullName, String namePreComment, List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## specify address via a url matching:"));
-		list.add(new Comment(2, "##   postgres://[pqgotest[:password]]@localhost[/dbname]\\"));
-		list.add(new Comment(3, "##       ?sslmode=[disable|verify-ca|verify-full]"));
-		list.add(new Comment(4, "## or a simple string:"));
-		list.add(new Comment(5, "##   host=localhost user=pqotest password=... sslmode=... dbname=app_production"));
-		list.add(new Comment(6, "##"));
-		list.add(new Comment(7, "## All connection parameters are optional."));
-		list.add(new Comment(8, "##"));
-		list.add(new Comment(9, "## Without the dbname parameter, the driver will default to a database"));
-		list.add(new Comment(10, "## with the same name as the user. This dbname is just for instantiating a"));
-		list.add(new Comment(11, "## connection with the server and doesn't restrict the databases we are trying"));
-		list.add(new Comment(12, "## to grab metrics for."));
-		list.add(new Comment(13, "##"));
-		keyValuePairList.add(new KeyValuePair(1, KV_ADDRESS, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## A  list of databases to explicitly ignore. If not specified, metrics for all"));
-		list.add(new Comment(3, "## databases are gathered. Do NOT use with the 'databases' option."));
-		keyValuePairList.add(new KeyValuePair(2, KV_IGNORED_DATABASES, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## A list of databases to pull metrics about. If not specified, metrics for all"));
-		list.add(new Comment(3, "## databases are gathered. Do NOT use with the 'ignored_databases' option."));
-		keyValuePairList.add(new KeyValuePair(3, KV_DATABASES, null, "# ", null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsPostgreSQL { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsPostgreSQL extends Input implements Serializable
+{
+	private static final long serialVersionUID = -7529000490719791801L;
+	
+	private static final String DEFINITION_TEXT = "# Read metrics from one or many postgresql servers";
+	private static final String SIMPLE_NAME = "inputs.postgresql";
+	private static final String FULL_NAME = "[[inputs.postgresql]]";
+	private static final String KV_ADDRESS = "address";
+	private static final String KV_IGNORED_DATABASES = "ignored_databases";
+	private static final String KV_DATABASES = "databases";
+  
+
+	public InputsPostgreSQL() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+
+	public InputsPostgreSQL(String definitionText, String simpleName, String fullName, String namePreComment, List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## specify address via a url matching:"));
+		list.add(new Comment(2, "##   postgres://[pqgotest[:password]]@localhost[/dbname]\\"));
+		list.add(new Comment(3, "##       ?sslmode=[disable|verify-ca|verify-full]"));
+		list.add(new Comment(4, "## or a simple string:"));
+		list.add(new Comment(5, "##   host=localhost user=pqotest password=... sslmode=... dbname=app_production"));
+		list.add(new Comment(6, "##"));
+		list.add(new Comment(7, "## All connection parameters are optional."));
+		list.add(new Comment(8, "##"));
+		list.add(new Comment(9, "## Without the dbname parameter, the driver will default to a database"));
+		list.add(new Comment(10, "## with the same name as the user. This dbname is just for instantiating a"));
+		list.add(new Comment(11, "## connection with the server and doesn't restrict the databases we are trying"));
+		list.add(new Comment(12, "## to grab metrics for."));
+		list.add(new Comment(13, "##"));
+		keyValuePairList.add(new KeyValuePair(1, KV_ADDRESS, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## A  list of databases to explicitly ignore. If not specified, metrics for all"));
+		list.add(new Comment(3, "## databases are gathered. Do NOT use with the 'databases' option."));
+		keyValuePairList.add(new KeyValuePair(2, KV_IGNORED_DATABASES, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## A list of databases to pull metrics about. If not specified, metrics for all"));
+		list.add(new Comment(3, "## databases are gathered. Do NOT use with the 'ignored_databases' option."));
+		keyValuePairList.add(new KeyValuePair(3, KV_DATABASES, null, "# ", null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsPostgreSQL { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsPostgreSQLExtensible.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsPostgreSQLExtensible.java
index 5a5aadfae4771472463c39e7caf0a71dd4f3c94e..2bb6c2ad760564bf4391fc9fe0579bcaeb61b11d 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsPostgreSQLExtensible.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsPostgreSQLExtensible.java
@@ -1,135 +1,135 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsPostgreSQLExtensible extends Input implements Serializable
-{
-	private static final long serialVersionUID = 8973969591035283726L;
-	
-	private static final String DEFINITION_TEXT = "# Read metrics from one or many postgresql servers";
-	private static final String SIMPLE_NAME = "inputs.postgresql_extensible";
-	private static final String FULL_NAME = "[[inputs.postgresql_extensible]]";
-	private static final String KV_ADDRESS = "address";
-	private static final String KV_DATABASES = "databases";
-	private static final String KV_OUTPUTADDRESS = "outputaddress";
-	private static final String KV_SQLQUERY = "sqlquery";
-	private static final String KV_VERSION = "version";
-	private static final String KV_WITHDBNAME = "withdbname";
-	private static final String KV_TAGVALUE = "tagvalue";
-	private static final String KV_MEASUREMENT = "measurement";
-	private static final String ST_QUERY_01 = "[[inputs.postgresql_extensible.query]](1)";
-	private static final String ST_QUERY_02 = "[[inputs.postgresql_extensible.query]](2)";
-	private static final String ST_QUERY_FULL = "[[inputs.postgresql_extensible.query]]";
-  
-
-	public InputsPostgreSQLExtensible() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsPostgreSQLExtensible(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-	
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		List<Comment> subtableCommentList = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## specify address via a url matching:"));
-		list.add(new Comment(2, "##   postgres://[pqgotest[:password]]@localhost[/dbname]\\"));
-		list.add(new Comment(3, "##       ?sslmode=[disable|verify-ca|verify-full]"));
-		list.add(new Comment(4, "## or a simple string:"));
-		list.add(new Comment(5, "##   host=localhost user=pqotest password=... sslmode=... dbname=app_production"));
-		list.add(new Comment(6, "#"));
-		list.add(new Comment(7, "## All connection parameters are optional.  #"));
-		list.add(new Comment(8, "## Without the dbname parameter, the driver will default to a database"));
-		list.add(new Comment(9, "## with the same name as the user. This dbname is just for instantiating a"));
-		list.add(new Comment(10, "## connection with the server and doesn't restrict the databases we are trying"));
-		list.add(new Comment(11, "## to grab metrics for."));
-		list.add(new Comment(12, "#"));
-		keyValuePairList.add(new KeyValuePair(1, KV_ADDRESS, null, null, null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## A list of databases to pull metrics about. If not specified, metrics for all"));
-		list.add(new Comment(2, "## databases are gathered."));
-		keyValuePairList.add(new KeyValuePair(2, KV_DATABASES, null, "# ", null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "#"));
-		keyValuePairList.add(new KeyValuePair(3, KV_OUTPUTADDRESS, null, "# ", null, list));
-    
-		subtableCommentList.add(new Comment(1, "## A custom name for the database that will be used as the \"server\" tag in the"));
-		subtableCommentList.add(new Comment(2, "## measurement output. If not specified, a default one generated from"));
-		subtableCommentList.add(new Comment(3, "## the connection address is used."));
-		subtableCommentList.add(new Comment(4, "#"));
-		subtableCommentList.add(new Comment(5, "## Define the toml config where the sql queries are stored"));
-		subtableCommentList.add(new Comment(6, "## New queries can be added, if the withdbname is set to true and there is no"));
-		subtableCommentList.add(new Comment(7, "## databases defined in the 'databases field', the sql query is ended by a"));
-		subtableCommentList.add(new Comment(8, "## 'is not null' in order to make the query succeed."));
-		subtableCommentList.add(new Comment(9, "## Example :"));
-		subtableCommentList.add(new Comment(10, "## The sqlquery : \"SELECT * FROM pg_stat_database where datname\" become"));
-		subtableCommentList.add(new Comment(11, "## \"SELECT * FROM pg_stat_database where datname IN ('postgres', 'pgbench')\""));
-		subtableCommentList.add(new Comment(12, "## because the databases variable was set to ['postgres', 'pgbench' ] and the"));
-		subtableCommentList.add(new Comment(13, "## withdbname was true. Be careful that if the withdbname is set to false you"));
-		subtableCommentList.add(new Comment(14, "## don't have to define the where clause (aka with the dbname) the tagvalue"));
-		subtableCommentList.add(new Comment(15, "## field is used to define custom tags (separated by commas)"));
-		subtableCommentList.add(new Comment(16, "## The optional \"measurement\" value can be used to override the default"));
-		subtableCommentList.add(new Comment(17, "## output measurement name (\"postgresql\")."));
-		subtableCommentList.add(new Comment(18, "#"));
-		subtableCommentList.add(new Comment(19, "## Structure :"));
-		subtableCommentList.add(new Comment(20, "## [[inputs.postgresql_extensible.query]]"));
-		subtableCommentList.add(new Comment(21, "##   sqlquery string"));
-		subtableCommentList.add(new Comment(22, "##   version string"));
-		subtableCommentList.add(new Comment(23, "##   withdbname boolean"));
-		subtableCommentList.add(new Comment(24, "##   tagvalue string (comma separated)"));
-		subtableCommentList.add(new Comment(25, "##   measurement string"));
-		keyValuePairList.add(new KeyValuePair(4, KV_SQLQUERY, null, null, null, null, ST_QUERY_01, ST_QUERY_FULL, subtableCommentList, null));
-		    
-		keyValuePairList.add(new KeyValuePair(5, KV_VERSION, null, null, null, null, ST_QUERY_01, ST_QUERY_FULL, null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(6, KV_WITHDBNAME, null, null, null, null, ST_QUERY_01, ST_QUERY_FULL, null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(7, KV_TAGVALUE, null, null, null, null, ST_QUERY_01, ST_QUERY_FULL, null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(8, KV_MEASUREMENT, null, null, null, null, ST_QUERY_01, ST_QUERY_FULL, null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(9, KV_SQLQUERY, null, null, null, null, ST_QUERY_02, ST_QUERY_FULL, null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(10, KV_VERSION, null, null, null, null, ST_QUERY_02, ST_QUERY_FULL, null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(11, KV_WITHDBNAME, null, null, null, null, ST_QUERY_02, ST_QUERY_FULL, null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(12, KV_TAGVALUE, null, null, null, null, ST_QUERY_02, ST_QUERY_FULL, null, null));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsPostgreSQLExtensible { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsPostgreSQLExtensible extends Input implements Serializable
+{
+	private static final long serialVersionUID = 8973969591035283726L;
+	
+	private static final String DEFINITION_TEXT = "# Read metrics from one or many postgresql servers";
+	private static final String SIMPLE_NAME = "inputs.postgresql_extensible";
+	private static final String FULL_NAME = "[[inputs.postgresql_extensible]]";
+	private static final String KV_ADDRESS = "address";
+	private static final String KV_DATABASES = "databases";
+	private static final String KV_OUTPUTADDRESS = "outputaddress";
+	private static final String KV_SQLQUERY = "sqlquery";
+	private static final String KV_VERSION = "version";
+	private static final String KV_WITHDBNAME = "withdbname";
+	private static final String KV_TAGVALUE = "tagvalue";
+	private static final String KV_MEASUREMENT = "measurement";
+	private static final String ST_QUERY_01 = "[[inputs.postgresql_extensible.query]](1)";
+	private static final String ST_QUERY_02 = "[[inputs.postgresql_extensible.query]](2)";
+	private static final String ST_QUERY_FULL = "[[inputs.postgresql_extensible.query]]";
+  
+
+	public InputsPostgreSQLExtensible() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsPostgreSQLExtensible(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+	
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		List<Comment> subtableCommentList = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## specify address via a url matching:"));
+		list.add(new Comment(2, "##   postgres://[pqgotest[:password]]@localhost[/dbname]\\"));
+		list.add(new Comment(3, "##       ?sslmode=[disable|verify-ca|verify-full]"));
+		list.add(new Comment(4, "## or a simple string:"));
+		list.add(new Comment(5, "##   host=localhost user=pqotest password=... sslmode=... dbname=app_production"));
+		list.add(new Comment(6, "#"));
+		list.add(new Comment(7, "## All connection parameters are optional.  #"));
+		list.add(new Comment(8, "## Without the dbname parameter, the driver will default to a database"));
+		list.add(new Comment(9, "## with the same name as the user. This dbname is just for instantiating a"));
+		list.add(new Comment(10, "## connection with the server and doesn't restrict the databases we are trying"));
+		list.add(new Comment(11, "## to grab metrics for."));
+		list.add(new Comment(12, "#"));
+		keyValuePairList.add(new KeyValuePair(1, KV_ADDRESS, null, null, null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## A list of databases to pull metrics about. If not specified, metrics for all"));
+		list.add(new Comment(2, "## databases are gathered."));
+		keyValuePairList.add(new KeyValuePair(2, KV_DATABASES, null, "# ", null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "#"));
+		keyValuePairList.add(new KeyValuePair(3, KV_OUTPUTADDRESS, null, "# ", null, list));
+    
+		subtableCommentList.add(new Comment(1, "## A custom name for the database that will be used as the \"server\" tag in the"));
+		subtableCommentList.add(new Comment(2, "## measurement output. If not specified, a default one generated from"));
+		subtableCommentList.add(new Comment(3, "## the connection address is used."));
+		subtableCommentList.add(new Comment(4, "#"));
+		subtableCommentList.add(new Comment(5, "## Define the toml config where the sql queries are stored"));
+		subtableCommentList.add(new Comment(6, "## New queries can be added, if the withdbname is set to true and there is no"));
+		subtableCommentList.add(new Comment(7, "## databases defined in the 'databases field', the sql query is ended by a"));
+		subtableCommentList.add(new Comment(8, "## 'is not null' in order to make the query succeed."));
+		subtableCommentList.add(new Comment(9, "## Example :"));
+		subtableCommentList.add(new Comment(10, "## The sqlquery : \"SELECT * FROM pg_stat_database where datname\" become"));
+		subtableCommentList.add(new Comment(11, "## \"SELECT * FROM pg_stat_database where datname IN ('postgres', 'pgbench')\""));
+		subtableCommentList.add(new Comment(12, "## because the databases variable was set to ['postgres', 'pgbench' ] and the"));
+		subtableCommentList.add(new Comment(13, "## withdbname was true. Be careful that if the withdbname is set to false you"));
+		subtableCommentList.add(new Comment(14, "## don't have to define the where clause (aka with the dbname) the tagvalue"));
+		subtableCommentList.add(new Comment(15, "## field is used to define custom tags (separated by commas)"));
+		subtableCommentList.add(new Comment(16, "## The optional \"measurement\" value can be used to override the default"));
+		subtableCommentList.add(new Comment(17, "## output measurement name (\"postgresql\")."));
+		subtableCommentList.add(new Comment(18, "#"));
+		subtableCommentList.add(new Comment(19, "## Structure :"));
+		subtableCommentList.add(new Comment(20, "## [[inputs.postgresql_extensible.query]]"));
+		subtableCommentList.add(new Comment(21, "##   sqlquery string"));
+		subtableCommentList.add(new Comment(22, "##   version string"));
+		subtableCommentList.add(new Comment(23, "##   withdbname boolean"));
+		subtableCommentList.add(new Comment(24, "##   tagvalue string (comma separated)"));
+		subtableCommentList.add(new Comment(25, "##   measurement string"));
+		keyValuePairList.add(new KeyValuePair(4, KV_SQLQUERY, null, null, null, null, ST_QUERY_01, ST_QUERY_FULL, subtableCommentList, null));
+		    
+		keyValuePairList.add(new KeyValuePair(5, KV_VERSION, null, null, null, null, ST_QUERY_01, ST_QUERY_FULL, null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(6, KV_WITHDBNAME, null, null, null, null, ST_QUERY_01, ST_QUERY_FULL, null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(7, KV_TAGVALUE, null, null, null, null, ST_QUERY_01, ST_QUERY_FULL, null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(8, KV_MEASUREMENT, null, null, null, null, ST_QUERY_01, ST_QUERY_FULL, null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(9, KV_SQLQUERY, null, null, null, null, ST_QUERY_02, ST_QUERY_FULL, null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(10, KV_VERSION, null, null, null, null, ST_QUERY_02, ST_QUERY_FULL, null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(11, KV_WITHDBNAME, null, null, null, null, ST_QUERY_02, ST_QUERY_FULL, null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(12, KV_TAGVALUE, null, null, null, null, ST_QUERY_02, ST_QUERY_FULL, null, null));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsPostgreSQLExtensible { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsPowerDNS.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsPowerDNS.java
index 307f2f27e946c3016c5699ef87d32d081c75e86f..87b52f9fbcc2aa3601ffff5d3f4d8f28ef458251 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsPowerDNS.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsPowerDNS.java
@@ -1,62 +1,62 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsPowerDNS extends Input implements Serializable
-{
-	private static final long serialVersionUID = -819333475830085391L;
-	
-	private static final String DEFINITION_TEXT = "# Read metrics from one or many PowerDNS servers";
-	private static final String SIMPLE_NAME = "inputs.powerdns";
-	private static final String FULL_NAME = "[[inputs.powerdns]]";
-	private static final String KV_UNIX_SOCKETS = "unix_sockets";
-  
-
-	public InputsPowerDNS() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsPowerDNS(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## An array of sockets to gather stats about."));
-		list.add(new Comment(2, "## Specify a path to unix socket."));
-		keyValuePairList.add(new KeyValuePair(1, KV_UNIX_SOCKETS, null, null, null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsPowerDNS { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsPowerDNS extends Input implements Serializable
+{
+	private static final long serialVersionUID = -819333475830085391L;
+	
+	private static final String DEFINITION_TEXT = "# Read metrics from one or many PowerDNS servers";
+	private static final String SIMPLE_NAME = "inputs.powerdns";
+	private static final String FULL_NAME = "[[inputs.powerdns]]";
+	private static final String KV_UNIX_SOCKETS = "unix_sockets";
+  
+
+	public InputsPowerDNS() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsPowerDNS(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## An array of sockets to gather stats about."));
+		list.add(new Comment(2, "## Specify a path to unix socket."));
+		keyValuePairList.add(new KeyValuePair(1, KV_UNIX_SOCKETS, null, null, null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsPowerDNS { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsProcStat.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsProcStat.java
index e89e8307d12b39d67e4b760f39079f6278dd8448..5ad923f07f62ddae55ca0af2045e1986387959bd 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsProcStat.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsProcStat.java
@@ -1,99 +1,99 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsProcStat extends Input implements Serializable
-{
-	private static final long serialVersionUID = -1088459668468513664L;
-	
-	private static final String DEFINITION_TEXT = "# Monitor process cpu and memory usage";
-	private static final String SIMPLE_NAME = "inputs.procstat";
-	private static final String FULL_NAME = "[[inputs.procstat]]";
-	private static final String KV_PID_FILE = "pid_file";
-	private static final String KV_EXE = "exe";
-	private static final String KV_PATTERN = "pattern";
-	private static final String KV_USER = "user";
-	private static final String KV_PROCESS_NAME = "process_name";
-	private static final String KV_PREFIX = "prefix";
-	private static final String KV_FIELDDROP = "fielddrop";
-	private static final String KV_PID_TAG = "pid_tag";
-  
-
-	public InputsProcStat() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsProcStat(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-	
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## Must specify one of: pid_file, exe, or pattern"));
-		list.add(new Comment(2, "## PID file to monitor process"));
-		keyValuePairList.add(new KeyValuePair(1, KV_PID_FILE, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## executable name (ie, pgrep <exe>)"));
-		keyValuePairList.add(new KeyValuePair(2, KV_EXE, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## pattern as argument for pgrep (ie, pgrep -f <pattern>)"));
-		keyValuePairList.add(new KeyValuePair(3, KV_PATTERN, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## user as argument for pgrep (ie, pgrep -u <user>)"));
-		keyValuePairList.add(new KeyValuePair(4, KV_USER, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## override for process_name"));
-		list.add(new Comment(3, "## This is optional; default is sourced from /proc/<pid>/status"));
-		keyValuePairList.add(new KeyValuePair(5, KV_PROCESS_NAME, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Field name prefix"));
-		keyValuePairList.add(new KeyValuePair(6, KV_PREFIX, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## comment this out if you want raw cpu_time stats"));
-		keyValuePairList.add(new KeyValuePair(7, KV_FIELDDROP, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## This is optional; moves pid into a tag instead of a field"));
-		keyValuePairList.add(new KeyValuePair(8, KV_PID_TAG, null, null, null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsProcStat { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsProcStat extends Input implements Serializable
+{
+	private static final long serialVersionUID = -1088459668468513664L;
+	
+	private static final String DEFINITION_TEXT = "# Monitor process cpu and memory usage";
+	private static final String SIMPLE_NAME = "inputs.procstat";
+	private static final String FULL_NAME = "[[inputs.procstat]]";
+	private static final String KV_PID_FILE = "pid_file";
+	private static final String KV_EXE = "exe";
+	private static final String KV_PATTERN = "pattern";
+	private static final String KV_USER = "user";
+	private static final String KV_PROCESS_NAME = "process_name";
+	private static final String KV_PREFIX = "prefix";
+	private static final String KV_FIELDDROP = "fielddrop";
+	private static final String KV_PID_TAG = "pid_tag";
+  
+
+	public InputsProcStat() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsProcStat(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+	
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## Must specify one of: pid_file, exe, or pattern"));
+		list.add(new Comment(2, "## PID file to monitor process"));
+		keyValuePairList.add(new KeyValuePair(1, KV_PID_FILE, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## executable name (ie, pgrep <exe>)"));
+		keyValuePairList.add(new KeyValuePair(2, KV_EXE, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## pattern as argument for pgrep (ie, pgrep -f <pattern>)"));
+		keyValuePairList.add(new KeyValuePair(3, KV_PATTERN, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## user as argument for pgrep (ie, pgrep -u <user>)"));
+		keyValuePairList.add(new KeyValuePair(4, KV_USER, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## override for process_name"));
+		list.add(new Comment(3, "## This is optional; default is sourced from /proc/<pid>/status"));
+		keyValuePairList.add(new KeyValuePair(5, KV_PROCESS_NAME, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Field name prefix"));
+		keyValuePairList.add(new KeyValuePair(6, KV_PREFIX, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## comment this out if you want raw cpu_time stats"));
+		keyValuePairList.add(new KeyValuePair(7, KV_FIELDDROP, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## This is optional; moves pid into a tag instead of a field"));
+		keyValuePairList.add(new KeyValuePair(8, KV_PID_TAG, null, null, null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsProcStat { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsProcesses.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsProcesses.java
index e86b264550a4ce5db457d22e51f1ec2998be29c4..5736ec2e4301dbd09e7da15f184e2091c1a787f0 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsProcesses.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsProcesses.java
@@ -1,58 +1,58 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsProcesses extends Input implements Serializable
-{
-	private static final long serialVersionUID = 2898201845285451605L;
-	
-	private static final String DEFINITION_TEXT = "# Get the number of processes and group them by status";
-	private static final String SIMPLE_NAME = "inputs.processes";
-	private static final String FULL_NAME = "[[inputs.processes]]";
-  
-
-	public InputsProcesses() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsProcesses(String definitionText, String simpleName, String fullName, String namePreComment, List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "# no configuration"));
-		keyValuePairList.add(new KeyValuePair(1, null, null, null, null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsProcesses { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsProcesses extends Input implements Serializable
+{
+	private static final long serialVersionUID = 2898201845285451605L;
+	
+	private static final String DEFINITION_TEXT = "# Get the number of processes and group them by status";
+	private static final String SIMPLE_NAME = "inputs.processes";
+	private static final String FULL_NAME = "[[inputs.processes]]";
+  
+
+	public InputsProcesses() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsProcesses(String definitionText, String simpleName, String fullName, String namePreComment, List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "# no configuration"));
+		keyValuePairList.add(new KeyValuePair(1, null, null, null, null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsProcesses { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsPrometheus.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsPrometheus.java
index 8e164abaa705023745b631e6ba16248eab8fe3fd..0ace4894d9002488385a3a6fce98d25c41dd97f3 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsPrometheus.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsPrometheus.java
@@ -1,90 +1,90 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsPrometheus extends Input implements Serializable
-{
-	private static final long serialVersionUID = 3241124840152048199L;
-	
-	private static final String DEFINITION_TEXT = "# Read metrics from one or many prometheus clients";
-	private static final String SIMPLE_NAME = "inputs.prometheus";
-	private static final String FULL_NAME = "[[inputs.prometheus]]";
-	private static final String KV_URLS = "urls";
-	private static final String KV_BEARER_TOKEN = "bearer_token";
-	private static final String KV_RESPONSE_TIMEOUT = "response_timeout";
-	private static final String KV_SSL_CA = "ssl_ca";
-	private static final String KV_SSL_CERT = "ssl_cert";
-	private static final String KV_SSL_KEY = "ssl_key";
-	private static final String KV_INSECURE_SKIP_VERIFY = "insecure_skip_verify";
-  
-
-	public InputsPrometheus() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsPrometheus(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## An array of urls to scrape metrics from."));
-		keyValuePairList.add(new KeyValuePair(1, KV_URLS, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Use bearer token for authorization"));
-		keyValuePairList.add(new KeyValuePair(2, KV_BEARER_TOKEN, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Specify timeout duration for slower prometheus clients (default is 3s)"));
-		keyValuePairList.add(new KeyValuePair(3, KV_RESPONSE_TIMEOUT, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Optional SSL Config"));
-		keyValuePairList.add(new KeyValuePair(4, KV_SSL_CA, null, "# ", null, list));
-		    
-		keyValuePairList.add(new KeyValuePair(5, KV_SSL_CERT, null, "# ", null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(6, KV_SSL_KEY, null, "# ", null, null));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Use SSL but skip chain & host verification"));
-		keyValuePairList.add(new KeyValuePair(7, KV_INSECURE_SKIP_VERIFY, null, "# ", null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsPrometheus { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsPrometheus extends Input implements Serializable
+{
+	private static final long serialVersionUID = 3241124840152048199L;
+	
+	private static final String DEFINITION_TEXT = "# Read metrics from one or many prometheus clients";
+	private static final String SIMPLE_NAME = "inputs.prometheus";
+	private static final String FULL_NAME = "[[inputs.prometheus]]";
+	private static final String KV_URLS = "urls";
+	private static final String KV_BEARER_TOKEN = "bearer_token";
+	private static final String KV_RESPONSE_TIMEOUT = "response_timeout";
+	private static final String KV_SSL_CA = "ssl_ca";
+	private static final String KV_SSL_CERT = "ssl_cert";
+	private static final String KV_SSL_KEY = "ssl_key";
+	private static final String KV_INSECURE_SKIP_VERIFY = "insecure_skip_verify";
+  
+
+	public InputsPrometheus() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsPrometheus(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## An array of urls to scrape metrics from."));
+		keyValuePairList.add(new KeyValuePair(1, KV_URLS, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Use bearer token for authorization"));
+		keyValuePairList.add(new KeyValuePair(2, KV_BEARER_TOKEN, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Specify timeout duration for slower prometheus clients (default is 3s)"));
+		keyValuePairList.add(new KeyValuePair(3, KV_RESPONSE_TIMEOUT, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Optional SSL Config"));
+		keyValuePairList.add(new KeyValuePair(4, KV_SSL_CA, null, "# ", null, list));
+		    
+		keyValuePairList.add(new KeyValuePair(5, KV_SSL_CERT, null, "# ", null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(6, KV_SSL_KEY, null, "# ", null, null));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Use SSL but skip chain & host verification"));
+		keyValuePairList.add(new KeyValuePair(7, KV_INSECURE_SKIP_VERIFY, null, "# ", null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsPrometheus { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsPuppetAgent.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsPuppetAgent.java
index 8df68529a439a865a319cca60b891932438c80bf..be1795c43f0e9d4b4478deb5a3ecb3679b1f9ba8 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsPuppetAgent.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsPuppetAgent.java
@@ -1,61 +1,61 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsPuppetAgent extends Input implements Serializable
-{
-	private static final long serialVersionUID = -8095565622540375620L;
-	
-	private static final String DEFINITION_TEXT = "# Reads last_run_summary.yaml file and converts to measurments";
-	private static final String SIMPLE_NAME = "inputs.puppetagent";
-	private static final String FULL_NAME = "[[inputs.puppetagent]]";
-	private static final String KV_LOCATION = "location";
-  
-
-	public InputsPuppetAgent() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsPuppetAgent(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-	initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "## Location of puppet last run summary file"));
-		keyValuePairList.add(new KeyValuePair(1, KV_LOCATION, null, null, null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsPuppetAgent { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsPuppetAgent extends Input implements Serializable
+{
+	private static final long serialVersionUID = -8095565622540375620L;
+	
+	private static final String DEFINITION_TEXT = "# Reads last_run_summary.yaml file and converts to measurments";
+	private static final String SIMPLE_NAME = "inputs.puppetagent";
+	private static final String FULL_NAME = "[[inputs.puppetagent]]";
+	private static final String KV_LOCATION = "location";
+  
+
+	public InputsPuppetAgent() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsPuppetAgent(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+	initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "## Location of puppet last run summary file"));
+		keyValuePairList.add(new KeyValuePair(1, KV_LOCATION, null, null, null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsPuppetAgent { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsRabbitMQ.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsRabbitMQ.java
index 4113fb8e9d9a49082b8b8083a525ebad1e1b698f..db15dcfd6f0936670db6e663b680f7c46938eb79 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsRabbitMQ.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsRabbitMQ.java
@@ -1,109 +1,109 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsRabbitMQ extends Input implements Serializable
-{
-	private static final long serialVersionUID = -3167341729793436462L;
-	
-	private static final String DEFINITION_TEXT = "# Read metrics from one or many RabbitMQ servers via the management API";
-	private static final String SIMPLE_NAME = "inputs.rabbitmq";
-	private static final String FULL_NAME = "[[inputs.rabbitmq]]";
-	private static final String KV_URL = "url";
-	private static final String KV_NAME = "name";
-	private static final String KV_USERNAME = "username";
-	private static final String KV_PASSWORD = "password";
-	private static final String KV_SSL_CA = "ssl_ca";
-	private static final String KV_SSL_CERT = "ssl_cert";
-	private static final String KV_SSL_KEY = "ssl_key";
-	private static final String KV_INSECURE_SKIP_VERIFY = "insecure_skip_verify";
-	private static final String KV_HEADER_TIMEOUT = "header_timeout";
-	private static final String KV_CLIENT_TIMEOUT = "client_timeout";
-	private static final String KV_NODES = "nodes";
-  
-
-	public InputsRabbitMQ() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsRabbitMQ(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		keyValuePairList.add(new KeyValuePair(1, KV_URL, null, "# ", null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(2, KV_NAME, null, "# ", null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(3, KV_USERNAME, null, "# ", null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(4, KV_PASSWORD, null, "# ", null, null));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Optional SSL Config"));
-		keyValuePairList.add(new KeyValuePair(5, KV_SSL_CA, null, "# ", null, list));
-		    
-		keyValuePairList.add(new KeyValuePair(6, KV_SSL_CERT, null, "# ", null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(7, KV_SSL_KEY, null, "# ", null, null));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Use SSL but skip chain & host verification"));
-		keyValuePairList.add(new KeyValuePair(8, KV_INSECURE_SKIP_VERIFY, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Optional request timeouts"));
-		list.add(new Comment(3, "##"));
-		list.add(new Comment(4, "## ResponseHeaderTimeout, if non-zero, specifies the amount of time to wait"));
-		list.add(new Comment(5, "## for a server's response headers after fully writing the request."));
-		keyValuePairList.add(new KeyValuePair(9, KV_HEADER_TIMEOUT, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "##"));
-		list.add(new Comment(2, "## client_timeout specifies a time limit for requests made by this client."));
-		list.add(new Comment(3, "## Includes connection time, any redirects, and reading the response body."));
-		keyValuePairList.add(new KeyValuePair(10, KV_CLIENT_TIMEOUT, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## A list of nodes to pull metrics about. If not specified, metrics for"));
-		list.add(new Comment(3, "## all nodes are gathered."));
-		keyValuePairList.add(new KeyValuePair(1, KV_NODES, null, "# ", null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsRabbitMQ { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsRabbitMQ extends Input implements Serializable
+{
+	private static final long serialVersionUID = -3167341729793436462L;
+	
+	private static final String DEFINITION_TEXT = "# Read metrics from one or many RabbitMQ servers via the management API";
+	private static final String SIMPLE_NAME = "inputs.rabbitmq";
+	private static final String FULL_NAME = "[[inputs.rabbitmq]]";
+	private static final String KV_URL = "url";
+	private static final String KV_NAME = "name";
+	private static final String KV_USERNAME = "username";
+	private static final String KV_PASSWORD = "password";
+	private static final String KV_SSL_CA = "ssl_ca";
+	private static final String KV_SSL_CERT = "ssl_cert";
+	private static final String KV_SSL_KEY = "ssl_key";
+	private static final String KV_INSECURE_SKIP_VERIFY = "insecure_skip_verify";
+	private static final String KV_HEADER_TIMEOUT = "header_timeout";
+	private static final String KV_CLIENT_TIMEOUT = "client_timeout";
+	private static final String KV_NODES = "nodes";
+  
+
+	public InputsRabbitMQ() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsRabbitMQ(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		keyValuePairList.add(new KeyValuePair(1, KV_URL, null, "# ", null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(2, KV_NAME, null, "# ", null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(3, KV_USERNAME, null, "# ", null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(4, KV_PASSWORD, null, "# ", null, null));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Optional SSL Config"));
+		keyValuePairList.add(new KeyValuePair(5, KV_SSL_CA, null, "# ", null, list));
+		    
+		keyValuePairList.add(new KeyValuePair(6, KV_SSL_CERT, null, "# ", null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(7, KV_SSL_KEY, null, "# ", null, null));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Use SSL but skip chain & host verification"));
+		keyValuePairList.add(new KeyValuePair(8, KV_INSECURE_SKIP_VERIFY, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Optional request timeouts"));
+		list.add(new Comment(3, "##"));
+		list.add(new Comment(4, "## ResponseHeaderTimeout, if non-zero, specifies the amount of time to wait"));
+		list.add(new Comment(5, "## for a server's response headers after fully writing the request."));
+		keyValuePairList.add(new KeyValuePair(9, KV_HEADER_TIMEOUT, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "##"));
+		list.add(new Comment(2, "## client_timeout specifies a time limit for requests made by this client."));
+		list.add(new Comment(3, "## Includes connection time, any redirects, and reading the response body."));
+		keyValuePairList.add(new KeyValuePair(10, KV_CLIENT_TIMEOUT, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## A list of nodes to pull metrics about. If not specified, metrics for"));
+		list.add(new Comment(3, "## all nodes are gathered."));
+		keyValuePairList.add(new KeyValuePair(1, KV_NODES, null, "# ", null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsRabbitMQ { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsRaindrops.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsRaindrops.java
index 3109cfa630fae745ef5c68dfbbd511a3a1307a64..e0d239ca6202b379950bd5fb68e60068f8a3f2b1 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsRaindrops.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsRaindrops.java
@@ -1,61 +1,61 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsRaindrops extends Input implements Serializable
-{
-	private static final long serialVersionUID = 247556322791877155L;
-	
-	private static final String DEFINITION_TEXT = "# Read raindrops stats (raindrops - real-time stats for preforking Rack servers)";
-	private static final String SIMPLE_NAME = "inputs.raindrops";
-	private static final String FULL_NAME = "[[inputs.raindrops]]";
-	private static final String KV_URLS = "urls";
-  
-
-	public InputsRaindrops() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsRaindrops(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "## An array of raindrops middleware URI to gather stats."));
-		keyValuePairList.add(new KeyValuePair(1, KV_URLS, null, null, null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsRaindrops { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsRaindrops extends Input implements Serializable
+{
+	private static final long serialVersionUID = 247556322791877155L;
+	
+	private static final String DEFINITION_TEXT = "# Read raindrops stats (raindrops - real-time stats for preforking Rack servers)";
+	private static final String SIMPLE_NAME = "inputs.raindrops";
+	private static final String FULL_NAME = "[[inputs.raindrops]]";
+	private static final String KV_URLS = "urls";
+  
+
+	public InputsRaindrops() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsRaindrops(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "## An array of raindrops middleware URI to gather stats."));
+		keyValuePairList.add(new KeyValuePair(1, KV_URLS, null, null, null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsRaindrops { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsRedis.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsRedis.java
index 1bdc2a142f53129641dd77aed63afce92955c43b..b4e2a570ec7ecffd044c66b8f66f589f755620bc 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsRedis.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsRedis.java
@@ -1,69 +1,69 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsRedis extends Input implements Serializable
-{
-	private static final long serialVersionUID = -242714460140772609L;
-	
-	private static final String DEFINITION_TEXT = "# Read metrics from one or many redis servers";
-	private static final String SIMPLE_NAME = "inputs.redis";
-	private static final String FULL_NAME = "[[inputs.redis]]";
-	private static final String KV_SERVERS = "servers";
-  
-
-	public InputsRedis() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsRedis(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## specify servers via a url matching:"));
-		list.add(new Comment(2, "##  [protocol://][:password]@address[:port]"));
-		list.add(new Comment(3, "##  e.g."));
-		list.add(new Comment(4, "##    tcp://localhost:6379"));
-		list.add(new Comment(5, "##    tcp://:password@192.168.99.100"));
-		list.add(new Comment(6, "##    unix:///var/run/redis.sock"));
-		list.add(new Comment(7, "##"));
-		list.add(new Comment(8, "## If no servers are specified, then localhost is used as the host."));
-		list.add(new Comment(9, "## If no port is specified, 6379 is used"));
-		keyValuePairList.add(new KeyValuePair(1, KV_SERVERS, null, null, null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsRedis { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsRedis extends Input implements Serializable
+{
+	private static final long serialVersionUID = -242714460140772609L;
+	
+	private static final String DEFINITION_TEXT = "# Read metrics from one or many redis servers";
+	private static final String SIMPLE_NAME = "inputs.redis";
+	private static final String FULL_NAME = "[[inputs.redis]]";
+	private static final String KV_SERVERS = "servers";
+  
+
+	public InputsRedis() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsRedis(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## specify servers via a url matching:"));
+		list.add(new Comment(2, "##  [protocol://][:password]@address[:port]"));
+		list.add(new Comment(3, "##  e.g."));
+		list.add(new Comment(4, "##    tcp://localhost:6379"));
+		list.add(new Comment(5, "##    tcp://:password@192.168.99.100"));
+		list.add(new Comment(6, "##    unix:///var/run/redis.sock"));
+		list.add(new Comment(7, "##"));
+		list.add(new Comment(8, "## If no servers are specified, then localhost is used as the host."));
+		list.add(new Comment(9, "## If no port is specified, 6379 is used"));
+		keyValuePairList.add(new KeyValuePair(1, KV_SERVERS, null, null, null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsRedis { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsRethinkDB.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsRethinkDB.java
index 0170966928f630a94b67a2c6683c43b4bab29084..8a341a38e368766fa8094e4896b64c0585384158 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsRethinkDB.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsRethinkDB.java
@@ -1,65 +1,65 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsRethinkDB extends Input implements Serializable
-{
-	private static final long serialVersionUID = 8568881763871824479L;
-	
-	private static final String DEFINITION_TEXT = "# Read metrics from one or many RethinkDB servers";
-	private static final String SIMPLE_NAME = "inputs.rethinkdb";
-	private static final String FULL_NAME = "[[inputs.rethinkdb]]";
-	private static final String KV_SERVERS = "servers";
-  
-
-	public InputsRethinkDB() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsRethinkDB(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## An array of URI to gather stats about. Specify an ip or hostname"));
-		list.add(new Comment(2, "## with optional port add password. ie,"));
-		list.add(new Comment(3, "##   rethinkdb://user:auth_key@10.10.3.30:28105,"));
-		list.add(new Comment(4, "##   rethinkdb://10.10.3.33:18832,"));
-		list.add(new Comment(5, "##   10.0.0.1:10000, etc."));
-		keyValuePairList.add(new KeyValuePair(1, KV_SERVERS, null, null, null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsRethinkDB { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsRethinkDB extends Input implements Serializable
+{
+	private static final long serialVersionUID = 8568881763871824479L;
+	
+	private static final String DEFINITION_TEXT = "# Read metrics from one or many RethinkDB servers";
+	private static final String SIMPLE_NAME = "inputs.rethinkdb";
+	private static final String FULL_NAME = "[[inputs.rethinkdb]]";
+	private static final String KV_SERVERS = "servers";
+  
+
+	public InputsRethinkDB() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsRethinkDB(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## An array of URI to gather stats about. Specify an ip or hostname"));
+		list.add(new Comment(2, "## with optional port add password. ie,"));
+		list.add(new Comment(3, "##   rethinkdb://user:auth_key@10.10.3.30:28105,"));
+		list.add(new Comment(4, "##   rethinkdb://10.10.3.33:18832,"));
+		list.add(new Comment(5, "##   10.0.0.1:10000, etc."));
+		keyValuePairList.add(new KeyValuePair(1, KV_SERVERS, null, null, null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsRethinkDB { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsRiak.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsRiak.java
index 20698f8849da8e3d809ed66c96c4414f5cf5a8de..5b08b32f11c1f1d6f9b1d4f6ed678f3dce244fad 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsRiak.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsRiak.java
@@ -1,61 +1,61 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsRiak extends Input implements Serializable
-{
-	private static final long serialVersionUID = 6360124863691096837L;
-	
-	private static final String DEFINITION_TEXT = "# Read metrics one or many Riak servers";
-	private static final String SIMPLE_NAME = "inputs.riak";
-	private static final String FULL_NAME = "[[inputs.riak]]";
-	private static final String KV_SERVERS = "servers";
-  
-
-	public InputsRiak() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsRiak(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "# Specify a list of one or more riak http servers"));
-		keyValuePairList.add(new KeyValuePair(1, KV_SERVERS, null, null, null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsRiak { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsRiak extends Input implements Serializable
+{
+	private static final long serialVersionUID = 6360124863691096837L;
+	
+	private static final String DEFINITION_TEXT = "# Read metrics one or many Riak servers";
+	private static final String SIMPLE_NAME = "inputs.riak";
+	private static final String FULL_NAME = "[[inputs.riak]]";
+	private static final String KV_SERVERS = "servers";
+  
+
+	public InputsRiak() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsRiak(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "# Specify a list of one or more riak http servers"));
+		keyValuePairList.add(new KeyValuePair(1, KV_SERVERS, null, null, null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsRiak { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsSNMP.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsSNMP.java
index d59d75e59117dec11956fb70ccbbd4b8743d53b4..a84dfa8117a20ddfb14d14028bdb85e08b34804c 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsSNMP.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsSNMP.java
@@ -1,164 +1,164 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsSNMP extends Input implements Serializable
-{
-	private static final long serialVersionUID = 1457953027356795701L;
-	
-	private static final String DEFINITION_TEXT = "# Retrieves SNMP values from remote agents";
-	private static final String SIMPLE_NAME = "inputs.snmp";
-	private static final String FULL_NAME = "[[inputs.snmp]]";
-	private static final String KV_AGENTS = "agents";
-	private static final String KV_TIMEOUT = "timeout";
-	private static final String KV_RETRIES = "retries";
-	private static final String KV_VERSION = "version";
-	private static final String KV_COMMUNITY = "community";
-	private static final String KV_MAX_REPETITIONS = "max_repetitions";
-	private static final String KV_SEC_NAME = "sec_name";
-	private static final String KV_AUTH_PROTOCOL = "auth_protocol";
-	private static final String KV_AUTH_PASSWORD = "auth_password";
-	private static final String KV_SEC_LEVEL = "sec_level";
-	private static final String KV_CONTEXT_NAME = "context_name";
-	private static final String KV_PRIV_PROTOCOL = "priv_protocol";
-	private static final String KV_PROV_PASSWORD = "priv_password";
-	private static final String KV_NAME = "name";
-	private static final String KV_OID = "oid";
-	private static final String KV_INHERIT_TAGS = "inherit_tags";
-	private static final String KV_IS_TAG = "is_tag";
-	private static final String ST_FIELD_01 = "[[inputs.snmp.field]](1)";
-	private static final String ST_FIELD_02 = "[[inputs.snmp.field]](2)";
-	private static final String ST_FIELD_03 = "[[inputs.snmp.field]](3)";
-	private static final String ST_FIELD_04 = "[[inputs.snmp.field]](4)";
-	private static final String ST_FIELD_FULL = "[[inputs.snmp.field]]";
-	private static final String ST_TABLE_FULL = "[[inputs.snmp.table]]";
-	private static final String ST_TABLE_FIELD_01 = "[[inputs.snmp.table.field]](1)";
-	private static final String ST_TABLE_FIELD_02 = "[[inputs.snmp.table.field]](2)";
-	private static final String ST_TABLE_FIELD_03 = "[[inputs.snmp.table.field]](3)";
-	private static final String ST_TABLE_FIELD_FULL = "[[inputs.snmp.table.field]]";
-  
-
-	public InputsSNMP() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsSNMP(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		keyValuePairList.add(new KeyValuePair(1, KV_AGENTS, null, null, null, null));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Timeout for each SNMP query."));
-		keyValuePairList.add(new KeyValuePair(2, KV_TIMEOUT, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Number of retries to attempt within timeout."));
-		keyValuePairList.add(new KeyValuePair(3, KV_RETRIES, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## SNMP version, values can be 1, 2, or 3"));
-		keyValuePairList.add(new KeyValuePair(4, KV_VERSION, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## SNMP community string."));
-		keyValuePairList.add(new KeyValuePair(5, KV_COMMUNITY, null, null, null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## The GETBULK max-repetitions parameter"));
-		keyValuePairList.add(new KeyValuePair(6, KV_MAX_REPETITIONS, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## SNMPv3 auth parameters"));
-		keyValuePairList.add(new KeyValuePair(7, KV_SEC_NAME, null, "# ", null, list));
-    
-		keyValuePairList.add(new KeyValuePair(8, KV_AUTH_PROTOCOL, null, "# ", "# Values: \"MD5\", \"SHA\", \"\"", null));
-		    
-		keyValuePairList.add(new KeyValuePair(9, KV_AUTH_PASSWORD, null, "# ", null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(10, KV_SEC_LEVEL, null, "# ", "# Values: \"noAuthNoPriv\", \"authNoPriv\", \"authPriv\"", null));
-		    
-		keyValuePairList.add(new KeyValuePair(11, KV_CONTEXT_NAME, null, "# ", null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(12, KV_PRIV_PROTOCOL, null, "# ", "# Values: \"DES\", \"AES\", \"\"", null));
-		    
-		keyValuePairList.add(new KeyValuePair(13, KV_PROV_PASSWORD, null, "# ", null, null));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## measurement name"));
-		keyValuePairList.add(new KeyValuePair(14, KV_NAME, null, null, null, list));
-		    
-		keyValuePairList.add(new KeyValuePair(15, KV_NAME, null, null, null, null, ST_FIELD_01, ST_FIELD_FULL, null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(16, KV_OID, null, null, null, null, ST_FIELD_01, ST_FIELD_FULL, null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(17, KV_NAME, null, null, null, null, ST_FIELD_02, ST_FIELD_FULL, null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(18, KV_OID, null, null, null, null, ST_FIELD_02, ST_FIELD_FULL, null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(19, KV_NAME, null, null, null, null, ST_FIELD_03, ST_FIELD_FULL, null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(20, KV_OID, null, null, null, null, ST_FIELD_03, ST_FIELD_FULL, null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(21, KV_OID, null, null, null, null, ST_FIELD_04, ST_FIELD_FULL, null, null));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## measurement name"));
-		keyValuePairList.add(new KeyValuePair(22, KV_NAME, null, null, null, list, ST_TABLE_FULL, ST_TABLE_FULL, null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(23, KV_INHERIT_TAGS, null, null, null, null, ST_TABLE_FULL, ST_TABLE_FULL, null, null));
-    
-		keyValuePairList.add(new KeyValuePair(24, KV_NAME, null, null, null, null, ST_TABLE_FIELD_01, ST_TABLE_FIELD_FULL, null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(25, KV_OID, null, null, null, null, ST_TABLE_FIELD_01, ST_TABLE_FIELD_FULL, null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(26, KV_IS_TAG, null, null, null, null, ST_TABLE_FIELD_01, ST_TABLE_FIELD_FULL, null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(27, KV_NAME, null, null, null, null, ST_TABLE_FIELD_02, ST_TABLE_FIELD_FULL, null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(28, KV_OID, null, null, null, null, ST_TABLE_FIELD_02, ST_TABLE_FIELD_FULL, null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(29, KV_NAME, null, null, null, null, ST_TABLE_FIELD_03, ST_TABLE_FIELD_FULL, null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(30, KV_OID, null, null, null, null, ST_TABLE_FIELD_03, ST_TABLE_FIELD_FULL, null, null));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsSNMP { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsSNMP extends Input implements Serializable
+{
+	private static final long serialVersionUID = 1457953027356795701L;
+	
+	private static final String DEFINITION_TEXT = "# Retrieves SNMP values from remote agents";
+	private static final String SIMPLE_NAME = "inputs.snmp";
+	private static final String FULL_NAME = "[[inputs.snmp]]";
+	private static final String KV_AGENTS = "agents";
+	private static final String KV_TIMEOUT = "timeout";
+	private static final String KV_RETRIES = "retries";
+	private static final String KV_VERSION = "version";
+	private static final String KV_COMMUNITY = "community";
+	private static final String KV_MAX_REPETITIONS = "max_repetitions";
+	private static final String KV_SEC_NAME = "sec_name";
+	private static final String KV_AUTH_PROTOCOL = "auth_protocol";
+	private static final String KV_AUTH_PASSWORD = "auth_password";
+	private static final String KV_SEC_LEVEL = "sec_level";
+	private static final String KV_CONTEXT_NAME = "context_name";
+	private static final String KV_PRIV_PROTOCOL = "priv_protocol";
+	private static final String KV_PROV_PASSWORD = "priv_password";
+	private static final String KV_NAME = "name";
+	private static final String KV_OID = "oid";
+	private static final String KV_INHERIT_TAGS = "inherit_tags";
+	private static final String KV_IS_TAG = "is_tag";
+	private static final String ST_FIELD_01 = "[[inputs.snmp.field]](1)";
+	private static final String ST_FIELD_02 = "[[inputs.snmp.field]](2)";
+	private static final String ST_FIELD_03 = "[[inputs.snmp.field]](3)";
+	private static final String ST_FIELD_04 = "[[inputs.snmp.field]](4)";
+	private static final String ST_FIELD_FULL = "[[inputs.snmp.field]]";
+	private static final String ST_TABLE_FULL = "[[inputs.snmp.table]]";
+	private static final String ST_TABLE_FIELD_01 = "[[inputs.snmp.table.field]](1)";
+	private static final String ST_TABLE_FIELD_02 = "[[inputs.snmp.table.field]](2)";
+	private static final String ST_TABLE_FIELD_03 = "[[inputs.snmp.table.field]](3)";
+	private static final String ST_TABLE_FIELD_FULL = "[[inputs.snmp.table.field]]";
+  
+
+	public InputsSNMP() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsSNMP(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		keyValuePairList.add(new KeyValuePair(1, KV_AGENTS, null, null, null, null));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Timeout for each SNMP query."));
+		keyValuePairList.add(new KeyValuePair(2, KV_TIMEOUT, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Number of retries to attempt within timeout."));
+		keyValuePairList.add(new KeyValuePair(3, KV_RETRIES, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## SNMP version, values can be 1, 2, or 3"));
+		keyValuePairList.add(new KeyValuePair(4, KV_VERSION, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## SNMP community string."));
+		keyValuePairList.add(new KeyValuePair(5, KV_COMMUNITY, null, null, null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## The GETBULK max-repetitions parameter"));
+		keyValuePairList.add(new KeyValuePair(6, KV_MAX_REPETITIONS, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## SNMPv3 auth parameters"));
+		keyValuePairList.add(new KeyValuePair(7, KV_SEC_NAME, null, "# ", null, list));
+    
+		keyValuePairList.add(new KeyValuePair(8, KV_AUTH_PROTOCOL, null, "# ", "# Values: \"MD5\", \"SHA\", \"\"", null));
+		    
+		keyValuePairList.add(new KeyValuePair(9, KV_AUTH_PASSWORD, null, "# ", null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(10, KV_SEC_LEVEL, null, "# ", "# Values: \"noAuthNoPriv\", \"authNoPriv\", \"authPriv\"", null));
+		    
+		keyValuePairList.add(new KeyValuePair(11, KV_CONTEXT_NAME, null, "# ", null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(12, KV_PRIV_PROTOCOL, null, "# ", "# Values: \"DES\", \"AES\", \"\"", null));
+		    
+		keyValuePairList.add(new KeyValuePair(13, KV_PROV_PASSWORD, null, "# ", null, null));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## measurement name"));
+		keyValuePairList.add(new KeyValuePair(14, KV_NAME, null, null, null, list));
+		    
+		keyValuePairList.add(new KeyValuePair(15, KV_NAME, null, null, null, null, ST_FIELD_01, ST_FIELD_FULL, null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(16, KV_OID, null, null, null, null, ST_FIELD_01, ST_FIELD_FULL, null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(17, KV_NAME, null, null, null, null, ST_FIELD_02, ST_FIELD_FULL, null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(18, KV_OID, null, null, null, null, ST_FIELD_02, ST_FIELD_FULL, null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(19, KV_NAME, null, null, null, null, ST_FIELD_03, ST_FIELD_FULL, null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(20, KV_OID, null, null, null, null, ST_FIELD_03, ST_FIELD_FULL, null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(21, KV_OID, null, null, null, null, ST_FIELD_04, ST_FIELD_FULL, null, null));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## measurement name"));
+		keyValuePairList.add(new KeyValuePair(22, KV_NAME, null, null, null, list, ST_TABLE_FULL, ST_TABLE_FULL, null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(23, KV_INHERIT_TAGS, null, null, null, null, ST_TABLE_FULL, ST_TABLE_FULL, null, null));
+    
+		keyValuePairList.add(new KeyValuePair(24, KV_NAME, null, null, null, null, ST_TABLE_FIELD_01, ST_TABLE_FIELD_FULL, null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(25, KV_OID, null, null, null, null, ST_TABLE_FIELD_01, ST_TABLE_FIELD_FULL, null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(26, KV_IS_TAG, null, null, null, null, ST_TABLE_FIELD_01, ST_TABLE_FIELD_FULL, null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(27, KV_NAME, null, null, null, null, ST_TABLE_FIELD_02, ST_TABLE_FIELD_FULL, null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(28, KV_OID, null, null, null, null, ST_TABLE_FIELD_02, ST_TABLE_FIELD_FULL, null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(29, KV_NAME, null, null, null, null, ST_TABLE_FIELD_03, ST_TABLE_FIELD_FULL, null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(30, KV_OID, null, null, null, null, ST_TABLE_FIELD_03, ST_TABLE_FIELD_FULL, null, null));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsSNMP { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsSQLServer.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsSQLServer.java
index a68fc312a92bae10ddc8b230e057416e494724f7..d0c3580bf97c9ac101c9901bbb300b4e284101a5 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsSQLServer.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsSQLServer.java
@@ -1,66 +1,66 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsSQLServer extends Input implements Serializable
-{
-	private static final long serialVersionUID = -8994052314880167512L;
-	
-	private static final String DEFINITION_TEXT = "# Read metrics from Microsoft SQL Server";
-	private static final String SIMPLE_NAME = "inputs.sqlserver";
-	private static final String FULL_NAME = "[[inputs.sqlserver]]";
-	private static final String KV_SERVERS = "servers";
-  
-
-	public InputsSQLServer() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsSQLServer(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## Specify instances to monitor with a list of connection strings."));
-		list.add(new Comment(2, "## All connection parameters are optional."));
-		list.add(new Comment(3, "## By default, the host is localhost, listening on default port, TCP 1433."));
-		list.add(new Comment(4, "##   for Windows, the user is the currently running AD user (SSO)."));
-		list.add(new Comment(5, "##   See https://github.com/denisenkom/go-mssqldb for detailed connection"));
-		list.add(new Comment(6, "##   parameters."));
-		keyValuePairList.add(new KeyValuePair(1, KV_SERVERS, null, "# ", null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsSQLServer { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsSQLServer extends Input implements Serializable
+{
+	private static final long serialVersionUID = -8994052314880167512L;
+	
+	private static final String DEFINITION_TEXT = "# Read metrics from Microsoft SQL Server";
+	private static final String SIMPLE_NAME = "inputs.sqlserver";
+	private static final String FULL_NAME = "[[inputs.sqlserver]]";
+	private static final String KV_SERVERS = "servers";
+  
+
+	public InputsSQLServer() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsSQLServer(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## Specify instances to monitor with a list of connection strings."));
+		list.add(new Comment(2, "## All connection parameters are optional."));
+		list.add(new Comment(3, "## By default, the host is localhost, listening on default port, TCP 1433."));
+		list.add(new Comment(4, "##   for Windows, the user is the currently running AD user (SSO)."));
+		list.add(new Comment(5, "##   See https://github.com/denisenkom/go-mssqldb for detailed connection"));
+		list.add(new Comment(6, "##   parameters."));
+		keyValuePairList.add(new KeyValuePair(1, KV_SERVERS, null, "# ", null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsSQLServer { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsSensors.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsSensors.java
index 43f4eb5b69420381cd388c7914b0d6ac846694a7..6b730284c794ea905d78f76c8bd2c0ea6afb09aa 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsSensors.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsSensors.java
@@ -1,62 +1,62 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsSensors extends Input implements Serializable
-{
-	private static final long serialVersionUID = -4180968088031033266L;
-	
-	private static final String DEFINITION_TEXT = "# Monitor sensors, requires lm-sensors package";
-	private static final String SIMPLE_NAME = "inputs.sensors";
-	private static final String FULL_NAME = "[[inputs.sensors]]";
-	private static final String KV_REMOVE_NUMBERS = "remove_numbers";
-  
-
-	public InputsSensors() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsSensors(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## Remove numbers from field names."));
-		list.add(new Comment(2, "## If true, a field name like 'temp1_input' will be changed to 'temp_input'."));
-		keyValuePairList.add(new KeyValuePair(1, KV_REMOVE_NUMBERS, null, "# ", null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsSensors { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsSensors extends Input implements Serializable
+{
+	private static final long serialVersionUID = -4180968088031033266L;
+	
+	private static final String DEFINITION_TEXT = "# Monitor sensors, requires lm-sensors package";
+	private static final String SIMPLE_NAME = "inputs.sensors";
+	private static final String FULL_NAME = "[[inputs.sensors]]";
+	private static final String KV_REMOVE_NUMBERS = "remove_numbers";
+  
+
+	public InputsSensors() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsSensors(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## Remove numbers from field names."));
+		list.add(new Comment(2, "## If true, a field name like 'temp1_input' will be changed to 'temp_input'."));
+		keyValuePairList.add(new KeyValuePair(1, KV_REMOVE_NUMBERS, null, "# ", null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsSensors { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsSwap.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsSwap.java
index c70c3144f3d7c14ebd1813a270bb3e5e7f874720..cb790e92b430d55b733ee4bd04b5c7a48e504367 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsSwap.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsSwap.java
@@ -1,60 +1,60 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsSwap extends Input implements Serializable
-{
-	private static final long serialVersionUID = 4210254990735182566L;
-	
-	private static final String DEFINITION_TEXT = "# Read metrics about swap memory usage";
-	private static final String SIMPLE_NAME = "inputs.swap";
-	private static final String FULL_NAME = "[[inputs.swap]]";
-  
-
-	public InputsSwap() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsSwap(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "# no configuration"));
-		keyValuePairList.add(new KeyValuePair(1, null, null, null, null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsSwap { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsSwap extends Input implements Serializable
+{
+	private static final long serialVersionUID = 4210254990735182566L;
+	
+	private static final String DEFINITION_TEXT = "# Read metrics about swap memory usage";
+	private static final String SIMPLE_NAME = "inputs.swap";
+	private static final String FULL_NAME = "[[inputs.swap]]";
+  
+
+	public InputsSwap() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsSwap(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "# no configuration"));
+		keyValuePairList.add(new KeyValuePair(1, null, null, null, null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsSwap { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsSysStat.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsSysStat.java
index 50a558b15047ede780b40458df0ab1af2cb69d07..009615b0d13da4173713836738cd985327d63229 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsSysStat.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsSysStat.java
@@ -1,162 +1,162 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsSysStat extends Input implements Serializable
-{
-	private static final long serialVersionUID = -954261244699652393L;
-	
-	private static final String DEFINITION_TEXT = "# Sysstat metrics collector";
-	private static final String SIMPLE_NAME = "inputs.sysstat";
-	private static final String FULL_NAME = "[[inputs.sysstat]]";
-	private static final String KV_SADC_PATH = "sadc_path";
-	private static final String KV_SADF_PATH = "sadf_path";
-	private static final String KV_ACTIVITIES = "activities";
-	private static final String KV_GROUP = "group";
-	private static final String KV_C = "-C";
-	private static final String KV_B1 = "-B";
-	private static final String KV_B2 = "-b";
-	private static final String KV_D = "-d";
-	private static final String KV_N_ALL = "\"-n ALL\"";
-	private static final String KV_P_ALL = "\"-P ALL\"";
-	private static final String KV_Q = "-q";
-	private static final String KV_R1 = "-R";
-	private static final String KV_R2 = "-r";
-	private static final String KV_S = "-S";
-	private static final String KV_U = "-u";
-	private static final String KV_V = "-v";
-	private static final String KV_W1 = "-W";
-	private static final String KV_W2 = "-w";
-	private static final String KV_H = "-H";
-	private static final String KV_I_ALL = "\"-I ALL\"";
-	private static final String KV_VG = "vg";
-	private static final String ST_OPTIONS = "[inputs.sysstat.options]";
-	private static final String ST_SDA = "[[inputs.sysstat.device_tags.sda]]";
-  
-
-	public InputsSysStat() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsSysStat(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		List<Comment> subtableCommentList = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "## Path to the sadc command."));
-		list.add(new Comment(2, "#"));
-		list.add(new Comment(3, "## Common Defaults:"));
-		list.add(new Comment(4, "##   Debian/Ubuntu: /usr/lib/sysstat/sadc"));
-		list.add(new Comment(5, "##   Arch:          /usr/lib/sa/sadc"));
-		list.add(new Comment(6, "##   RHEL/CentOS:   /usr/lib64/sa/sadc"));
-		keyValuePairList.add(new KeyValuePair(1, KV_SADC_PATH, null, null, null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "#"));
-		list.add(new Comment(2, "#"));
-		list.add(new Comment(3, "## Path to the sadf command, if it is not in PATH"));
-		keyValuePairList.add(new KeyValuePair(2, KV_SADF_PATH, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "#"));
-		list.add(new Comment(2, "#"));
-		list.add(new Comment(3, "## Activities is a list of activities, that are passed as argument to the"));
-		list.add(new Comment(4, "## sadc collector utility (e.g: DISK, SNMP etc...)"));
-		list.add(new Comment(5, "## The more activities that are added, the more data is collected."));
-		keyValuePairList.add(new KeyValuePair(3, KV_ACTIVITIES, null, "# ", null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "#"));
-		list.add(new Comment(2, "#"));
-		list.add(new Comment(3, "## Group metrics to measurements."));
-		list.add(new Comment(4, "##"));
-		list.add(new Comment(5, "## If group is false each metric will be prefixed with a description"));
-		list.add(new Comment(6, "## and represents itself a measurement."));
-		list.add(new Comment(7, "##"));
-		list.add(new Comment(8, "## If Group is true, corresponding metrics are grouped to a single measurement."));
-		keyValuePairList.add(new KeyValuePair(4, KV_GROUP, null, "# ", null, list));
-    
-		subtableCommentList.add(new Comment(1, "#"));
-		subtableCommentList.add(new Comment(2, "#"));
-		subtableCommentList.add(new Comment(3, "## Options for the sadf command. The values on the left represent the sadf"));
-		subtableCommentList.add(new Comment(4, "## options and the values on the right their description (wich are used for"));
-		subtableCommentList.add(new Comment(5, "## grouping and prefixing metrics)."));
-		subtableCommentList.add(new Comment(6, "##"));
-		subtableCommentList.add(new Comment(7, "## Run 'sar -h' or 'man sar' to find out the supported options for your"));
-		subtableCommentList.add(new Comment(8, "## sysstat version."));
-		keyValuePairList.add(new KeyValuePair(5, KV_C, null, null, null, null, ST_OPTIONS, ST_OPTIONS, subtableCommentList, null));
-		    
-		keyValuePairList.add(new KeyValuePair(6, KV_B1, null, null, null, null, ST_OPTIONS, ST_OPTIONS, null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(7, KV_B2, null, null, null, null, ST_OPTIONS, ST_OPTIONS, null, null));
-    
-		keyValuePairList.add(new KeyValuePair(8, KV_D, null, null, null, null, ST_OPTIONS, ST_OPTIONS, null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(9, KV_N_ALL, null, null, null, null, ST_OPTIONS, ST_OPTIONS, null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(10, KV_P_ALL, null, null, null, null, ST_OPTIONS, ST_OPTIONS, null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(11, KV_Q, null, null, null, null, ST_OPTIONS, ST_OPTIONS, null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(12, KV_R1, null, null, null, null, ST_OPTIONS, ST_OPTIONS, null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(13, KV_R2, null, null, null, null, ST_OPTIONS, ST_OPTIONS, null, null));
-    
-		keyValuePairList.add(new KeyValuePair(14, KV_S, null, null, null, null, ST_OPTIONS, ST_OPTIONS, null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(15, KV_U, null, null, null, null, ST_OPTIONS, ST_OPTIONS, null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(16, KV_V, null, null, null, null, ST_OPTIONS, ST_OPTIONS, null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(17, KV_W1, null, null, null, null, ST_OPTIONS, ST_OPTIONS, null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(18, KV_W2, null, null, null, null, ST_OPTIONS, ST_OPTIONS, null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(19, KV_H, null, null, null, null, ST_OPTIONS, ST_OPTIONS, null, "# "));
-		    
-		keyValuePairList.add(new KeyValuePair(20, KV_I_ALL, null, null, null, null, ST_OPTIONS, ST_OPTIONS, null, "# "));
-		    
-		subtableCommentList = new ArrayList<Comment>();
-		subtableCommentList.add(new Comment(1, "#"));
-		subtableCommentList.add(new Comment(2, "#"));
-		subtableCommentList.add(new Comment(3, "## Device tags can be used to add additional tags for devices."));
-		subtableCommentList.add(new Comment(4, "## For example the configuration below adds a tag vg with value rootvg for"));
-		subtableCommentList.add(new Comment(5, "## all metrics with sda devices."));
-		keyValuePairList.add(new KeyValuePair(21, KV_VG, null, null, null, null, ST_SDA, ST_SDA, subtableCommentList, "# "));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsSysStat { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsSysStat extends Input implements Serializable
+{
+	private static final long serialVersionUID = -954261244699652393L;
+	
+	private static final String DEFINITION_TEXT = "# Sysstat metrics collector";
+	private static final String SIMPLE_NAME = "inputs.sysstat";
+	private static final String FULL_NAME = "[[inputs.sysstat]]";
+	private static final String KV_SADC_PATH = "sadc_path";
+	private static final String KV_SADF_PATH = "sadf_path";
+	private static final String KV_ACTIVITIES = "activities";
+	private static final String KV_GROUP = "group";
+	private static final String KV_C = "-C";
+	private static final String KV_B1 = "-B";
+	private static final String KV_B2 = "-b";
+	private static final String KV_D = "-d";
+	private static final String KV_N_ALL = "\"-n ALL\"";
+	private static final String KV_P_ALL = "\"-P ALL\"";
+	private static final String KV_Q = "-q";
+	private static final String KV_R1 = "-R";
+	private static final String KV_R2 = "-r";
+	private static final String KV_S = "-S";
+	private static final String KV_U = "-u";
+	private static final String KV_V = "-v";
+	private static final String KV_W1 = "-W";
+	private static final String KV_W2 = "-w";
+	private static final String KV_H = "-H";
+	private static final String KV_I_ALL = "\"-I ALL\"";
+	private static final String KV_VG = "vg";
+	private static final String ST_OPTIONS = "[inputs.sysstat.options]";
+	private static final String ST_SDA = "[[inputs.sysstat.device_tags.sda]]";
+  
+
+	public InputsSysStat() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsSysStat(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		List<Comment> subtableCommentList = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "## Path to the sadc command."));
+		list.add(new Comment(2, "#"));
+		list.add(new Comment(3, "## Common Defaults:"));
+		list.add(new Comment(4, "##   Debian/Ubuntu: /usr/lib/sysstat/sadc"));
+		list.add(new Comment(5, "##   Arch:          /usr/lib/sa/sadc"));
+		list.add(new Comment(6, "##   RHEL/CentOS:   /usr/lib64/sa/sadc"));
+		keyValuePairList.add(new KeyValuePair(1, KV_SADC_PATH, null, null, null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "#"));
+		list.add(new Comment(2, "#"));
+		list.add(new Comment(3, "## Path to the sadf command, if it is not in PATH"));
+		keyValuePairList.add(new KeyValuePair(2, KV_SADF_PATH, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "#"));
+		list.add(new Comment(2, "#"));
+		list.add(new Comment(3, "## Activities is a list of activities, that are passed as argument to the"));
+		list.add(new Comment(4, "## sadc collector utility (e.g: DISK, SNMP etc...)"));
+		list.add(new Comment(5, "## The more activities that are added, the more data is collected."));
+		keyValuePairList.add(new KeyValuePair(3, KV_ACTIVITIES, null, "# ", null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "#"));
+		list.add(new Comment(2, "#"));
+		list.add(new Comment(3, "## Group metrics to measurements."));
+		list.add(new Comment(4, "##"));
+		list.add(new Comment(5, "## If group is false each metric will be prefixed with a description"));
+		list.add(new Comment(6, "## and represents itself a measurement."));
+		list.add(new Comment(7, "##"));
+		list.add(new Comment(8, "## If Group is true, corresponding metrics are grouped to a single measurement."));
+		keyValuePairList.add(new KeyValuePair(4, KV_GROUP, null, "# ", null, list));
+    
+		subtableCommentList.add(new Comment(1, "#"));
+		subtableCommentList.add(new Comment(2, "#"));
+		subtableCommentList.add(new Comment(3, "## Options for the sadf command. The values on the left represent the sadf"));
+		subtableCommentList.add(new Comment(4, "## options and the values on the right their description (wich are used for"));
+		subtableCommentList.add(new Comment(5, "## grouping and prefixing metrics)."));
+		subtableCommentList.add(new Comment(6, "##"));
+		subtableCommentList.add(new Comment(7, "## Run 'sar -h' or 'man sar' to find out the supported options for your"));
+		subtableCommentList.add(new Comment(8, "## sysstat version."));
+		keyValuePairList.add(new KeyValuePair(5, KV_C, null, null, null, null, ST_OPTIONS, ST_OPTIONS, subtableCommentList, null));
+		    
+		keyValuePairList.add(new KeyValuePair(6, KV_B1, null, null, null, null, ST_OPTIONS, ST_OPTIONS, null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(7, KV_B2, null, null, null, null, ST_OPTIONS, ST_OPTIONS, null, null));
+    
+		keyValuePairList.add(new KeyValuePair(8, KV_D, null, null, null, null, ST_OPTIONS, ST_OPTIONS, null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(9, KV_N_ALL, null, null, null, null, ST_OPTIONS, ST_OPTIONS, null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(10, KV_P_ALL, null, null, null, null, ST_OPTIONS, ST_OPTIONS, null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(11, KV_Q, null, null, null, null, ST_OPTIONS, ST_OPTIONS, null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(12, KV_R1, null, null, null, null, ST_OPTIONS, ST_OPTIONS, null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(13, KV_R2, null, null, null, null, ST_OPTIONS, ST_OPTIONS, null, null));
+    
+		keyValuePairList.add(new KeyValuePair(14, KV_S, null, null, null, null, ST_OPTIONS, ST_OPTIONS, null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(15, KV_U, null, null, null, null, ST_OPTIONS, ST_OPTIONS, null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(16, KV_V, null, null, null, null, ST_OPTIONS, ST_OPTIONS, null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(17, KV_W1, null, null, null, null, ST_OPTIONS, ST_OPTIONS, null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(18, KV_W2, null, null, null, null, ST_OPTIONS, ST_OPTIONS, null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(19, KV_H, null, null, null, null, ST_OPTIONS, ST_OPTIONS, null, "# "));
+		    
+		keyValuePairList.add(new KeyValuePair(20, KV_I_ALL, null, null, null, null, ST_OPTIONS, ST_OPTIONS, null, "# "));
+		    
+		subtableCommentList = new ArrayList<Comment>();
+		subtableCommentList.add(new Comment(1, "#"));
+		subtableCommentList.add(new Comment(2, "#"));
+		subtableCommentList.add(new Comment(3, "## Device tags can be used to add additional tags for devices."));
+		subtableCommentList.add(new Comment(4, "## For example the configuration below adds a tag vg with value rootvg for"));
+		subtableCommentList.add(new Comment(5, "## all metrics with sda devices."));
+		keyValuePairList.add(new KeyValuePair(21, KV_VG, null, null, null, null, ST_SDA, ST_SDA, subtableCommentList, "# "));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsSysStat { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsSystem.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsSystem.java
index 83c007ebf5ee606a9f008ac624eac625dddfb792..a504511e5011b683d4238d946cc312ba7b5f708e 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsSystem.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsSystem.java
@@ -1,60 +1,60 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsSystem extends Input implements Serializable
-{
-	private static final long serialVersionUID = -6569870233840149099L;
-	
-	private static final String DEFINITION_TEXT = "# Read metrics about system load & uptime";
-	private static final String SIMPLE_NAME = "inputs.system";
-	private static final String FULL_NAME = "[[inputs.system]]";
-  
-
-	public InputsSystem() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsSystem(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "# no configuration"));
-		keyValuePairList.add(new KeyValuePair(1, null, null, null, null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsSystem { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsSystem extends Input implements Serializable
+{
+	private static final long serialVersionUID = -6569870233840149099L;
+	
+	private static final String DEFINITION_TEXT = "# Read metrics about system load & uptime";
+	private static final String SIMPLE_NAME = "inputs.system";
+	private static final String FULL_NAME = "[[inputs.system]]";
+  
+
+	public InputsSystem() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsSystem(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "# no configuration"));
+		keyValuePairList.add(new KeyValuePair(1, null, null, null, null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsSystem { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsTrig.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsTrig.java
index 2ea0071c86b01058cc6cad0186705e365c18a9cd..f84dcbfedbff691874b7f160fc7b741ca20375a9 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsTrig.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsTrig.java
@@ -1,61 +1,61 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsTrig extends Input implements Serializable
-{
-	private static final long serialVersionUID = -6886879230912823783L;
-	
-	private static final String DEFINITION_TEXT = "# Inserts sine and cosine waves for demonstration purposes";
-	private static final String SIMPLE_NAME = "inputs.trig";
-	private static final String FULL_NAME = "[[inputs.trig]]";
-	private static final String KV_AMPLITUDE = "amplitude";
-  
-
-	public InputsTrig() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsTrig(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## Set the amplitude"));
-		keyValuePairList.add(new KeyValuePair(1, KV_AMPLITUDE, null, null, null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsTrig { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsTrig extends Input implements Serializable
+{
+	private static final long serialVersionUID = -6886879230912823783L;
+	
+	private static final String DEFINITION_TEXT = "# Inserts sine and cosine waves for demonstration purposes";
+	private static final String SIMPLE_NAME = "inputs.trig";
+	private static final String FULL_NAME = "[[inputs.trig]]";
+	private static final String KV_AMPLITUDE = "amplitude";
+  
+
+	public InputsTrig() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsTrig(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## Set the amplitude"));
+		keyValuePairList.add(new KeyValuePair(1, KV_AMPLITUDE, null, null, null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsTrig { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsTwemproxy.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsTwemproxy.java
index 5706768ddf8e201ddccd2d3f45f8f82a239fdfe9..0638b4fd6cf3a3e5ab9df8c9ac6b562049196bc7 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsTwemproxy.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsTwemproxy.java
@@ -1,66 +1,66 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsTwemproxy extends Input implements Serializable
-{
-	private static final long serialVersionUID = -7558127863529634811L;
-	
-	private static final String DEFINITION_TEXT = "# Read Twemproxy stats data";
-	private static final String SIMPLE_NAME = "inputs.twemproxy";
-	private static final String FULL_NAME = "[[inputs.twemproxy]]";
-	private static final String KV_ADDR = "addr";
-	private static final String KV_POOLS = "pools";
-  
-
-	public InputsTwemproxy() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsTwemproxy(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-			List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## Twemproxy stats address and port (no scheme)"));
-		keyValuePairList.add(new KeyValuePair(1, KV_ADDR, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Monitor pool name"));
-		keyValuePairList.add(new KeyValuePair(2, KV_POOLS, null, null, null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsTwemproxy { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsTwemproxy extends Input implements Serializable
+{
+	private static final long serialVersionUID = -7558127863529634811L;
+	
+	private static final String DEFINITION_TEXT = "# Read Twemproxy stats data";
+	private static final String SIMPLE_NAME = "inputs.twemproxy";
+	private static final String FULL_NAME = "[[inputs.twemproxy]]";
+	private static final String KV_ADDR = "addr";
+	private static final String KV_POOLS = "pools";
+  
+
+	public InputsTwemproxy() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsTwemproxy(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+			List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## Twemproxy stats address and port (no scheme)"));
+		keyValuePairList.add(new KeyValuePair(1, KV_ADDR, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Monitor pool name"));
+		keyValuePairList.add(new KeyValuePair(2, KV_POOLS, null, null, null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsTwemproxy { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsVarnish.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsVarnish.java
index 84d66509fc7659159b0ea2f3be0ff794af7f5ff4..4deec0f580a43d1da28b715e90ca508e8c0d922a 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsVarnish.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsVarnish.java
@@ -1,70 +1,70 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsVarnish extends Input implements Serializable
-{
-	private static final long serialVersionUID = 7625077277299849130L;
-	
-	private static final String DEFINITION_TEXT = "# A plugin to collect stats from Varnish HTTP Cache";
-	private static final String SIMPLE_NAME = "inputs.varnish";
-	private static final String FULL_NAME = "[[inputs.varnish]]";
-	private static final String KV_BINARY = "binary";
-	private static final String KV_STATS = "stats";
-  
-
-	public InputsVarnish() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsVarnish(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## The default location of the varnishstat binary can be overridden with:"));
-		keyValuePairList.add(new KeyValuePair(1, KV_BINARY, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## By default, telegraf gather stats for 3 metric points."));
-		list.add(new Comment(3, "## Setting stats will override the defaults shown below."));
-		list.add(new Comment(4, "## Glob matching can be used, ie, stats=[\"MAIN.*\"]"));
-		list.add(new Comment(5, "## stats may also be set to [\"*\"], which will collect all stats"));
-		keyValuePairList.add(new KeyValuePair(2, KV_STATS, null, null, null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsVarnish { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsVarnish extends Input implements Serializable
+{
+	private static final long serialVersionUID = 7625077277299849130L;
+	
+	private static final String DEFINITION_TEXT = "# A plugin to collect stats from Varnish HTTP Cache";
+	private static final String SIMPLE_NAME = "inputs.varnish";
+	private static final String FULL_NAME = "[[inputs.varnish]]";
+	private static final String KV_BINARY = "binary";
+	private static final String KV_STATS = "stats";
+  
+
+	public InputsVarnish() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsVarnish(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## The default location of the varnishstat binary can be overridden with:"));
+		keyValuePairList.add(new KeyValuePair(1, KV_BINARY, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## By default, telegraf gather stats for 3 metric points."));
+		list.add(new Comment(3, "## Setting stats will override the defaults shown below."));
+		list.add(new Comment(4, "## Glob matching can be used, ie, stats=[\"MAIN.*\"]"));
+		list.add(new Comment(5, "## stats may also be set to [\"*\"], which will collect all stats"));
+		keyValuePairList.add(new KeyValuePair(2, KV_STATS, null, null, null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsVarnish { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsZFS.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsZFS.java
index 9ce74d6b31c76b0eac9fee64774e75b96dda74fb..55bbc51171b2878948cc416de101df95e37f9f44 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsZFS.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsZFS.java
@@ -1,75 +1,75 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsZFS extends Input implements Serializable
-{
-	private static final long serialVersionUID = -4807013958714544019L;
-	
-	private static final String DEFINITION_TEXT = "# Read metrics of ZFS from arcstats, zfetchstats, vdev_cache_stats, and pools";
-	private static final String SIMPLE_NAME = "inputs.zfs";
-	private static final String FULL_NAME = "[[inputs.zfs]]";
-	private static final String KV_KSTATPATH = "kstatPath";
-	private static final String KV_KSTATMETRICS = "kstatMetrics";
-	private static final String KV_POOLMETRICS = "poolMetrics";
-  
-
-	public InputsZFS() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsZFS(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## ZFS kstat path. Ignored on FreeBSD"));
-		list.add(new Comment(2, "## If not specified, then default is:"));
-		keyValuePairList.add(new KeyValuePair(1, KV_KSTATPATH, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## By default, telegraf gather all zfs stats"));
-		list.add(new Comment(3, "## If not specified, then default is:"));
-		keyValuePairList.add(new KeyValuePair(2, KV_KSTATMETRICS, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## By default, don't gather zpool stats"));
-		keyValuePairList.add(new KeyValuePair(3, KV_POOLMETRICS, null, "# ", null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsZFS { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsZFS extends Input implements Serializable
+{
+	private static final long serialVersionUID = -4807013958714544019L;
+	
+	private static final String DEFINITION_TEXT = "# Read metrics of ZFS from arcstats, zfetchstats, vdev_cache_stats, and pools";
+	private static final String SIMPLE_NAME = "inputs.zfs";
+	private static final String FULL_NAME = "[[inputs.zfs]]";
+	private static final String KV_KSTATPATH = "kstatPath";
+	private static final String KV_KSTATMETRICS = "kstatMetrics";
+	private static final String KV_POOLMETRICS = "poolMetrics";
+  
+
+	public InputsZFS() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsZFS(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## ZFS kstat path. Ignored on FreeBSD"));
+		list.add(new Comment(2, "## If not specified, then default is:"));
+		keyValuePairList.add(new KeyValuePair(1, KV_KSTATPATH, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## By default, telegraf gather all zfs stats"));
+		list.add(new Comment(3, "## If not specified, then default is:"));
+		keyValuePairList.add(new KeyValuePair(2, KV_KSTATMETRICS, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## By default, don't gather zpool stats"));
+		keyValuePairList.add(new KeyValuePair(3, KV_POOLMETRICS, null, "# ", null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsZFS { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsZookeeper.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsZookeeper.java
index 0a02601c2e3725367102bd47bbcc78bbff7d66c6..391c889e40e16ca041eabf19af02101ec5414746 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsZookeeper.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/inputs/InputsZookeeper.java
@@ -1,65 +1,65 @@
-package eu.decideh2020.telegraf.components.inputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class InputsZookeeper extends Input implements Serializable
-{
-	private static final long serialVersionUID = -2007892140161849899L;
-	
-	private static final String DEFINITION_TEXT = "# Reads 'mntr' stats from one or many zookeeper servers";
-	private static final String SIMPLE_NAME = "inputs.zookeeper";
-	private static final String FULL_NAME = "[[inputs.zookeeper]]";
-	private static final String KV_SERVERS = "servers";
-  
-
-	public InputsZookeeper() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public InputsZookeeper(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## An array of address to gather stats about. Specify an ip or hostname"));
-		list.add(new Comment(2, "## with port. ie localhost:2181, 10.0.0.1:2181, etc."));
-		list.add(new Comment(3, ""));
-		list.add(new Comment(4, "## If no servers are specified, then localhost is used as the host."));
-		list.add(new Comment(5, "## If no port is specified, 2181 is used"));
-		keyValuePairList.add(new KeyValuePair(1, KV_SERVERS, null, null, null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("InputsZookeeper { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.inputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class InputsZookeeper extends Input implements Serializable
+{
+	private static final long serialVersionUID = -2007892140161849899L;
+	
+	private static final String DEFINITION_TEXT = "# Reads 'mntr' stats from one or many zookeeper servers";
+	private static final String SIMPLE_NAME = "inputs.zookeeper";
+	private static final String FULL_NAME = "[[inputs.zookeeper]]";
+	private static final String KV_SERVERS = "servers";
+  
+
+	public InputsZookeeper() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public InputsZookeeper(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## An array of address to gather stats about. Specify an ip or hostname"));
+		list.add(new Comment(2, "## with port. ie localhost:2181, 10.0.0.1:2181, etc."));
+		list.add(new Comment(3, ""));
+		list.add(new Comment(4, "## If no servers are specified, then localhost is used as the host."));
+		list.add(new Comment(5, "## If no port is specified, 2181 is used"));
+		keyValuePairList.add(new KeyValuePair(1, KV_SERVERS, null, null, null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("InputsZookeeper { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/Output.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/Output.java
index f05e6d17540984551ac287a49133dc75e9db527b..71a82e1fdda0423a4c3a1ba6d505254bcfd3db15 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/Output.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/Output.java
@@ -1,17 +1,17 @@
-package eu.decideh2020.telegraf.components.outputs;
-
-import eu.decideh2020.telegraf.components.document.Plugin;
-import java.io.Serializable;
-
-public abstract class Output extends Plugin implements Serializable
-{
-	private static final long serialVersionUID = -381724305294862151L;
-	
-  
-	protected Output() {}
-  
-	protected Output(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment) {
-		super(definitionText, simpleName, fullName, namePreComment);
-	}
-}
+package eu.decideh2020.telegraf.components.outputs;
+
+import eu.decideh2020.telegraf.components.document.Plugin;
+import java.io.Serializable;
+
+public abstract class Output extends Plugin implements Serializable
+{
+	private static final long serialVersionUID = -381724305294862151L;
+	
+  
+	protected Output() {}
+  
+	protected Output(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment) {
+		super(definitionText, simpleName, fullName, namePreComment);
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsAMQP.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsAMQP.java
index 6e78e05789dece53eb5f02231a8266553f3f8e51..c4c5652e09ce5f97c6df86342800a9a356618ae4 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsAMQP.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsAMQP.java
@@ -1,122 +1,122 @@
-package eu.decideh2020.telegraf.components.outputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-public final class OutputsAMQP extends Output implements Serializable
-{
-	private static final long serialVersionUID = 3818108643257353056L;
-
-	private static final String DEFINITION_TEXT = "# Configuration for the AMQP server to send metrics to";
-	private static final String SIMPLE_NAME = "outputs.amqp";
-	private static final String FULL_NAME = "[[outputs.amqp]]";
-	private static final String KV_URL = "url";
-	private static final String KV_EXCHANGE = "exchange";
-	private static final String KV_AUTH_METHOD = "auth_method";
-	private static final String KV_ROUTING_TAG = "routing_tag";
-	private static final String KV_RETENTION_POLICY = "retention_policy";
-	private static final String KV_DATABASE = "database";
-	private static final String KV_TIMEOUT = "timeout";
-	private static final String KV_SSL_CA = "ssl_ca";
-	private static final String KV_SSL_CERT = "ssl_cert";
-	private static final String KV_SSL_KEY = "ssl_key";
-	private static final String KV_INSECURE_SKIP_VERIFY = "insecure_skip_verify";
-	private static final String KV_DATA_FORMAT = "data_format";
-
-  
-	public OutputsAMQP() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public OutputsAMQP(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-
-  
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "## AMQP url"));
-		keyValuePairList.add(new KeyValuePair(1, KV_URL, null, null, null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## AMQP exchange"));
-		keyValuePairList.add(new KeyValuePair(2, KV_EXCHANGE, null, null, null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Auth method. PLAIN and EXTERNAL are supported"));
-		list.add(new Comment(2, "## Using EXTERNAL requires enabling the rabbitmq_auth_mechanism_ssl plugin as"));
-		list.add(new Comment(3, "## described here: https://www.rabbitmq.com/plugins.html"));
-		keyValuePairList.add(new KeyValuePair(3, KV_AUTH_METHOD, null, "# ", null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Telegraf tag to use as a routing key"));
-		list.add(new Comment(2, "##  ie, if this tag exists, its value will be used as the routing key"));
-		keyValuePairList.add(new KeyValuePair(4, KV_ROUTING_TAG, null, null, null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## InfluxDB retention policy"));
-		keyValuePairList.add(new KeyValuePair(5, KV_RETENTION_POLICY, null, "# ", null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## InfluxDB database"));
-		keyValuePairList.add(new KeyValuePair(6, KV_DATABASE, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Write timeout, formatted as a string.  If not provided, will default"));
-		list.add(new Comment(3, "## to 5s. 0s means no timeout (not recommended)."));
-		keyValuePairList.add(new KeyValuePair(7, KV_TIMEOUT, null, "# ", null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Optional SSL Config"));
-		keyValuePairList.add(new KeyValuePair(8, KV_SSL_CA, null, "# ", null, list));
-    
-		keyValuePairList.add(new KeyValuePair(9, KV_SSL_CERT, null, "# ", null, null));
-		
-		keyValuePairList.add(new KeyValuePair(10, KV_SSL_KEY, null, "# ", null, null));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Use SSL but skip chain & host verification"));
-		keyValuePairList.add(new KeyValuePair(11, KV_INSECURE_SKIP_VERIFY, null, "# ", null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Data format to output."));
-		list.add(new Comment(3, "## Each data format has its own unique set of configuration options, read"));
-		list.add(new Comment(4, "## more about them here:"));
-		list.add(new Comment(5, "## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md"));
-		keyValuePairList.add(new KeyValuePair(12, KV_DATA_FORMAT, null, null, null, list));
-	}
-
-	
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("OutputsAMQP { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.outputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+public final class OutputsAMQP extends Output implements Serializable
+{
+	private static final long serialVersionUID = 3818108643257353056L;
+
+	private static final String DEFINITION_TEXT = "# Configuration for the AMQP server to send metrics to";
+	private static final String SIMPLE_NAME = "outputs.amqp";
+	private static final String FULL_NAME = "[[outputs.amqp]]";
+	private static final String KV_URL = "url";
+	private static final String KV_EXCHANGE = "exchange";
+	private static final String KV_AUTH_METHOD = "auth_method";
+	private static final String KV_ROUTING_TAG = "routing_tag";
+	private static final String KV_RETENTION_POLICY = "retention_policy";
+	private static final String KV_DATABASE = "database";
+	private static final String KV_TIMEOUT = "timeout";
+	private static final String KV_SSL_CA = "ssl_ca";
+	private static final String KV_SSL_CERT = "ssl_cert";
+	private static final String KV_SSL_KEY = "ssl_key";
+	private static final String KV_INSECURE_SKIP_VERIFY = "insecure_skip_verify";
+	private static final String KV_DATA_FORMAT = "data_format";
+
+  
+	public OutputsAMQP() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public OutputsAMQP(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+
+  
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "## AMQP url"));
+		keyValuePairList.add(new KeyValuePair(1, KV_URL, null, null, null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## AMQP exchange"));
+		keyValuePairList.add(new KeyValuePair(2, KV_EXCHANGE, null, null, null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Auth method. PLAIN and EXTERNAL are supported"));
+		list.add(new Comment(2, "## Using EXTERNAL requires enabling the rabbitmq_auth_mechanism_ssl plugin as"));
+		list.add(new Comment(3, "## described here: https://www.rabbitmq.com/plugins.html"));
+		keyValuePairList.add(new KeyValuePair(3, KV_AUTH_METHOD, null, "# ", null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Telegraf tag to use as a routing key"));
+		list.add(new Comment(2, "##  ie, if this tag exists, its value will be used as the routing key"));
+		keyValuePairList.add(new KeyValuePair(4, KV_ROUTING_TAG, null, null, null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## InfluxDB retention policy"));
+		keyValuePairList.add(new KeyValuePair(5, KV_RETENTION_POLICY, null, "# ", null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## InfluxDB database"));
+		keyValuePairList.add(new KeyValuePair(6, KV_DATABASE, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Write timeout, formatted as a string.  If not provided, will default"));
+		list.add(new Comment(3, "## to 5s. 0s means no timeout (not recommended)."));
+		keyValuePairList.add(new KeyValuePair(7, KV_TIMEOUT, null, "# ", null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Optional SSL Config"));
+		keyValuePairList.add(new KeyValuePair(8, KV_SSL_CA, null, "# ", null, list));
+    
+		keyValuePairList.add(new KeyValuePair(9, KV_SSL_CERT, null, "# ", null, null));
+		
+		keyValuePairList.add(new KeyValuePair(10, KV_SSL_KEY, null, "# ", null, null));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Use SSL but skip chain & host verification"));
+		keyValuePairList.add(new KeyValuePair(11, KV_INSECURE_SKIP_VERIFY, null, "# ", null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Data format to output."));
+		list.add(new Comment(3, "## Each data format has its own unique set of configuration options, read"));
+		list.add(new Comment(4, "## more about them here:"));
+		list.add(new Comment(5, "## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md"));
+		keyValuePairList.add(new KeyValuePair(12, KV_DATA_FORMAT, null, null, null, list));
+	}
+
+	
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("OutputsAMQP { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsAmon.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsAmon.java
index cfd15cb882982cfe36e1ace11eed9151f8d244bb..7878b10e4eafd5cf279a613a1fd1fbcddb4b5a69 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsAmon.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsAmon.java
@@ -1,72 +1,72 @@
-package eu.decideh2020.telegraf.components.outputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-public final class OutputsAmon extends Output implements Serializable
-{
-	private static final long serialVersionUID = -3872011410621874677L;
-	
-	private static final String DEFINITION_TEXT = "# Configuration for Amon Server to send metrics to.";
-	private static final String SIMPLE_NAME = "outputs.amon";
-	private static final String FULL_NAME = "[[outputs.amon]]";
-	private static final String KV_SERVER_KEY = "server_key";
-	private static final String KV_AMON_INSTANCE = "amon_instance";
-	private static final String KV_TIMEOUT = "timeout";
-
-	
-	public OutputsAmon() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public OutputsAmon(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-	
-  
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "## Amon Server Key"));
-		keyValuePairList.add(new KeyValuePair(1, KV_SERVER_KEY, null, null, "# required", list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Amon Instance URL"));
-		keyValuePairList.add(new KeyValuePair(2, KV_AMON_INSTANCE, null, null, "# required", list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Connection timeout."));
-		keyValuePairList.add(new KeyValuePair(3, KV_TIMEOUT, null, "# ", null, list));
-	}
-	
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("OutputsAmon { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.outputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+public final class OutputsAmon extends Output implements Serializable
+{
+	private static final long serialVersionUID = -3872011410621874677L;
+	
+	private static final String DEFINITION_TEXT = "# Configuration for Amon Server to send metrics to.";
+	private static final String SIMPLE_NAME = "outputs.amon";
+	private static final String FULL_NAME = "[[outputs.amon]]";
+	private static final String KV_SERVER_KEY = "server_key";
+	private static final String KV_AMON_INSTANCE = "amon_instance";
+	private static final String KV_TIMEOUT = "timeout";
+
+	
+	public OutputsAmon() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public OutputsAmon(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+	
+  
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "## Amon Server Key"));
+		keyValuePairList.add(new KeyValuePair(1, KV_SERVER_KEY, null, null, "# required", list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Amon Instance URL"));
+		keyValuePairList.add(new KeyValuePair(2, KV_AMON_INSTANCE, null, null, "# required", list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Connection timeout."));
+		keyValuePairList.add(new KeyValuePair(3, KV_TIMEOUT, null, "# ", null, list));
+	}
+	
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("OutputsAmon { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsCloudwatch.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsCloudwatch.java
index 83e9578a60184f5467d7b770da846215fa7ccdc8..4df9bff1c52d9a59f2536d4fba559be2345c900a 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsCloudwatch.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsCloudwatch.java
@@ -1,95 +1,95 @@
-package eu.decideh2020.telegraf.components.outputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class OutputsCloudwatch extends Output implements Serializable
-{
-	private static final long serialVersionUID = -9002871221414370972L;
-	
-	private static final String DEFINITION_TEXT = "# Configuration for AWS CloudWatch output.";
-	private static final String SIMPLE_NAME = "outputs.cloudwatch";
-	private static final String FULL_NAME = "[[outputs.cloudwatch]]";
-	private static final String KV_REGION = "region";
-	private static final String KV_ACCESS_KEY = "access_key";
-	private static final String KV_SECRET_KEY = "secret_key";
-	private static final String KV_TOKEN = "token";
-	private static final String KV_ROLE_ARN = "role_arn";
-	private static final String KV_PROFILE = "profile";
-	private static final String KV_SHARED_CREDENTIAL_FILE = "shared_credential_file";
-	private static final String KV_NAMESPACE = "namespace";
-
-  
-	public OutputsCloudwatch() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public OutputsCloudwatch(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-	
-  
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "## Amazon REGION"));
-		this.keyValuePairList.add(new KeyValuePair(1, KV_REGION, null, null, null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Amazon Credentials"));
-		list.add(new Comment(3, "## Credentials are loaded in the following order"));
-		list.add(new Comment(4, "## 1) Assumed credentials via STS if role_arn is specified"));
-		list.add(new Comment(5, "## 2) explicit credentials from 'access_key' and 'secret_key'"));
-		list.add(new Comment(6, "## 3) shared profile from 'profile'"));
-		list.add(new Comment(7, "## 4) environment variables"));
-		list.add(new Comment(8, "## 5) shared credentials file"));
-		list.add(new Comment(9, "## 6) EC2 Instance Profile"));
-		keyValuePairList.add(new KeyValuePair(2, KV_ACCESS_KEY, null, "# ", null, list));
-		    
-		keyValuePairList.add(new KeyValuePair(3, KV_SECRET_KEY, null, "# ", null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(4, KV_TOKEN, null, "# ", null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(5, KV_ROLE_ARN, null, "# ", null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(6, KV_PROFILE, null, "# ", null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(7, KV_SHARED_CREDENTIAL_FILE, null, "# ", null, null));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Namespace for the CloudWatch MetricDatums"));
-		keyValuePairList.add(new KeyValuePair(8, KV_NAMESPACE, null, null, null, list));
-	}
-	
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("OutputsCloudwatch { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-}
-}
+package eu.decideh2020.telegraf.components.outputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class OutputsCloudwatch extends Output implements Serializable
+{
+	private static final long serialVersionUID = -9002871221414370972L;
+	
+	private static final String DEFINITION_TEXT = "# Configuration for AWS CloudWatch output.";
+	private static final String SIMPLE_NAME = "outputs.cloudwatch";
+	private static final String FULL_NAME = "[[outputs.cloudwatch]]";
+	private static final String KV_REGION = "region";
+	private static final String KV_ACCESS_KEY = "access_key";
+	private static final String KV_SECRET_KEY = "secret_key";
+	private static final String KV_TOKEN = "token";
+	private static final String KV_ROLE_ARN = "role_arn";
+	private static final String KV_PROFILE = "profile";
+	private static final String KV_SHARED_CREDENTIAL_FILE = "shared_credential_file";
+	private static final String KV_NAMESPACE = "namespace";
+
+  
+	public OutputsCloudwatch() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public OutputsCloudwatch(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+	
+  
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "## Amazon REGION"));
+		this.keyValuePairList.add(new KeyValuePair(1, KV_REGION, null, null, null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Amazon Credentials"));
+		list.add(new Comment(3, "## Credentials are loaded in the following order"));
+		list.add(new Comment(4, "## 1) Assumed credentials via STS if role_arn is specified"));
+		list.add(new Comment(5, "## 2) explicit credentials from 'access_key' and 'secret_key'"));
+		list.add(new Comment(6, "## 3) shared profile from 'profile'"));
+		list.add(new Comment(7, "## 4) environment variables"));
+		list.add(new Comment(8, "## 5) shared credentials file"));
+		list.add(new Comment(9, "## 6) EC2 Instance Profile"));
+		keyValuePairList.add(new KeyValuePair(2, KV_ACCESS_KEY, null, "# ", null, list));
+		    
+		keyValuePairList.add(new KeyValuePair(3, KV_SECRET_KEY, null, "# ", null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(4, KV_TOKEN, null, "# ", null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(5, KV_ROLE_ARN, null, "# ", null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(6, KV_PROFILE, null, "# ", null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(7, KV_SHARED_CREDENTIAL_FILE, null, "# ", null, null));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Namespace for the CloudWatch MetricDatums"));
+		keyValuePairList.add(new KeyValuePair(8, KV_NAMESPACE, null, null, null, list));
+	}
+	
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("OutputsCloudwatch { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsDatadog.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsDatadog.java
index 4dddf514618389d1f6feae79ac809ceac33a4aa2..dcd4eef86fcdd86da67021a4ce0baece588e5284 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsDatadog.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsDatadog.java
@@ -1,67 +1,67 @@
-package eu.decideh2020.telegraf.components.outputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class OutputsDatadog extends Output implements Serializable
-{
-	private static final long serialVersionUID = -3168674367359823489L;
-
-	private static final String DEFINITION_TEXT = "# Configuration for DataDog API to send metrics to.";
-	private static final String SIMPLE_NAME = "outputs.datadog";
-	private static final String FULL_NAME = "[[outputs.datadog]]";
-	private static final String KV_APIKEY = "apikey";
-	private static final String KV_TIMEOUT = "timeout";
-  
-
-	public OutputsDatadog() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-	
-	public OutputsDatadog(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-
-	
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "## Datadog API key"));
-		keyValuePairList.add(new KeyValuePair(1, KV_APIKEY, null, null, "# required", list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Connection timeout."));
-		keyValuePairList.add(new KeyValuePair(2, KV_TIMEOUT, null, "# ", null, list));
-	}
-
-	
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("OutputsDatadog { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.outputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class OutputsDatadog extends Output implements Serializable
+{
+	private static final long serialVersionUID = -3168674367359823489L;
+
+	private static final String DEFINITION_TEXT = "# Configuration for DataDog API to send metrics to.";
+	private static final String SIMPLE_NAME = "outputs.datadog";
+	private static final String FULL_NAME = "[[outputs.datadog]]";
+	private static final String KV_APIKEY = "apikey";
+	private static final String KV_TIMEOUT = "timeout";
+  
+
+	public OutputsDatadog() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+	
+	public OutputsDatadog(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+
+	
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "## Datadog API key"));
+		keyValuePairList.add(new KeyValuePair(1, KV_APIKEY, null, null, "# required", list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Connection timeout."));
+		keyValuePairList.add(new KeyValuePair(2, KV_TIMEOUT, null, "# ", null, list));
+	}
+
+	
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("OutputsDatadog { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsDiscard.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsDiscard.java
index 1576b8207790e4467109eb82b89408f34dd5e630..7aa6bea0ded2e69e7056fda68caf5a4dae9844fb 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsDiscard.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsDiscard.java
@@ -1,59 +1,59 @@
-package eu.decideh2020.telegraf.components.outputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class OutputsDiscard extends Output implements Serializable
-{
-	private static final long serialVersionUID = 8631252130748397237L;
-	
-	private static final String DEFINITION_TEXT = "# Send metrics to nowhere at all";
-	private static final String SIMPLE_NAME = "outputs.discard";
-	private static final String FULL_NAME = "[[outputs.discard]]";
-
-	
-	public OutputsDiscard() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public OutputsDiscard(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-	
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "# no configuration"));
-		this.keyValuePairList.add(new KeyValuePair(1, null, null, null, null, list));
-	}
-	
-  
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("OutputsDiscard { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.outputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class OutputsDiscard extends Output implements Serializable
+{
+	private static final long serialVersionUID = 8631252130748397237L;
+	
+	private static final String DEFINITION_TEXT = "# Send metrics to nowhere at all";
+	private static final String SIMPLE_NAME = "outputs.discard";
+	private static final String FULL_NAME = "[[outputs.discard]]";
+
+	
+	public OutputsDiscard() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public OutputsDiscard(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+	
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "# no configuration"));
+		this.keyValuePairList.add(new KeyValuePair(1, null, null, null, null, list));
+	}
+	
+  
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("OutputsDiscard { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsElasticsearch.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsElasticsearch.java
index d8b611aad141021c34712093fa353c6d898eac1d..183e203181bbcf041035d88cc5641fa9d3720b31 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsElasticsearch.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsElasticsearch.java
@@ -1,120 +1,120 @@
-package eu.decideh2020.telegraf.components.outputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class OutputsElasticsearch extends Output implements Serializable
-{
-	private static final long serialVersionUID = -3017819962668079351L;
-	
-	private static final String DEFINITION_TEXT = "# Configuration for Elasticsearch to send metrics to.";
-	private static final String SIMPLE_NAME = "outputs.elasticsearch";
-	private static final String FULL_NAME = "[[outputs.elasticsearch]]";
-	private static final String KV_URLS = "urls";
-	private static final String KV_TIMEOUT = "timeout";
-	private static final String KV_ENABLE_SNIFFER = "enable_sniffer";
-	private static final String KV_HEALTH_CHECK_INTERVAL = "health_check_interval";
-	private static final String KV_USERNAME = "username";
-	private static final String KV_PASSWORD = "password";
-	private static final String KV_INDEX_NAME = "index_name";
-	private static final String KV_MANAGE_TEMPLATE = "manage_template";
-	private static final String KV_TEMPLATE_NAME = "template_name";
-	private static final String KV_OVERWRITE_TEMPLATE = "overwrite_template";
-
-  
-	public OutputsElasticsearch() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public OutputsElasticsearch(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-	
-  
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "## The full HTTP endpoint URL for your Elasticsearch instance"));
-		list.add(new Comment(2, "## Multiple urls can be specified as part of the same cluster,"));
-		list.add(new Comment(3, "## this means that only ONE of the urls will be written to each interval."));
-		keyValuePairList.add(new KeyValuePair(1, KV_URLS, null, null, "# required", list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Elasticsearch client timeout, defaults to \"5s\" if not set."));
-		keyValuePairList.add(new KeyValuePair(2, KV_TIMEOUT, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Set to true to ask Elasticsearch a list of all cluster nodes,"));
-		list.add(new Comment(2, "## thus it is not necessary to list all nodes in the urls config option."));
-		keyValuePairList.add(new KeyValuePair(3, KV_ENABLE_SNIFFER, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Set the interval to check if the Elasticsearch nodes are available"));
-		list.add(new Comment(2, "## Setting to \"0s\" will disable the health check (not recommended in production)"));
-		keyValuePairList.add(new KeyValuePair(4, KV_HEALTH_CHECK_INTERVAL, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## HTTP basic authentication details (eg. when using Shield)"));
-		keyValuePairList.add(new KeyValuePair(5, KV_USERNAME, null, "# ", null, list));
-		    
-		keyValuePairList.add(new KeyValuePair(6, KV_PASSWORD, null, "# ", null, null));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Index Config"));
-		list.add(new Comment(3, "## The target index for metrics (Elasticsearch will create if it not exists)."));
-		list.add(new Comment(4, "## You can use the date specifiers below to create indexes per time frame."));
-		list.add(new Comment(5, "## The metric timestamp will be used to decide the destination index name"));
-		list.add(new Comment(6, "# %Y - year (2016)"));
-		list.add(new Comment(7, "# %y - last two digits of year (00..99)"));
-		list.add(new Comment(8, "# %m - month (01..12)"));
-		list.add(new Comment(9, "# %d - day of month (e.g., 01)"));
-		list.add(new Comment(10, "# %H - hour (00..23)"));
-		keyValuePairList.add(new KeyValuePair(7, KV_INDEX_NAME, null, null, "# required", list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Template Config"));
-		list.add(new Comment(3, "## Set to true if you want telegraf to manage its index template."));
-		list.add(new Comment(4, "## If enabled it will create a recommended index template for telegraf indexes"));
-		keyValuePairList.add(new KeyValuePair(8, KV_MANAGE_TEMPLATE, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## The template name used for telegraf indexes"));
-		keyValuePairList.add(new KeyValuePair(9, KV_TEMPLATE_NAME, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Set to true if you want telegraf to overwrite an existing template"));
-		keyValuePairList.add(new KeyValuePair(10, KV_OVERWRITE_TEMPLATE, null, null, null, list));
-	}
-
-	
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("OutputsElasticsearch { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.outputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class OutputsElasticsearch extends Output implements Serializable
+{
+	private static final long serialVersionUID = -3017819962668079351L;
+	
+	private static final String DEFINITION_TEXT = "# Configuration for Elasticsearch to send metrics to.";
+	private static final String SIMPLE_NAME = "outputs.elasticsearch";
+	private static final String FULL_NAME = "[[outputs.elasticsearch]]";
+	private static final String KV_URLS = "urls";
+	private static final String KV_TIMEOUT = "timeout";
+	private static final String KV_ENABLE_SNIFFER = "enable_sniffer";
+	private static final String KV_HEALTH_CHECK_INTERVAL = "health_check_interval";
+	private static final String KV_USERNAME = "username";
+	private static final String KV_PASSWORD = "password";
+	private static final String KV_INDEX_NAME = "index_name";
+	private static final String KV_MANAGE_TEMPLATE = "manage_template";
+	private static final String KV_TEMPLATE_NAME = "template_name";
+	private static final String KV_OVERWRITE_TEMPLATE = "overwrite_template";
+
+  
+	public OutputsElasticsearch() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public OutputsElasticsearch(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+	
+  
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "## The full HTTP endpoint URL for your Elasticsearch instance"));
+		list.add(new Comment(2, "## Multiple urls can be specified as part of the same cluster,"));
+		list.add(new Comment(3, "## this means that only ONE of the urls will be written to each interval."));
+		keyValuePairList.add(new KeyValuePair(1, KV_URLS, null, null, "# required", list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Elasticsearch client timeout, defaults to \"5s\" if not set."));
+		keyValuePairList.add(new KeyValuePair(2, KV_TIMEOUT, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Set to true to ask Elasticsearch a list of all cluster nodes,"));
+		list.add(new Comment(2, "## thus it is not necessary to list all nodes in the urls config option."));
+		keyValuePairList.add(new KeyValuePair(3, KV_ENABLE_SNIFFER, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Set the interval to check if the Elasticsearch nodes are available"));
+		list.add(new Comment(2, "## Setting to \"0s\" will disable the health check (not recommended in production)"));
+		keyValuePairList.add(new KeyValuePair(4, KV_HEALTH_CHECK_INTERVAL, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## HTTP basic authentication details (eg. when using Shield)"));
+		keyValuePairList.add(new KeyValuePair(5, KV_USERNAME, null, "# ", null, list));
+		    
+		keyValuePairList.add(new KeyValuePair(6, KV_PASSWORD, null, "# ", null, null));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Index Config"));
+		list.add(new Comment(3, "## The target index for metrics (Elasticsearch will create if it not exists)."));
+		list.add(new Comment(4, "## You can use the date specifiers below to create indexes per time frame."));
+		list.add(new Comment(5, "## The metric timestamp will be used to decide the destination index name"));
+		list.add(new Comment(6, "# %Y - year (2016)"));
+		list.add(new Comment(7, "# %y - last two digits of year (00..99)"));
+		list.add(new Comment(8, "# %m - month (01..12)"));
+		list.add(new Comment(9, "# %d - day of month (e.g., 01)"));
+		list.add(new Comment(10, "# %H - hour (00..23)"));
+		keyValuePairList.add(new KeyValuePair(7, KV_INDEX_NAME, null, null, "# required", list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Template Config"));
+		list.add(new Comment(3, "## Set to true if you want telegraf to manage its index template."));
+		list.add(new Comment(4, "## If enabled it will create a recommended index template for telegraf indexes"));
+		keyValuePairList.add(new KeyValuePair(8, KV_MANAGE_TEMPLATE, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## The template name used for telegraf indexes"));
+		keyValuePairList.add(new KeyValuePair(9, KV_TEMPLATE_NAME, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Set to true if you want telegraf to overwrite an existing template"));
+		keyValuePairList.add(new KeyValuePair(10, KV_OVERWRITE_TEMPLATE, null, null, null, list));
+	}
+
+	
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("OutputsElasticsearch { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsFile.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsFile.java
index c36ef32aa2cfe3a0c59951863b0b181dcf476a3c..71d89f86e4338ad2c5d3d346d8016f10078c4f88 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsFile.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsFile.java
@@ -1,68 +1,68 @@
-package eu.decideh2020.telegraf.components.outputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-public final class OutputsFile extends Output implements Serializable
-{
-	private static final long serialVersionUID = 4780702363521544005L;
-  
-	private static final String DEFINITION_TEXT = "# Send telegraf metrics to file(s)";
-	private static final String SIMPLE_NAME = "outputs.file";
-	private static final String FULL_NAME = "[[outputs.file]]";
-	private static final String KV_FILES = "files";
-	private static final String KV_DATA_FORMAT = "data_format";
-  
-	public OutputsFile() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public OutputsFile(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-	
-  
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "## Files to write to, \"stdout\" is a specially handled file."));
-		keyValuePairList.add(new KeyValuePair(1, KV_FILES, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Data format to output."));
-		list.add(new Comment(3, "## Each data format has its own unique set of configuration options, read"));
-		list.add(new Comment(4, "## more about them here:"));
-		list.add(new Comment(5, "## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md"));
-		keyValuePairList.add(new KeyValuePair(2, KV_DATA_FORMAT, null, null, null, list));
-	}
-	
-  
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("OutputsFile { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.outputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+public final class OutputsFile extends Output implements Serializable
+{
+	private static final long serialVersionUID = 4780702363521544005L;
+  
+	private static final String DEFINITION_TEXT = "# Send telegraf metrics to file(s)";
+	private static final String SIMPLE_NAME = "outputs.file";
+	private static final String FULL_NAME = "[[outputs.file]]";
+	private static final String KV_FILES = "files";
+	private static final String KV_DATA_FORMAT = "data_format";
+  
+	public OutputsFile() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public OutputsFile(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+	
+  
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "## Files to write to, \"stdout\" is a specially handled file."));
+		keyValuePairList.add(new KeyValuePair(1, KV_FILES, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Data format to output."));
+		list.add(new Comment(3, "## Each data format has its own unique set of configuration options, read"));
+		list.add(new Comment(4, "## more about them here:"));
+		list.add(new Comment(5, "## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md"));
+		keyValuePairList.add(new KeyValuePair(2, KV_DATA_FORMAT, null, null, null, list));
+	}
+	
+  
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("OutputsFile { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsGraphite.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsGraphite.java
index 6a5ec193230ab268647d79a012f259b4664b6698..a54ca1b2c7b42eaa45654ccf6f0f4c2afdc915d2 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsGraphite.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsGraphite.java
@@ -1,78 +1,78 @@
-package eu.decideh2020.telegraf.components.outputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class OutputsGraphite extends Output implements Serializable
-{
-	private static final long serialVersionUID = 5674174267093221428L;
-	
-	private static final String DEFINITION_TEXT = "# Configuration for Graphite server to send metrics to";
-	private static final String SIMPLE_NAME = "outputs.graphite";
-	private static final String FULL_NAME = "[[outputs.graphite]]";
-	private static final String KV_SERVERS = "servers";
-	private static final String KV_PREFIX = "prefix";
-	private static final String KV_TEMPLATE = "template";
-	private static final String KV_TIMEOUT = "timeout";
-  
-	public OutputsGraphite() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public OutputsGraphite(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "## TCP endpoint for your graphite instance."));
-		list.add(new Comment(2, "## If multiple endpoints are configured, output will be load balanced."));
-		list.add(new Comment(3, "## Only one of the endpoints will be written to with each iteration."));
-		keyValuePairList.add(new KeyValuePair(1, KV_SERVERS, null, null, null, list));
-	    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Prefix metrics name"));
-		keyValuePairList.add(new KeyValuePair(2, KV_PREFIX, null, null, null, list));
-	    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Graphite output template"));
-		list.add(new Comment(2, "## see https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md"));
-		keyValuePairList.add(new KeyValuePair(3, KV_TEMPLATE, null, null, null, list));
-	    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## timeout in seconds for the write connection to graphite"));
-		keyValuePairList.add(new KeyValuePair(4, KV_TIMEOUT, null, null, null, list));
-	}
-
-  
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("OutputsGraphite { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.outputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class OutputsGraphite extends Output implements Serializable
+{
+	private static final long serialVersionUID = 5674174267093221428L;
+	
+	private static final String DEFINITION_TEXT = "# Configuration for Graphite server to send metrics to";
+	private static final String SIMPLE_NAME = "outputs.graphite";
+	private static final String FULL_NAME = "[[outputs.graphite]]";
+	private static final String KV_SERVERS = "servers";
+	private static final String KV_PREFIX = "prefix";
+	private static final String KV_TEMPLATE = "template";
+	private static final String KV_TIMEOUT = "timeout";
+  
+	public OutputsGraphite() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public OutputsGraphite(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "## TCP endpoint for your graphite instance."));
+		list.add(new Comment(2, "## If multiple endpoints are configured, output will be load balanced."));
+		list.add(new Comment(3, "## Only one of the endpoints will be written to with each iteration."));
+		keyValuePairList.add(new KeyValuePair(1, KV_SERVERS, null, null, null, list));
+	    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Prefix metrics name"));
+		keyValuePairList.add(new KeyValuePair(2, KV_PREFIX, null, null, null, list));
+	    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Graphite output template"));
+		list.add(new Comment(2, "## see https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md"));
+		keyValuePairList.add(new KeyValuePair(3, KV_TEMPLATE, null, null, null, list));
+	    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## timeout in seconds for the write connection to graphite"));
+		keyValuePairList.add(new KeyValuePair(4, KV_TIMEOUT, null, null, null, list));
+	}
+
+  
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("OutputsGraphite { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsGraylog.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsGraylog.java
index 8483d91e4fe5762899ed77bcbbe23a925496399f..65ae66c104de121e37adef7547b0072f7e93b038 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsGraylog.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsGraylog.java
@@ -1,61 +1,61 @@
-package eu.decideh2020.telegraf.components.outputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class OutputsGraylog extends Output implements Serializable
-{
-	private static final long serialVersionUID = 9012649636313710238L;
-	
-	private static final String DEFINITION_TEXT = "# Send telegraf metrics to graylog(s)";
-	private static final String SIMPLE_NAME = "outputs.graylog";
-	private static final String FULL_NAME = "[[outputs.graylog]]";
-	private static final String KV_SERVERS = "servers";
-	
-	
-	public OutputsGraylog() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public OutputsGraylog(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-	
-  
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "## UDP endpoint for your graylog instance."));
-		keyValuePairList.add(new KeyValuePair(1, KV_SERVERS, null, null, null, list));
-	}
-	
-  
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("OutputsGraylog { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.outputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class OutputsGraylog extends Output implements Serializable
+{
+	private static final long serialVersionUID = 9012649636313710238L;
+	
+	private static final String DEFINITION_TEXT = "# Send telegraf metrics to graylog(s)";
+	private static final String SIMPLE_NAME = "outputs.graylog";
+	private static final String FULL_NAME = "[[outputs.graylog]]";
+	private static final String KV_SERVERS = "servers";
+	
+	
+	public OutputsGraylog() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public OutputsGraylog(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+	
+  
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "## UDP endpoint for your graylog instance."));
+		keyValuePairList.add(new KeyValuePair(1, KV_SERVERS, null, null, null, list));
+	}
+	
+  
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("OutputsGraylog { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsInfluxDB.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsInfluxDB.java
index 9c6217e6f50dbcdd5427128c85411743e0922b65..31a2949f57b37daf40bd43e01bc5155d7146ef3e 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsInfluxDB.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsInfluxDB.java
@@ -1,123 +1,173 @@
-package eu.decideh2020.telegraf.components.outputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class OutputsInfluxDB extends Output implements Serializable
-{
-	private static final long serialVersionUID = -4429836513387438692L;
-	
-	private static final String DEFINITION_TEXT = "# Configuration for influxdb server to send metrics to";
-	private static final String SIMPLE_NAME = "outputs.influxdb";
-	private static final String FULL_NAME = "[[outputs.influxdb]]";
-	private static final String KV_URLS = "urls";
-	private static final String KV_DATABASE = "database";
-	private static final String KV_RETENTION_POLICY = "retention_policy";
-	private static final String KV_WRITE_CONSISTENCY = "write_consistency";
-	private static final String KV_TIMEOUT = "timeout";
-	private static final String KV_USERNAME = "username";
-	private static final String KV_PASSWORD = "password";
-	private static final String KV_USER_AGENT = "user_agent";
-	private static final String KV_UDP_PAYLOAD = "udp_payload";
-	private static final String KV_SSL_CA = "ssl_ca";
-	private static final String KV_SSL_CERT = "ssl_cert";
-	private static final String KV_SSL_KEY = "ssl_key";
-	private static final String KV_INSECURE_SKIP_VERIFY = "insecure_skip_verify";
-	
-  
-	public OutputsInfluxDB() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public OutputsInfluxDB(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-	
-  
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "## The HTTP or UDP URL for your InfluxDB instance.  Each item should be"));
-		list.add(new Comment(2, "## of the form:"));
-		list.add(new Comment(3, "##   scheme \"://\" host [ \":\" port]"));
-		list.add(new Comment(4, "##"));
-		list.add(new Comment(5, "## Multiple urls can be specified as part of the same cluster,"));
-		list.add(new Comment(6, "## this means that only ONE of the urls will be written to each interval."));
-		keyValuePairList.add(new KeyValuePair(1, KV_URLS, null, null, "# required", list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## The target database for metrics (telegraf will create it if not exists)."));
-		keyValuePairList.add(new KeyValuePair(2, KV_DATABASE, null, null, "# required", list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Name of existing retention policy to write to.  Empty string writes to"));
-		list.add(new Comment(3, "## the default retention policy."));
-		keyValuePairList.add(new KeyValuePair(3, KV_RETENTION_POLICY, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Write consistency (clusters only), can be: \"any\", \"one\", \"quorum\", \"all\""));
-		keyValuePairList.add(new KeyValuePair(4, KV_WRITE_CONSISTENCY, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Write timeout (for the InfluxDB client), formatted as a string."));
-		list.add(new Comment(3, "## If not provided, will default to 5s. 0s means no timeout (not recommended)."));
-		keyValuePairList.add(new KeyValuePair(5, KV_TIMEOUT, null, null, null, list));
-		    
-		keyValuePairList.add(new KeyValuePair(6, KV_USERNAME, null, "# ", null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(7, KV_PASSWORD, null, "# ", null, null));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Set the user agent for HTTP POSTs (can be useful for log differentiation)"));
-		keyValuePairList.add(new KeyValuePair(8, KV_USER_AGENT, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Set UDP payload size, defaults to InfluxDB UDP Client default (512 bytes)"));
-		keyValuePairList.add(new KeyValuePair(9, KV_UDP_PAYLOAD, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Optional SSL Config"));
-		keyValuePairList.add(new KeyValuePair(10, KV_SSL_CA, null, "# ", null, list));
-		    
-		keyValuePairList.add(new KeyValuePair(11, KV_SSL_CERT, null, "# ", null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(12, KV_SSL_KEY, null, "# ", null, null));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Use SSL but skip chain & host verification"));
-		keyValuePairList.add(new KeyValuePair(13, KV_INSECURE_SKIP_VERIFY, null, "# ", null, list));
-	}
-	
-  
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("OutputsInfluxDB { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.outputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class OutputsInfluxDB extends Output implements Serializable
+{
+	private static final long serialVersionUID = -4429836513387438692L;
+	
+	private static final String DEFINITION_TEXT = "# Configuration for sending metrics to InfluxDB";
+	private static final String SIMPLE_NAME = "outputs.influxdb";
+	private static final String FULL_NAME = "[[outputs.influxdb]]";
+	private static final String KV_URLS = "urls";
+	private static final String KV_DATABASE = "database";
+	private static final String KV_DATABASE_TAG = "database_tag";
+	private static final String KV_SKIP_DATABASE_CREATION = "skip_database_creation";
+	private static final String KV_RETENTION_POLICY = "retention_policy";
+	private static final String KV_WRITE_CONSISTENCY = "write_consistency";
+	private static final String KV_TIMEOUT = "timeout";
+	private static final String KV_USERNAME = "username";
+	private static final String KV_PASSWORD = "password";
+	private static final String KV_USER_AGENT = "user_agent";
+	private static final String KV_UDP_PAYLOAD = "udp_payload";
+	private static final String KV_TLS_CA = "ssl_ca";
+	private static final String KV_TLS_CERT = "ssl_cert";
+	private static final String KV_TLS_KEY = "ssl_key";
+	private static final String KV_INSECURE_SKIP_VERIFY = "insecure_skip_verify";
+	private static final String KV_HTTP_PROXY = "http_proxy";
+	private static final String KV_HTTP_HEADERS = "http_headers";
+	private static final String KV_CONTENT_ENCODING = "content_encoding";
+	private static final String KV_INFLUX_UINT_SUPPORT = "influx_uint_support";
+	
+  
+	public OutputsInfluxDB() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public OutputsInfluxDB(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+	
+  
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "## The full HTTP or UDP URL for your InfluxDB instance."));
+		list.add(new Comment(2, "##"));
+		list.add(new Comment(3, "## Multiple URLs can be specified for a single cluster, only ONE of the"));
+		list.add(new Comment(4, "## urls will be written to each interval."));
+		keyValuePairList.add(new KeyValuePair(1, KV_URLS, null, "# ", "# required", list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## The target database for metrics; will be created as needed."));
+		list.add(new Comment(3, "## For UDP url endpoint database needs to be configured on server side."));
+		keyValuePairList.add(new KeyValuePair(2, KV_DATABASE, null, "# ", "# required", list));
+		
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## The value of this tag will be used to determine the database. If this"));
+		list.add(new Comment(3, "## tag is not set the 'database' option is used as the default."));
+		keyValuePairList.add(new KeyValuePair(3, KV_DATABASE_TAG, null, "# ", null, list));
+		
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## If true, no CREATE DATABASE queries will be sent.  Set to true when using"));
+		list.add(new Comment(3, "## Telegraf with a user without permissions to create databases or when the"));
+		list.add(new Comment(4, "## database already exists."));
+		keyValuePairList.add(new KeyValuePair(4, KV_SKIP_DATABASE_CREATION, null, "# ", null, list));
+		
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Name of existing retention policy to write to.  Empty string writes to"));
+		list.add(new Comment(3, "## the default retention policy.  Only takes effect when using HTTP."));
+		keyValuePairList.add(new KeyValuePair(5, KV_RETENTION_POLICY, null, "# ", null, list));
+		   
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Write consistency (clusters only), can be: \"any\", \"one\", \"quorum\", \"all\"."));
+		list.add(new Comment(3, "## Only takes effect when using HTTP."));
+		keyValuePairList.add(new KeyValuePair(6, KV_WRITE_CONSISTENCY, null, "# ", null, list));
+		
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Timeout for HTTP messages."));
+		keyValuePairList.add(new KeyValuePair(7, KV_TIMEOUT, null, "# ", null, list));
+		
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## HTTP Basic Auth"));
+		keyValuePairList.add(new KeyValuePair(8, KV_USERNAME, null, "# ", null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(9, KV_PASSWORD, null, "# ", null, null));
+		
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## HTTP User-Agent"));
+		keyValuePairList.add(new KeyValuePair(10, KV_USER_AGENT, null, "# ", null, list));
+		
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## UDP payload size is the maximum packet size to send."));
+		keyValuePairList.add(new KeyValuePair(11, KV_UDP_PAYLOAD, null, "# ", null, list));
+		
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Optional TLS Config for use on HTTP connections."));
+		keyValuePairList.add(new KeyValuePair(12, KV_TLS_CA, null, "# ", null, list));
+		    
+		keyValuePairList.add(new KeyValuePair(13, KV_TLS_CERT, null, "# ", null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(14, KV_TLS_KEY, null, "# ", null, null));
+		
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Use TLS but skip chain & host verification"));
+		keyValuePairList.add(new KeyValuePair(15, KV_INSECURE_SKIP_VERIFY, null, "# ", null, list));
+		
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## HTTP Proxy override, if unset values the standard proxy environment"));
+		list.add(new Comment(3, "## variables are consulted to determine which proxy, if any, should be used."));
+		keyValuePairList.add(new KeyValuePair(16, KV_HTTP_PROXY, null, "# ", null, list));
+		
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Additional HTTP headers"));
+		keyValuePairList.add(new KeyValuePair(17, KV_HTTP_HEADERS, null, "# ", null, list));
+		
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## HTTP Content-Encoding for write request body, can be set to \"gzip\" to"));
+		list.add(new Comment(3, "## compress body or \"identity\" to apply no encoding."));
+		keyValuePairList.add(new KeyValuePair(18, KV_CONTENT_ENCODING, null, "# ", null, list));
+		
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## When true, Telegraf will output unsigned integers as unsigned values,"));
+		list.add(new Comment(3, "## i.e.: \"42u\".  You will need a version of InfluxDB supporting unsigned"));
+		list.add(new Comment(4, "## integer values.  Enabling this option will result in field type errors if"));
+		list.add(new Comment(5, "## existing data has been written."));
+		keyValuePairList.add(new KeyValuePair(19, KV_INFLUX_UINT_SUPPORT, null, "# ", null, list));
+	}
+	
+  
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("OutputsInfluxDB { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsInstrumental.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsInstrumental.java
index 80c95c26db782344fd598bbe94ddd6c3b23ae38e..1839eb3401050024c8d1f21361fea7ab10d402d7 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsInstrumental.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsInstrumental.java
@@ -1,81 +1,81 @@
-package eu.decideh2020.telegraf.components.outputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class OutputsInstrumental extends Output implements Serializable
-{
-	private static final long serialVersionUID = -3152555661347797420L;
-	
-	private static final String DEFINITION_TEXT = "# Configuration for sending metrics to an Instrumental project";
-	private static final String SIMPLE_NAME = "outputs.instrumental";
-	private static final String FULL_NAME = "[[outputs.instrumental]]";
-	private static final String KV_API_TOKEN = "api_token";
-	private static final String KV_PREFIX = "prefix";
-	private static final String KV_TEMPLATE = "template";
-	private static final String KV_TIMEOUT = "timeout";
-	private static final String KV_DEBUG = "debug";
-  
-	public OutputsInstrumental() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public OutputsInstrumental(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-	
-  
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "## Project API Token (required)"));
-		keyValuePairList.add(new KeyValuePair(1, KV_API_TOKEN, null, null, null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Prefix the metrics with a given name"));
-		keyValuePairList.add(new KeyValuePair(2, KV_PREFIX, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Stats output template (Graphite formatting)"));
-		list.add(new Comment(2, "## see https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md#graphite"));
-		keyValuePairList.add(new KeyValuePair(3, KV_TEMPLATE, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Timeout in seconds to connect"));
-		keyValuePairList.add(new KeyValuePair(4, KV_TIMEOUT, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Display Communcation to Instrumental"));
-		keyValuePairList.add(new KeyValuePair(5, KV_DEBUG, null, null, null, list));
-	}
-	
-  
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("OutputsInstrumental { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.outputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class OutputsInstrumental extends Output implements Serializable
+{
+	private static final long serialVersionUID = -3152555661347797420L;
+	
+	private static final String DEFINITION_TEXT = "# Configuration for sending metrics to an Instrumental project";
+	private static final String SIMPLE_NAME = "outputs.instrumental";
+	private static final String FULL_NAME = "[[outputs.instrumental]]";
+	private static final String KV_API_TOKEN = "api_token";
+	private static final String KV_PREFIX = "prefix";
+	private static final String KV_TEMPLATE = "template";
+	private static final String KV_TIMEOUT = "timeout";
+	private static final String KV_DEBUG = "debug";
+  
+	public OutputsInstrumental() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public OutputsInstrumental(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+	
+  
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "## Project API Token (required)"));
+		keyValuePairList.add(new KeyValuePair(1, KV_API_TOKEN, null, null, null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Prefix the metrics with a given name"));
+		keyValuePairList.add(new KeyValuePair(2, KV_PREFIX, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Stats output template (Graphite formatting)"));
+		list.add(new Comment(2, "## see https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md#graphite"));
+		keyValuePairList.add(new KeyValuePair(3, KV_TEMPLATE, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Timeout in seconds to connect"));
+		keyValuePairList.add(new KeyValuePair(4, KV_TIMEOUT, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Display Communcation to Instrumental"));
+		keyValuePairList.add(new KeyValuePair(5, KV_DEBUG, null, null, null, list));
+	}
+	
+  
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("OutputsInstrumental { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsKafka.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsKafka.java
index 8609d1d850789d9a5b6c587b99cd4fe87f88b5f2..d2d69281dad5ddfabb114c3242d34ba8388b70f6 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsKafka.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsKafka.java
@@ -1,142 +1,142 @@
-package eu.decideh2020.telegraf.components.outputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class OutputsKafka extends Output implements Serializable
-{
-	private static final long serialVersionUID = 2580177063846320762L;
-	
-private static final String DEFINITION_TEXT = "# Configuration for the Kafka server to send metrics to";
-private static final String SIMPLE_NAME = "outputs.kafka";
-private static final String FULL_NAME = "[[outputs.kafka]]";
-private static final String KV_BROKERS = "brokers";
-private static final String KV_TOPIC = "topic";
-private static final String KV_ROUTING_TAG = "routing_tag";
-private static final String KV_COMPRESSION_CODEC = "compression_codec";
-private static final String KV_REQUIRED_ACKS = "required_acks";
-private static final String KV_MAX_RETRY = "max_retry";
-private static final String KV_SSL_CA = "ssl_ca";
-private static final String KV_SSL_CERT = "ssl_cert";
-private static final String KV_SSL_KEY = "ssl_key";
-private static final String KV_INSECURE_SKIP_VERIFY = "insecure_skip_verify";
-private static final String KV_SASL_USERNAME = "sasl_username";
-private static final String KV_SASL_PASSWORD = "sasl_password";
-private static final String KV_DATA_FORMAT = "data_format";
-
-  
-	public OutputsKafka() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public OutputsKafka(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "## URLs of kafka brokers"));
-		keyValuePairList.add(new KeyValuePair(1, KV_BROKERS, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Kafka topic for producer messages"));
-		keyValuePairList.add(new KeyValuePair(2, KV_TOPIC, null, null, null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Telegraf tag to use as a routing key"));
-		list.add(new Comment(2, "##  ie, if this tag exists, its value will be used as the routing key"));
-		keyValuePairList.add(new KeyValuePair(3, KV_ROUTING_TAG, null, null, null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## CompressionCodec represents the various compression codecs recognized by"));
-		list.add(new Comment(3, "## Kafka in messages."));
-		list.add(new Comment(4, "##  0 : No compression"));
-		list.add(new Comment(5, "##  1 : Gzip compression"));
-		list.add(new Comment(6, "##  2 : Snappy compression"));
-		keyValuePairList.add(new KeyValuePair(4, KV_COMPRESSION_CODEC, null, null, null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "##  RequiredAcks is used in Produce Requests to tell the broker how many"));
-		list.add(new Comment(3, "##  replica acknowledgements it must see before responding"));
-		list.add(new Comment(4, "##   0 : the producer never waits for an acknowledgement from the broker."));
-		list.add(new Comment(5, "##       This option provides the lowest latency but the weakest durability"));
-		list.add(new Comment(6, "##       guarantees (some data will be lost when a server fails)."));
-		list.add(new Comment(7, "##   1 : the producer gets an acknowledgement after the leader replica has"));
-		list.add(new Comment(8, "##       received the data. This option provides better durability as the"));
-		list.add(new Comment(9, "##       client waits until the server acknowledges the request as successful"));
-		list.add(new Comment(10, "##       (only messages that were written to the now-dead leader but not yet"));
-		list.add(new Comment(11, "##       replicated will be lost)."));
-		list.add(new Comment(12, "##   -1: the producer gets an acknowledgement after all in-sync replicas have"));
-		list.add(new Comment(13, "##       received the data. This option provides the best durability, we"));
-		list.add(new Comment(14, "##       guarantee that no messages will be lost as long as at least one in"));
-		list.add(new Comment(15, "##       sync replica remains."));
-		keyValuePairList.add(new KeyValuePair(5, KV_REQUIRED_ACKS, null, null, null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "##  The total number of times to retry sending a message"));
-		keyValuePairList.add(new KeyValuePair(6, KV_MAX_RETRY, null, null, null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Optional SSL Config"));
-		keyValuePairList.add(new KeyValuePair(7, KV_SSL_CA, null, "# ", null, list));
-    
-		keyValuePairList.add(new KeyValuePair(8, KV_SSL_CERT, null, "# ", null, null));
-
-		keyValuePairList.add(new KeyValuePair(9, KV_SSL_KEY, null, "# ", null, null));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Use SSL but skip chain & host verification"));
-		keyValuePairList.add(new KeyValuePair(10, KV_INSECURE_SKIP_VERIFY, null, "# ", null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Optional SASL Config"));
-		keyValuePairList.add(new KeyValuePair(11, KV_SASL_USERNAME, null, "# ", null, list));
-    
-		keyValuePairList.add(new KeyValuePair(12, KV_SASL_PASSWORD, null, "# ", null, null));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Data format to output."));
-		list.add(new Comment(3, "## Each data format has its own unique set of configuration options, read"));
-		list.add(new Comment(4, "## more about them here:"));
-		list.add(new Comment(5, "## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md"));
-		keyValuePairList.add(new KeyValuePair(13, KV_DATA_FORMAT, null, null, null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("OutputsKafka { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.outputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class OutputsKafka extends Output implements Serializable
+{
+	private static final long serialVersionUID = 2580177063846320762L;
+	
+private static final String DEFINITION_TEXT = "# Configuration for the Kafka server to send metrics to";
+private static final String SIMPLE_NAME = "outputs.kafka";
+private static final String FULL_NAME = "[[outputs.kafka]]";
+private static final String KV_BROKERS = "brokers";
+private static final String KV_TOPIC = "topic";
+private static final String KV_ROUTING_TAG = "routing_tag";
+private static final String KV_COMPRESSION_CODEC = "compression_codec";
+private static final String KV_REQUIRED_ACKS = "required_acks";
+private static final String KV_MAX_RETRY = "max_retry";
+private static final String KV_SSL_CA = "ssl_ca";
+private static final String KV_SSL_CERT = "ssl_cert";
+private static final String KV_SSL_KEY = "ssl_key";
+private static final String KV_INSECURE_SKIP_VERIFY = "insecure_skip_verify";
+private static final String KV_SASL_USERNAME = "sasl_username";
+private static final String KV_SASL_PASSWORD = "sasl_password";
+private static final String KV_DATA_FORMAT = "data_format";
+
+  
+	public OutputsKafka() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public OutputsKafka(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "## URLs of kafka brokers"));
+		keyValuePairList.add(new KeyValuePair(1, KV_BROKERS, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Kafka topic for producer messages"));
+		keyValuePairList.add(new KeyValuePair(2, KV_TOPIC, null, null, null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Telegraf tag to use as a routing key"));
+		list.add(new Comment(2, "##  ie, if this tag exists, its value will be used as the routing key"));
+		keyValuePairList.add(new KeyValuePair(3, KV_ROUTING_TAG, null, null, null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## CompressionCodec represents the various compression codecs recognized by"));
+		list.add(new Comment(3, "## Kafka in messages."));
+		list.add(new Comment(4, "##  0 : No compression"));
+		list.add(new Comment(5, "##  1 : Gzip compression"));
+		list.add(new Comment(6, "##  2 : Snappy compression"));
+		keyValuePairList.add(new KeyValuePair(4, KV_COMPRESSION_CODEC, null, null, null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "##  RequiredAcks is used in Produce Requests to tell the broker how many"));
+		list.add(new Comment(3, "##  replica acknowledgements it must see before responding"));
+		list.add(new Comment(4, "##   0 : the producer never waits for an acknowledgement from the broker."));
+		list.add(new Comment(5, "##       This option provides the lowest latency but the weakest durability"));
+		list.add(new Comment(6, "##       guarantees (some data will be lost when a server fails)."));
+		list.add(new Comment(7, "##   1 : the producer gets an acknowledgement after the leader replica has"));
+		list.add(new Comment(8, "##       received the data. This option provides better durability as the"));
+		list.add(new Comment(9, "##       client waits until the server acknowledges the request as successful"));
+		list.add(new Comment(10, "##       (only messages that were written to the now-dead leader but not yet"));
+		list.add(new Comment(11, "##       replicated will be lost)."));
+		list.add(new Comment(12, "##   -1: the producer gets an acknowledgement after all in-sync replicas have"));
+		list.add(new Comment(13, "##       received the data. This option provides the best durability, we"));
+		list.add(new Comment(14, "##       guarantee that no messages will be lost as long as at least one in"));
+		list.add(new Comment(15, "##       sync replica remains."));
+		keyValuePairList.add(new KeyValuePair(5, KV_REQUIRED_ACKS, null, null, null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "##  The total number of times to retry sending a message"));
+		keyValuePairList.add(new KeyValuePair(6, KV_MAX_RETRY, null, null, null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Optional SSL Config"));
+		keyValuePairList.add(new KeyValuePair(7, KV_SSL_CA, null, "# ", null, list));
+    
+		keyValuePairList.add(new KeyValuePair(8, KV_SSL_CERT, null, "# ", null, null));
+
+		keyValuePairList.add(new KeyValuePair(9, KV_SSL_KEY, null, "# ", null, null));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Use SSL but skip chain & host verification"));
+		keyValuePairList.add(new KeyValuePair(10, KV_INSECURE_SKIP_VERIFY, null, "# ", null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Optional SASL Config"));
+		keyValuePairList.add(new KeyValuePair(11, KV_SASL_USERNAME, null, "# ", null, list));
+    
+		keyValuePairList.add(new KeyValuePair(12, KV_SASL_PASSWORD, null, "# ", null, null));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Data format to output."));
+		list.add(new Comment(3, "## Each data format has its own unique set of configuration options, read"));
+		list.add(new Comment(4, "## more about them here:"));
+		list.add(new Comment(5, "## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md"));
+		keyValuePairList.add(new KeyValuePair(13, KV_DATA_FORMAT, null, null, null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("OutputsKafka { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsKinesis.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsKinesis.java
index a1f5293140dbbf7f2e96db2ba2ebd4109416788a..0b1bc7b5ce05c2ee00ee6ccf17053015917a2f31 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsKinesis.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsKinesis.java
@@ -1,121 +1,121 @@
-package eu.decideh2020.telegraf.components.outputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class OutputsKinesis extends Output implements Serializable
-{
-	private static final long serialVersionUID = -9002871221414370972L;
-	
-	private static final String DEFINITION_TEXT = "# Configuration for the AWS Kinesis output.";
-	private static final String SIMPLE_NAME = "outputs.kinesis";
-	private static final String FULL_NAME = "[[outputs.kinesis]]";
-	private static final String KV_REGION = "region";
-	private static final String KV_ACCESS_KEY = "access_key";
-	private static final String KV_SECRET_KEY = "secret_key";
-	private static final String KV_TOKEN = "token";
-	private static final String KV_ROLE_ARN = "role_arn";
-	private static final String KV_PROFILE = "profile";
-	private static final String KV_SHARED_CREDENTIAL_FILE = "shared_credential_file";
-	private static final String KV_STREAMNAME = "streamname";
-	private static final String KV_PARTITIONKEY = "partitionkey";
-	private static final String KV_USE_RANDOM_PARTITIONKEY = "use_random_partitionkey";
-	private static final String KV_DATA_FORMAT = "data_format";
-	private static final String KV_DEBUG = "debug";
-  
-	public OutputsKinesis() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public OutputsKinesis(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-	
-  
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "## Amazon REGION of kinesis endpoint."));
-		keyValuePairList.add(new KeyValuePair(1, KV_REGION, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Amazon Credentials"));
-		list.add(new Comment(3, "## Credentials are loaded in the following order"));
-		list.add(new Comment(4, "## 1) Assumed credentials via STS if role_arn is specified"));
-		list.add(new Comment(5, "## 2) explicit credentials from 'access_key' and 'secret_key'"));
-		list.add(new Comment(6, "## 3) shared profile from 'profile'"));
-		list.add(new Comment(7, "## 4) environment variables"));
-		list.add(new Comment(8, "## 5) shared credentials file"));
-		list.add(new Comment(9, "## 6) EC2 Instance Profile"));
-		keyValuePairList.add(new KeyValuePair(2, KV_ACCESS_KEY, null, "# ", null, list));
-		    
-		keyValuePairList.add(new KeyValuePair(3, KV_SECRET_KEY, null, "# ", null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(4, KV_TOKEN, null, "# ", null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(5, KV_ROLE_ARN, null, "# ", null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(6, KV_PROFILE, null, "# ", null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(7, KV_SHARED_CREDENTIAL_FILE, null, "# ", null, null));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Kinesis StreamName must exist prior to starting telegraf."));
-		keyValuePairList.add(new KeyValuePair(8, KV_STREAMNAME, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## PartitionKey as used for sharding data."));
-		keyValuePairList.add(new KeyValuePair(9, KV_PARTITIONKEY, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## If set the paritionKey will be a random UUID on every put."));
-		list.add(new Comment(2, "## This allows for scaling across multiple shards in a stream."));
-		list.add(new Comment(3, "## This will cause issues with ordering."));
-		keyValuePairList.add(new KeyValuePair(10, KV_USE_RANDOM_PARTITIONKEY, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Data format to output."));
-		list.add(new Comment(3, "## Each data format has its own unique set of configuration options, read"));
-		list.add(new Comment(4, "## more about them here:"));
-		list.add(new Comment(5, "## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md"));
-		keyValuePairList.add(new KeyValuePair(11, KV_DATA_FORMAT, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## debug will show upstream aws messages."));
-		keyValuePairList.add(new KeyValuePair(12, KV_DEBUG, null, null, null, list));
-	}
-	
-  
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("OutputsKinesis { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.outputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class OutputsKinesis extends Output implements Serializable
+{
+	private static final long serialVersionUID = -9002871221414370972L;
+	
+	private static final String DEFINITION_TEXT = "# Configuration for the AWS Kinesis output.";
+	private static final String SIMPLE_NAME = "outputs.kinesis";
+	private static final String FULL_NAME = "[[outputs.kinesis]]";
+	private static final String KV_REGION = "region";
+	private static final String KV_ACCESS_KEY = "access_key";
+	private static final String KV_SECRET_KEY = "secret_key";
+	private static final String KV_TOKEN = "token";
+	private static final String KV_ROLE_ARN = "role_arn";
+	private static final String KV_PROFILE = "profile";
+	private static final String KV_SHARED_CREDENTIAL_FILE = "shared_credential_file";
+	private static final String KV_STREAMNAME = "streamname";
+	private static final String KV_PARTITIONKEY = "partitionkey";
+	private static final String KV_USE_RANDOM_PARTITIONKEY = "use_random_partitionkey";
+	private static final String KV_DATA_FORMAT = "data_format";
+	private static final String KV_DEBUG = "debug";
+  
+	public OutputsKinesis() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public OutputsKinesis(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+	
+  
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "## Amazon REGION of kinesis endpoint."));
+		keyValuePairList.add(new KeyValuePair(1, KV_REGION, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Amazon Credentials"));
+		list.add(new Comment(3, "## Credentials are loaded in the following order"));
+		list.add(new Comment(4, "## 1) Assumed credentials via STS if role_arn is specified"));
+		list.add(new Comment(5, "## 2) explicit credentials from 'access_key' and 'secret_key'"));
+		list.add(new Comment(6, "## 3) shared profile from 'profile'"));
+		list.add(new Comment(7, "## 4) environment variables"));
+		list.add(new Comment(8, "## 5) shared credentials file"));
+		list.add(new Comment(9, "## 6) EC2 Instance Profile"));
+		keyValuePairList.add(new KeyValuePair(2, KV_ACCESS_KEY, null, "# ", null, list));
+		    
+		keyValuePairList.add(new KeyValuePair(3, KV_SECRET_KEY, null, "# ", null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(4, KV_TOKEN, null, "# ", null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(5, KV_ROLE_ARN, null, "# ", null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(6, KV_PROFILE, null, "# ", null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(7, KV_SHARED_CREDENTIAL_FILE, null, "# ", null, null));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Kinesis StreamName must exist prior to starting telegraf."));
+		keyValuePairList.add(new KeyValuePair(8, KV_STREAMNAME, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## PartitionKey as used for sharding data."));
+		keyValuePairList.add(new KeyValuePair(9, KV_PARTITIONKEY, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## If set the paritionKey will be a random UUID on every put."));
+		list.add(new Comment(2, "## This allows for scaling across multiple shards in a stream."));
+		list.add(new Comment(3, "## This will cause issues with ordering."));
+		keyValuePairList.add(new KeyValuePair(10, KV_USE_RANDOM_PARTITIONKEY, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Data format to output."));
+		list.add(new Comment(3, "## Each data format has its own unique set of configuration options, read"));
+		list.add(new Comment(4, "## more about them here:"));
+		list.add(new Comment(5, "## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md"));
+		keyValuePairList.add(new KeyValuePair(11, KV_DATA_FORMAT, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## debug will show upstream aws messages."));
+		keyValuePairList.add(new KeyValuePair(12, KV_DEBUG, null, null, null, list));
+	}
+	
+  
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("OutputsKinesis { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsLibrato.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsLibrato.java
index a48bf31a3b87860c018a0dc1579600a77f7b03b9..77bebbad695d25d013e72c2acfaba0ce74cc5311 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsLibrato.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsLibrato.java
@@ -1,85 +1,85 @@
-package eu.decideh2020.telegraf.components.outputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class OutputsLibrato extends Output implements Serializable
-{
-	private static final long serialVersionUID = -5161486522505760590L;
-	
-	private static final String DEFINITION_TEXT = "# Configuration for Librato API to send metrics to.";
-	private static final String SIMPLE_NAME = "outputs.librato";
-	private static final String FULL_NAME = "[[outputs.librato]]";
-	private static final String KV_API_USER = "api_user";
-	private static final String KV_API_TOKEN = "api_token";
-	private static final String KV_DEBUG = "debug";
-	private static final String KV_TIMEOUT = "timeout";
-	private static final String KV_TEMPLATE = "template";
-  
-	
-	public OutputsLibrato() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public OutputsLibrato(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-	
-  
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "## Librator API Docs"));
-		list.add(new Comment(2, "## http://dev.librato.com/v1/metrics-authentication"));
-		list.add(new Comment(3, "## Librato API user"));
-		keyValuePairList.add(new KeyValuePair(1, KV_API_USER, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Librato API token"));
-		keyValuePairList.add(new KeyValuePair(2, KV_API_TOKEN, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Debug"));
-		keyValuePairList.add(new KeyValuePair(3, KV_DEBUG, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Connection timeout."));
-		keyValuePairList.add(new KeyValuePair(4, KV_TIMEOUT, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Output source Template (same as graphite buckets)"));
-		list.add(new Comment(2, "## see https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md#graphite"));
-		list.add(new Comment(3, "## This template is used in librato's source (not metric's name)"));
-		keyValuePairList.add(new KeyValuePair(5, KV_TEMPLATE, null, null, null, list));
-	}
-  
-	
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("OutputsLibrato { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.outputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class OutputsLibrato extends Output implements Serializable
+{
+	private static final long serialVersionUID = -5161486522505760590L;
+	
+	private static final String DEFINITION_TEXT = "# Configuration for Librato API to send metrics to.";
+	private static final String SIMPLE_NAME = "outputs.librato";
+	private static final String FULL_NAME = "[[outputs.librato]]";
+	private static final String KV_API_USER = "api_user";
+	private static final String KV_API_TOKEN = "api_token";
+	private static final String KV_DEBUG = "debug";
+	private static final String KV_TIMEOUT = "timeout";
+	private static final String KV_TEMPLATE = "template";
+  
+	
+	public OutputsLibrato() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public OutputsLibrato(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+	
+  
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "## Librator API Docs"));
+		list.add(new Comment(2, "## http://dev.librato.com/v1/metrics-authentication"));
+		list.add(new Comment(3, "## Librato API user"));
+		keyValuePairList.add(new KeyValuePair(1, KV_API_USER, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Librato API token"));
+		keyValuePairList.add(new KeyValuePair(2, KV_API_TOKEN, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Debug"));
+		keyValuePairList.add(new KeyValuePair(3, KV_DEBUG, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Connection timeout."));
+		keyValuePairList.add(new KeyValuePair(4, KV_TIMEOUT, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Output source Template (same as graphite buckets)"));
+		list.add(new Comment(2, "## see https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md#graphite"));
+		list.add(new Comment(3, "## This template is used in librato's source (not metric's name)"));
+		keyValuePairList.add(new KeyValuePair(5, KV_TEMPLATE, null, null, null, list));
+	}
+  
+	
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("OutputsLibrato { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsMQTT.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsMQTT.java
index cbd1bc319bdf2959c71428b480b85b7e5dd690b2..0a4e0a6defb705211a34a42cade877ac2c9f6f5f 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsMQTT.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsMQTT.java
@@ -1,108 +1,108 @@
-package eu.decideh2020.telegraf.components.outputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class OutputsMQTT extends Output implements Serializable
-{
-	private static final long serialVersionUID = -5485011951749751247L;
-	
-	private static final String DEFINITION_TEXT = "# Configuration for MQTT server to send metrics to";
-	private static final String SIMPLE_NAME = "outputs.mqtt";
-	private static final String FULL_NAME = "[[outputs.mqtt]]";
-	private static final String KV_SERVERS = "servers";
-	private static final String KV_TOPIC_PREFIX = "topic_prefix";
-	private static final String KV_USERNAME = "username";
-	private static final String KV_PASSWORD = "password";
-	private static final String KV_CLIENT_ID = "client_id";
-	private static final String KV_SSL_CA = "ssl_ca";
-	private static final String KV_SSL_CERT = "ssl_cert";
-	private static final String KV_SSL_KEY = "ssl_key";
-	private static final String KV_INSECURE_SKIP_VERIFY = "insecure_skip_verify";
-	private static final String KV_DATA_FORMAT = "data_format";
-	
-  
-	public OutputsMQTT() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public OutputsMQTT(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		keyValuePairList.add(new KeyValuePair(1, KV_SERVERS, null, null, "# required", null));
-    
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## MQTT outputs send metrics to this topic format"));
-		list.add(new Comment(3, "##    \"<topic_prefix>/<hostname>/<pluginname>/\""));
-		list.add(new Comment(4, "##   ex: prefix/web01.example.com/mem"));
-		keyValuePairList.add(new KeyValuePair(2, KV_TOPIC_PREFIX, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## username and password to connect MQTT server."));
-		keyValuePairList.add(new KeyValuePair(3, KV_USERNAME, null, "# ", null, list));
-		    
-		keyValuePairList.add(new KeyValuePair(4, KV_PASSWORD, null, "# ", null, null));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## client ID, if not set a random ID is generated"));
-		keyValuePairList.add(new KeyValuePair(3, KV_CLIENT_ID, null, "# ", null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Optional SSL Config"));
-		keyValuePairList.add(new KeyValuePair(4, KV_SSL_CA, null, "# ", null, list));
-    
-		keyValuePairList.add(new KeyValuePair(5, KV_SSL_CERT, null, "# ", null, null));
-    
-		keyValuePairList.add(new KeyValuePair(6, KV_SSL_KEY, null, "# ", null, null));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Use SSL but skip chain & host verification"));
-		keyValuePairList.add(new KeyValuePair(7, KV_INSECURE_SKIP_VERIFY, null, "# ", null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Data format to output."));
-		list.add(new Comment(3, "## Each data format has its own unique set of configuration options, read"));
-		list.add(new Comment(4, "## more about them here:"));
-		list.add(new Comment(5, "## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md"));
-		keyValuePairList.add(new KeyValuePair(8, KV_DATA_FORMAT, null, null, null, list));
-	}
-	
-  
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("OutputsMQTT { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.outputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class OutputsMQTT extends Output implements Serializable
+{
+	private static final long serialVersionUID = -5485011951749751247L;
+	
+	private static final String DEFINITION_TEXT = "# Configuration for MQTT server to send metrics to";
+	private static final String SIMPLE_NAME = "outputs.mqtt";
+	private static final String FULL_NAME = "[[outputs.mqtt]]";
+	private static final String KV_SERVERS = "servers";
+	private static final String KV_TOPIC_PREFIX = "topic_prefix";
+	private static final String KV_USERNAME = "username";
+	private static final String KV_PASSWORD = "password";
+	private static final String KV_CLIENT_ID = "client_id";
+	private static final String KV_SSL_CA = "ssl_ca";
+	private static final String KV_SSL_CERT = "ssl_cert";
+	private static final String KV_SSL_KEY = "ssl_key";
+	private static final String KV_INSECURE_SKIP_VERIFY = "insecure_skip_verify";
+	private static final String KV_DATA_FORMAT = "data_format";
+	
+  
+	public OutputsMQTT() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public OutputsMQTT(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		keyValuePairList.add(new KeyValuePair(1, KV_SERVERS, null, null, "# required", null));
+    
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## MQTT outputs send metrics to this topic format"));
+		list.add(new Comment(3, "##    \"<topic_prefix>/<hostname>/<pluginname>/\""));
+		list.add(new Comment(4, "##   ex: prefix/web01.example.com/mem"));
+		keyValuePairList.add(new KeyValuePair(2, KV_TOPIC_PREFIX, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## username and password to connect MQTT server."));
+		keyValuePairList.add(new KeyValuePair(3, KV_USERNAME, null, "# ", null, list));
+		    
+		keyValuePairList.add(new KeyValuePair(4, KV_PASSWORD, null, "# ", null, null));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## client ID, if not set a random ID is generated"));
+		keyValuePairList.add(new KeyValuePair(3, KV_CLIENT_ID, null, "# ", null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Optional SSL Config"));
+		keyValuePairList.add(new KeyValuePair(4, KV_SSL_CA, null, "# ", null, list));
+    
+		keyValuePairList.add(new KeyValuePair(5, KV_SSL_CERT, null, "# ", null, null));
+    
+		keyValuePairList.add(new KeyValuePair(6, KV_SSL_KEY, null, "# ", null, null));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Use SSL but skip chain & host verification"));
+		keyValuePairList.add(new KeyValuePair(7, KV_INSECURE_SKIP_VERIFY, null, "# ", null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Data format to output."));
+		list.add(new Comment(3, "## Each data format has its own unique set of configuration options, read"));
+		list.add(new Comment(4, "## more about them here:"));
+		list.add(new Comment(5, "## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md"));
+		keyValuePairList.add(new KeyValuePair(8, KV_DATA_FORMAT, null, null, null, list));
+	}
+	
+  
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("OutputsMQTT { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsNATS.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsNATS.java
index 0ce395b39ddbb297cea692ce698a209740edc34f..d808bd55f2d77eb4e5d700806574c35069cc6882 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsNATS.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsNATS.java
@@ -1,100 +1,100 @@
-package eu.decideh2020.telegraf.components.outputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class OutputsNATS extends Output implements Serializable
-{
-	private static final long serialVersionUID = 2888150095380607320L;
-	
-	private static final String DEFINITION_TEXT = "# Send telegraf measurements to NATS";
-	private static final String SIMPLE_NAME = "outputs.nats";
-	private static final String FULL_NAME = "[[outputs.nats]]";
-	private static final String KV_SERVERS = "servers";
-	private static final String KV_USERNAME = "username";
-	private static final String KV_PASSWORD = "password";
-	private static final String KV_SUBJECT = "subject";
-	private static final String KV_SSL_CA = "ssl_ca";
-	private static final String KV_SSL_CERT = "ssl_cert";
-	private static final String KV_SSL_KEY = "ssl_key";
-	private static final String KV_INSECURE_SKIP_VERIFY = "insecure_skip_verify";
-	private static final String KV_DATA_FORMAT = "data_format";
-  
-
-	public OutputsNATS() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public OutputsNATS(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-	
-  
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "## URLs of NATS servers"));
-		keyValuePairList.add(new KeyValuePair(1, KV_SERVERS, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Optional credentials"));
-		keyValuePairList.add(new KeyValuePair(2, KV_USERNAME, null, "# ", null, list));
-		    
-		keyValuePairList.add(new KeyValuePair(3, KV_PASSWORD, null, "# ", null, null));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## NATS subject for producer messages"));
-		keyValuePairList.add(new KeyValuePair(4, KV_SUBJECT, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Optional SSL Config"));
-		keyValuePairList.add(new KeyValuePair(5, KV_SSL_CA, null, "# ", null, list));
-		    
-		keyValuePairList.add(new KeyValuePair(6, KV_SSL_CERT, null, "# ", null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(7, KV_SSL_KEY, null, "# ", null, null));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Use SSL but skip chain & host verification"));
-		keyValuePairList.add(new KeyValuePair(8, KV_INSECURE_SKIP_VERIFY, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Data format to output."));
-		list.add(new Comment(3, "## Each data format has its own unique set of configuration options, read"));
-		list.add(new Comment(4, "## more about them here:"));
-		list.add(new Comment(5, "## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md"));
-		keyValuePairList.add(new KeyValuePair(9, KV_DATA_FORMAT, null, null, null, list));
-	}
-	
-  
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("OutputsNATS { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.outputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class OutputsNATS extends Output implements Serializable
+{
+	private static final long serialVersionUID = 2888150095380607320L;
+	
+	private static final String DEFINITION_TEXT = "# Send telegraf measurements to NATS";
+	private static final String SIMPLE_NAME = "outputs.nats";
+	private static final String FULL_NAME = "[[outputs.nats]]";
+	private static final String KV_SERVERS = "servers";
+	private static final String KV_USERNAME = "username";
+	private static final String KV_PASSWORD = "password";
+	private static final String KV_SUBJECT = "subject";
+	private static final String KV_SSL_CA = "ssl_ca";
+	private static final String KV_SSL_CERT = "ssl_cert";
+	private static final String KV_SSL_KEY = "ssl_key";
+	private static final String KV_INSECURE_SKIP_VERIFY = "insecure_skip_verify";
+	private static final String KV_DATA_FORMAT = "data_format";
+  
+
+	public OutputsNATS() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public OutputsNATS(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+	
+  
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "## URLs of NATS servers"));
+		keyValuePairList.add(new KeyValuePair(1, KV_SERVERS, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Optional credentials"));
+		keyValuePairList.add(new KeyValuePair(2, KV_USERNAME, null, "# ", null, list));
+		    
+		keyValuePairList.add(new KeyValuePair(3, KV_PASSWORD, null, "# ", null, null));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## NATS subject for producer messages"));
+		keyValuePairList.add(new KeyValuePair(4, KV_SUBJECT, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Optional SSL Config"));
+		keyValuePairList.add(new KeyValuePair(5, KV_SSL_CA, null, "# ", null, list));
+		    
+		keyValuePairList.add(new KeyValuePair(6, KV_SSL_CERT, null, "# ", null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(7, KV_SSL_KEY, null, "# ", null, null));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Use SSL but skip chain & host verification"));
+		keyValuePairList.add(new KeyValuePair(8, KV_INSECURE_SKIP_VERIFY, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Data format to output."));
+		list.add(new Comment(3, "## Each data format has its own unique set of configuration options, read"));
+		list.add(new Comment(4, "## more about them here:"));
+		list.add(new Comment(5, "## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md"));
+		keyValuePairList.add(new KeyValuePair(9, KV_DATA_FORMAT, null, null, null, list));
+	}
+	
+  
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("OutputsNATS { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsNSQ.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsNSQ.java
index fac74ebcb03b2f8f22e282d052327574ce6db920..890325ad42a029599df0a83487c54e5437eae092 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsNSQ.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsNSQ.java
@@ -1,75 +1,75 @@
-package eu.decideh2020.telegraf.components.outputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class OutputsNSQ extends Output implements Serializable
-{
-	private static final long serialVersionUID = 5488659703522091720L;
-	
-	private static final String DEFINITION_TEXT = "# Send telegraf measurements to NSQD";
-	private static final String SIMPLE_NAME = "outputs.nsq";
-	private static final String FULL_NAME = "[[outputs.nsq]]";
-	private static final String KV_SERVER = "server";
-	private static final String KV_TOPIC = "topic";
-	private static final String KV_DATA_FORMAT = "data_format";
-  
-
-	public OutputsNSQ() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public OutputsNSQ(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-	
-  
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "## Location of nsqd instance listening on TCP"));
-		keyValuePairList.add(new KeyValuePair(1, KV_SERVER, null, null, null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## NSQ topic for producer messages"));
-		keyValuePairList.add(new KeyValuePair(2, KV_TOPIC, null, null, null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Data format to output."));
-		list.add(new Comment(3, "## Each data format has its own unique set of configuration options, read"));
-		list.add(new Comment(4, "## more about them here:"));
-		list.add(new Comment(5, "## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md"));
-		keyValuePairList.add(new KeyValuePair(3, KV_DATA_FORMAT, null, null, null, list));
-	}
-	
-  
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("OutputsNSQ { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.outputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class OutputsNSQ extends Output implements Serializable
+{
+	private static final long serialVersionUID = 5488659703522091720L;
+	
+	private static final String DEFINITION_TEXT = "# Send telegraf measurements to NSQD";
+	private static final String SIMPLE_NAME = "outputs.nsq";
+	private static final String FULL_NAME = "[[outputs.nsq]]";
+	private static final String KV_SERVER = "server";
+	private static final String KV_TOPIC = "topic";
+	private static final String KV_DATA_FORMAT = "data_format";
+  
+
+	public OutputsNSQ() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public OutputsNSQ(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+	
+  
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "## Location of nsqd instance listening on TCP"));
+		keyValuePairList.add(new KeyValuePair(1, KV_SERVER, null, null, null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## NSQ topic for producer messages"));
+		keyValuePairList.add(new KeyValuePair(2, KV_TOPIC, null, null, null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Data format to output."));
+		list.add(new Comment(3, "## Each data format has its own unique set of configuration options, read"));
+		list.add(new Comment(4, "## more about them here:"));
+		list.add(new Comment(5, "## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md"));
+		keyValuePairList.add(new KeyValuePair(3, KV_DATA_FORMAT, null, null, null, list));
+	}
+	
+  
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("OutputsNSQ { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsOpenTSDB.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsOpenTSDB.java
index bdf61c5a8785817784c4d1dde1a112f294d51f12..eb21c160fa1f47e78ef6ccf35b061c8793ad00b2 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsOpenTSDB.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsOpenTSDB.java
@@ -1,88 +1,88 @@
-package eu.decideh2020.telegraf.components.outputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class OutputsOpenTSDB extends Output implements Serializable
-{
-	private static final long serialVersionUID = 3448019110339429276L;
-	
-	private static final String DEFINITION_TEXT = "# Configuration for OpenTSDB server to send metrics to";
-	private static final String SIMPLE_NAME = "outputs.opentsdb";
-	private static final String FULL_NAME = "[[outputs.opentsdb]]";
-	private static final String KV_PREFIX = "prefix";
-	private static final String KV_HOST = "host";
-	private static final String KV_PORT = "port";
-	private static final String KV_HTTPBATCHSIZE = "httpBatchSize";
-	private static final String KV_DEBUG = "debug";
-	
-  
-	public OutputsOpenTSDB() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public OutputsOpenTSDB(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-  
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "## prefix for metrics keys"));
-		keyValuePairList.add(new KeyValuePair(1, KV_PREFIX, null, null, null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## DNS name of the OpenTSDB server"));
-		list.add(new Comment(3, "## Using \"opentsdb.example.com\" or \"tcp://opentsdb.example.com\" will use the"));
-		list.add(new Comment(4, "## telnet API. \"http://opentsdb.example.com\" will use the Http API."));
-		keyValuePairList.add(new KeyValuePair(2, KV_HOST, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Port of the OpenTSDB server"));
-		keyValuePairList.add(new KeyValuePair(3, KV_PORT, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Number of data points to send to OpenTSDB in Http requests."));
-		list.add(new Comment(3, "## Not used with telnet API."));
-		keyValuePairList.add(new KeyValuePair(4, KV_HTTPBATCHSIZE, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		
-		keyValuePairList.add(new KeyValuePair(5, KV_DEBUG, null, null, null, list));
-	}
-	
-  
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("OutputsOpenTSDB { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.outputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class OutputsOpenTSDB extends Output implements Serializable
+{
+	private static final long serialVersionUID = 3448019110339429276L;
+	
+	private static final String DEFINITION_TEXT = "# Configuration for OpenTSDB server to send metrics to";
+	private static final String SIMPLE_NAME = "outputs.opentsdb";
+	private static final String FULL_NAME = "[[outputs.opentsdb]]";
+	private static final String KV_PREFIX = "prefix";
+	private static final String KV_HOST = "host";
+	private static final String KV_PORT = "port";
+	private static final String KV_HTTPBATCHSIZE = "httpBatchSize";
+	private static final String KV_DEBUG = "debug";
+	
+  
+	public OutputsOpenTSDB() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public OutputsOpenTSDB(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+  
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "## prefix for metrics keys"));
+		keyValuePairList.add(new KeyValuePair(1, KV_PREFIX, null, null, null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## DNS name of the OpenTSDB server"));
+		list.add(new Comment(3, "## Using \"opentsdb.example.com\" or \"tcp://opentsdb.example.com\" will use the"));
+		list.add(new Comment(4, "## telnet API. \"http://opentsdb.example.com\" will use the Http API."));
+		keyValuePairList.add(new KeyValuePair(2, KV_HOST, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Port of the OpenTSDB server"));
+		keyValuePairList.add(new KeyValuePair(3, KV_PORT, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Number of data points to send to OpenTSDB in Http requests."));
+		list.add(new Comment(3, "## Not used with telnet API."));
+		keyValuePairList.add(new KeyValuePair(4, KV_HTTPBATCHSIZE, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		
+		keyValuePairList.add(new KeyValuePair(5, KV_DEBUG, null, null, null, list));
+	}
+	
+  
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("OutputsOpenTSDB { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsPrometheusClient.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsPrometheusClient.java
index 59918690387e6e65dd66d1d9bbbbd2fdf8452a10..8d118843902c6120db0e2ea9347eb8e8bf67753c 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsPrometheusClient.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsPrometheusClient.java
@@ -1,67 +1,67 @@
-package eu.decideh2020.telegraf.components.outputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class OutputsPrometheusClient extends Output implements Serializable
-{
-	private static final long serialVersionUID = -6592275118022501556L;
-	
-	private static final String DEFINITION_TEXT = "# Configuration for the Prometheus client to spawn";
-	private static final String SIMPLE_NAME = "outputs.prometheus_client";
-	private static final String FULL_NAME = "[[outputs.prometheus_client]]";
-	private static final String KV_LISTEN = "listen";
-	private static final String KV_EXPIRATION_INTERVAL = "expiration_interval";
-  
-	
-	public OutputsPrometheusClient() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public OutputsPrometheusClient(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-	
-  
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "## Address to listen on"));
-		keyValuePairList.add(new KeyValuePair(1, KV_LISTEN, null, "# ", null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Interval to expire metrics and not deliver to prometheus, 0 == no expiration"));
-		keyValuePairList.add(new KeyValuePair(2, KV_EXPIRATION_INTERVAL, null, "# ", null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("OutputsPrometheusClient { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.outputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class OutputsPrometheusClient extends Output implements Serializable
+{
+	private static final long serialVersionUID = -6592275118022501556L;
+	
+	private static final String DEFINITION_TEXT = "# Configuration for the Prometheus client to spawn";
+	private static final String SIMPLE_NAME = "outputs.prometheus_client";
+	private static final String FULL_NAME = "[[outputs.prometheus_client]]";
+	private static final String KV_LISTEN = "listen";
+	private static final String KV_EXPIRATION_INTERVAL = "expiration_interval";
+  
+	
+	public OutputsPrometheusClient() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public OutputsPrometheusClient(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+	
+  
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "## Address to listen on"));
+		keyValuePairList.add(new KeyValuePair(1, KV_LISTEN, null, "# ", null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Interval to expire metrics and not deliver to prometheus, 0 == no expiration"));
+		keyValuePairList.add(new KeyValuePair(2, KV_EXPIRATION_INTERVAL, null, "# ", null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("OutputsPrometheusClient { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsRiemann.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsRiemann.java
index 5d2b69dfd0af9b959d7aefbed5e214c85dffab4c..c24a2f530d47a985cb3dc410c3955a5c0d5c77b0 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsRiemann.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsRiemann.java
@@ -1,112 +1,112 @@
-package eu.decideh2020.telegraf.components.outputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-public final class OutputsRiemann extends Output implements Serializable
-{
-	private static final long serialVersionUID = -9035026810997700581L;
-	
-	private static final String DEFINITION_TEXT = "# Configuration for the Riemann server to send metrics to";
-	private static final String SIMPLE_NAME = "outputs.riemann";
-	private static final String FULL_NAME = "[[outputs.riemann]]";
-	private static final String KV_URL = "url";
-	private static final String KV_TTL = "ttl";
-	private static final String KV_SEPARATOR = "separator";
-	private static final String KV_MEASUREMENT_AS_ATTRIBUTE = "measurement_as_attribute";
-	private static final String KV_STRING_AS_STATE = "string_as_state";
-	private static final String KV_TAG_KEYS = "tag_keys";
-	private static final String KV_TAGS = "tags";
-	private static final String KV_DESCRIPTION_TEXT = "description_text";
-	private static final String KV_TIMEOUT = "timeout";
-
-  
-	public OutputsRiemann() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public OutputsRiemann(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-	
-  
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "## The full TCP or UDP URL of the Riemann server"));
-		keyValuePairList.add(new KeyValuePair(1, KV_URL, null, null, null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Riemann event TTL, floating-point time in seconds."));
-		list.add(new Comment(3, "## Defines how long that an event is considered valid for in Riemann"));
-		keyValuePairList.add(new KeyValuePair(2, KV_TTL, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Separator to use between measurement and field name in Riemann service name"));
-		list.add(new Comment(3, "## This does not have any effect if 'measurement_as_attribute' is set to 'true'"));
-		keyValuePairList.add(new KeyValuePair(3, KV_SEPARATOR, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Set measurement name as Riemann attribute 'measurement', instead of prepending it to the Riemann service name"));
-		keyValuePairList.add(new KeyValuePair(4, KV_MEASUREMENT_AS_ATTRIBUTE, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Send string metrics as Riemann event states."));
-		list.add(new Comment(3, "## Unless enabled all string metrics will be ignored"));
-		keyValuePairList.add(new KeyValuePair(5, KV_STRING_AS_STATE, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## A list of tag keys whose values get sent as Riemann tags."));
-		list.add(new Comment(3, "## If empty, all Telegraf tag values will be sent as tags"));
-		keyValuePairList.add(new KeyValuePair(6, KV_TAG_KEYS, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Additional Riemann tags to send."));
-		keyValuePairList.add(new KeyValuePair(7, KV_TAGS, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Description for Riemann event"));
-		keyValuePairList.add(new KeyValuePair(8, KV_DESCRIPTION_TEXT, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Riemann client write timeout, defaults to \"5s\" if not set."));
-		keyValuePairList.add(new KeyValuePair(9, KV_TIMEOUT, null, "# ", null, list));
-	}
-
-	
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("OutputsRiemann { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.outputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+public final class OutputsRiemann extends Output implements Serializable
+{
+	private static final long serialVersionUID = -9035026810997700581L;
+	
+	private static final String DEFINITION_TEXT = "# Configuration for the Riemann server to send metrics to";
+	private static final String SIMPLE_NAME = "outputs.riemann";
+	private static final String FULL_NAME = "[[outputs.riemann]]";
+	private static final String KV_URL = "url";
+	private static final String KV_TTL = "ttl";
+	private static final String KV_SEPARATOR = "separator";
+	private static final String KV_MEASUREMENT_AS_ATTRIBUTE = "measurement_as_attribute";
+	private static final String KV_STRING_AS_STATE = "string_as_state";
+	private static final String KV_TAG_KEYS = "tag_keys";
+	private static final String KV_TAGS = "tags";
+	private static final String KV_DESCRIPTION_TEXT = "description_text";
+	private static final String KV_TIMEOUT = "timeout";
+
+  
+	public OutputsRiemann() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public OutputsRiemann(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+	
+  
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "## The full TCP or UDP URL of the Riemann server"));
+		keyValuePairList.add(new KeyValuePair(1, KV_URL, null, null, null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Riemann event TTL, floating-point time in seconds."));
+		list.add(new Comment(3, "## Defines how long that an event is considered valid for in Riemann"));
+		keyValuePairList.add(new KeyValuePair(2, KV_TTL, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Separator to use between measurement and field name in Riemann service name"));
+		list.add(new Comment(3, "## This does not have any effect if 'measurement_as_attribute' is set to 'true'"));
+		keyValuePairList.add(new KeyValuePair(3, KV_SEPARATOR, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Set measurement name as Riemann attribute 'measurement', instead of prepending it to the Riemann service name"));
+		keyValuePairList.add(new KeyValuePair(4, KV_MEASUREMENT_AS_ATTRIBUTE, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Send string metrics as Riemann event states."));
+		list.add(new Comment(3, "## Unless enabled all string metrics will be ignored"));
+		keyValuePairList.add(new KeyValuePair(5, KV_STRING_AS_STATE, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## A list of tag keys whose values get sent as Riemann tags."));
+		list.add(new Comment(3, "## If empty, all Telegraf tag values will be sent as tags"));
+		keyValuePairList.add(new KeyValuePair(6, KV_TAG_KEYS, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Additional Riemann tags to send."));
+		keyValuePairList.add(new KeyValuePair(7, KV_TAGS, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Description for Riemann event"));
+		keyValuePairList.add(new KeyValuePair(8, KV_DESCRIPTION_TEXT, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Riemann client write timeout, defaults to \"5s\" if not set."));
+		keyValuePairList.add(new KeyValuePair(9, KV_TIMEOUT, null, "# ", null, list));
+	}
+
+	
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("OutputsRiemann { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsRiemannLegacy.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsRiemannLegacy.java
index de7ad74e621e3364d95e27732b9cebafd35c65fa..643f10a999b2bf05aabe94abb73ef7fddc9a2a86 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsRiemannLegacy.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsRiemannLegacy.java
@@ -1,71 +1,71 @@
-package eu.decideh2020.telegraf.components.outputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class OutputsRiemannLegacy extends Output implements Serializable
-{
-	private static final long serialVersionUID = -6437967165992378820L;
-  
-	private static final String DEFINITION_TEXT = "# Configuration for the Riemann server to send metrics to";
-	private static final String SIMPLE_NAME = "outputs.riemann_legacy";
-	private static final String FULL_NAME = "[[outputs.riemann_legacy]]";
-	private static final String KV_URL = "url";
-	private static final String KV_TRANSPORT = "transport";
-	private static final String KV_SEPARATOR = "separator";
-  
-	
-	public OutputsRiemannLegacy() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public OutputsRiemannLegacy(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-	
-  
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "## URL of server"));
-		keyValuePairList.add(new KeyValuePair(1, KV_URL, null, null, null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## transport protocol to use either tcp or udp"));
-		keyValuePairList.add(new KeyValuePair(2, KV_TRANSPORT, null, null, null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## separator to use between input name and field name in Riemann service name"));
-		keyValuePairList.add(new KeyValuePair(3, KV_SEPARATOR, null, null, null, list));
-	}
-	
-  
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("OutputsRiemannLegacy { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.outputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class OutputsRiemannLegacy extends Output implements Serializable
+{
+	private static final long serialVersionUID = -6437967165992378820L;
+  
+	private static final String DEFINITION_TEXT = "# Configuration for the Riemann server to send metrics to";
+	private static final String SIMPLE_NAME = "outputs.riemann_legacy";
+	private static final String FULL_NAME = "[[outputs.riemann_legacy]]";
+	private static final String KV_URL = "url";
+	private static final String KV_TRANSPORT = "transport";
+	private static final String KV_SEPARATOR = "separator";
+  
+	
+	public OutputsRiemannLegacy() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public OutputsRiemannLegacy(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+	
+  
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "## URL of server"));
+		keyValuePairList.add(new KeyValuePair(1, KV_URL, null, null, null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## transport protocol to use either tcp or udp"));
+		keyValuePairList.add(new KeyValuePair(2, KV_TRANSPORT, null, null, null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## separator to use between input name and field name in Riemann service name"));
+		keyValuePairList.add(new KeyValuePair(3, KV_SEPARATOR, null, null, null, list));
+	}
+	
+  
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("OutputsRiemannLegacy { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsSocketWriter.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsSocketWriter.java
index 9df7a61a5572b702375c982964ac431a3715827c..3cd76f57df44a6302dc89ce99100ed206edeee41 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsSocketWriter.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/outputs/OutputsSocketWriter.java
@@ -1,89 +1,89 @@
-package eu.decideh2020.telegraf.components.outputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class OutputsSocketWriter extends Output implements Serializable
-{
-	private static final long serialVersionUID = 1009955525001077912L;
-	
-	private static final String DEFINITION_TEXT = "# Generic socket writer capable of handling multiple socket types.";
-	private static final String SIMPLE_NAME = "outputs.socket_writer";
-	private static final String FULL_NAME = "[[outputs.socket_writer]]";
-	private static final String KV_ADDRESS = "address";
-	private static final String KV_KEEP_ALIVE_PERIOD = "keep_alive_period";
-	private static final String KV_DATA_FORMAT = "data_format";
-  
-
-	public OutputsSocketWriter() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public OutputsSocketWriter(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-	
-  
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "## URL to connect to. Examples:"));
-		list.add(new Comment(2, "##     \"tcp://127.0.0.1:8094\""));
-		list.add(new Comment(3, "##     \"tcp://example.com:http\""));
-		list.add(new Comment(4, "##     \"tcp4://127.0.0.1:8094\""));
-		list.add(new Comment(5, "##     \"tcp6://127.0.0.1:8094\""));
-		list.add(new Comment(6, "##     \"tcp6://[2001:db8::1]:8094\""));
-		list.add(new Comment(7, "##     \"udp://127.0.0.1:8094\""));
-		list.add(new Comment(8, "##     \"udp4://127.0.0.1:8094\""));
-		list.add(new Comment(9, "##     \"udp6://127.0.0.1:8094\""));
-		list.add(new Comment(10, "##     \"unix:///tmp/telegraf.sock\""));
-		list.add(new Comment(11, "##     \"unixgram:///tmp/telegraf.sock\""));
-		keyValuePairList.add(new KeyValuePair(1, KV_ADDRESS, null, "# ", null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Period between keep alive probes."));
-		list.add(new Comment(3, "## Only applies to TCP sockets."));
-		list.add(new Comment(4, "## 0 disables keep alive probes."));
-		list.add(new Comment(5, "## Defaults to the OS configuration."));
-		keyValuePairList.add(new KeyValuePair(2, KV_KEEP_ALIVE_PERIOD, null, "# ", null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Data format to generate."));
-		list.add(new Comment(3, "## Each data format has its own unique set of configuration options, read"));
-		list.add(new Comment(4, "## more about them here:"));
-		list.add(new Comment(5, "## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md"));
-		keyValuePairList.add(new KeyValuePair(3, KV_DATA_FORMAT, null, "# ", null, list));
-	}
-	
-  
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("OutputsSocketWriter { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.outputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class OutputsSocketWriter extends Output implements Serializable
+{
+	private static final long serialVersionUID = 1009955525001077912L;
+	
+	private static final String DEFINITION_TEXT = "# Generic socket writer capable of handling multiple socket types.";
+	private static final String SIMPLE_NAME = "outputs.socket_writer";
+	private static final String FULL_NAME = "[[outputs.socket_writer]]";
+	private static final String KV_ADDRESS = "address";
+	private static final String KV_KEEP_ALIVE_PERIOD = "keep_alive_period";
+	private static final String KV_DATA_FORMAT = "data_format";
+  
+
+	public OutputsSocketWriter() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public OutputsSocketWriter(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+	
+  
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "## URL to connect to. Examples:"));
+		list.add(new Comment(2, "##     \"tcp://127.0.0.1:8094\""));
+		list.add(new Comment(3, "##     \"tcp://example.com:http\""));
+		list.add(new Comment(4, "##     \"tcp4://127.0.0.1:8094\""));
+		list.add(new Comment(5, "##     \"tcp6://127.0.0.1:8094\""));
+		list.add(new Comment(6, "##     \"tcp6://[2001:db8::1]:8094\""));
+		list.add(new Comment(7, "##     \"udp://127.0.0.1:8094\""));
+		list.add(new Comment(8, "##     \"udp4://127.0.0.1:8094\""));
+		list.add(new Comment(9, "##     \"udp6://127.0.0.1:8094\""));
+		list.add(new Comment(10, "##     \"unix:///tmp/telegraf.sock\""));
+		list.add(new Comment(11, "##     \"unixgram:///tmp/telegraf.sock\""));
+		keyValuePairList.add(new KeyValuePair(1, KV_ADDRESS, null, "# ", null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Period between keep alive probes."));
+		list.add(new Comment(3, "## Only applies to TCP sockets."));
+		list.add(new Comment(4, "## 0 disables keep alive probes."));
+		list.add(new Comment(5, "## Defaults to the OS configuration."));
+		keyValuePairList.add(new KeyValuePair(2, KV_KEEP_ALIVE_PERIOD, null, "# ", null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Data format to generate."));
+		list.add(new Comment(3, "## Each data format has its own unique set of configuration options, read"));
+		list.add(new Comment(4, "## more about them here:"));
+		list.add(new Comment(5, "## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md"));
+		keyValuePairList.add(new KeyValuePair(3, KV_DATA_FORMAT, null, "# ", null, list));
+	}
+	
+  
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("OutputsSocketWriter { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/processor/Processor.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/processor/Processor.java
index 9a449e88f1a46d3757cefcb9fa6a9b99f7fc0945..ca0a985a0a2882a1ee95ca9cb11fb2e8603057f9 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/processor/Processor.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/processor/Processor.java
@@ -1,18 +1,18 @@
-package eu.decideh2020.telegraf.components.processor;
-
-import eu.decideh2020.telegraf.components.document.Plugin;
-import java.io.Serializable;
-
-
-public abstract class Processor extends Plugin implements Serializable
-{
-	private static final long serialVersionUID = -7423353467236446834L;
-  
-	
-	protected Processor() {}
-  
-	protected Processor(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment) {
-		super(definitionText, simpleName, fullName, namePreComment);
-	}
-}
+package eu.decideh2020.telegraf.components.processor;
+
+import eu.decideh2020.telegraf.components.document.Plugin;
+import java.io.Serializable;
+
+
+public abstract class Processor extends Plugin implements Serializable
+{
+	private static final long serialVersionUID = -7423353467236446834L;
+  
+	
+	protected Processor() {}
+  
+	protected Processor(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment) {
+		super(definitionText, simpleName, fullName, namePreComment);
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/processor/ProcessorsPrinter.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/processor/ProcessorsPrinter.java
index 0fb3243660b36a4d5831d2da94638103f1f118c1..97d27d691295c1eface12e9553815cf93930924e 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/processor/ProcessorsPrinter.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/processor/ProcessorsPrinter.java
@@ -1,53 +1,53 @@
-package eu.decideh2020.telegraf.components.processor;
-
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.List;
-
-
-public final class ProcessorsPrinter extends Processor implements Serializable
-{
-	private static final long serialVersionUID = 8509244779653075784L;
-	
-	private static final String DEFINITION_TEXT = "# Print all metrics that pass through this filter.";
-	private static final String SIMPLE_NAME = "processors.printer";
-	private static final String FULL_NAME = "[[processors.printer]]";
-	
-  
-	public ProcessorsPrinter() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public ProcessorsPrinter(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-	
-  
-	public void initComponent() {}
-  
-  
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("ProcessorsPrinter { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.processor;
+
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.List;
+
+
+public final class ProcessorsPrinter extends Processor implements Serializable
+{
+	private static final long serialVersionUID = 8509244779653075784L;
+	
+	private static final String DEFINITION_TEXT = "# Print all metrics that pass through this filter.";
+	private static final String SIMPLE_NAME = "processors.printer";
+	private static final String FULL_NAME = "[[processors.printer]]";
+	
+  
+	public ProcessorsPrinter() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public ProcessorsPrinter(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+	
+  
+	public void initComponent() {}
+  
+  
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("ProcessorsPrinter { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInput.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInput.java
index e530a9694164bcedf4131186e6a24a7fd2d05977..c1f15175cc48e45c5d8da07ee68ef8e5539bb219 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInput.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInput.java
@@ -1,18 +1,18 @@
-package eu.decideh2020.telegraf.components.serviceinputs;
-
-import eu.decideh2020.telegraf.components.document.Plugin;
-import java.io.Serializable;
-
-
-public abstract class ServiceInput extends Plugin implements Serializable
-{
-	private static final long serialVersionUID = 392026483157370007L;
-  
-	
-	protected ServiceInput() {}
-  
-	protected ServiceInput(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment) {
-		super(definitionText, simpleName, fullName, namePreComment);
-	}
-}
+package eu.decideh2020.telegraf.components.serviceinputs;
+
+import eu.decideh2020.telegraf.components.document.Plugin;
+import java.io.Serializable;
+
+
+public abstract class ServiceInput extends Plugin implements Serializable
+{
+	private static final long serialVersionUID = 392026483157370007L;
+  
+	
+	protected ServiceInput() {}
+  
+	protected ServiceInput(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment) {
+		super(definitionText, simpleName, fullName, namePreComment);
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsAMQPConsumer.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsAMQPConsumer.java
index e8d6ac1df7bd613bf73726583b9ecb6c374df8f0..3f8a051d4198a883c958e69d676b8d1027f5921b 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsAMQPConsumer.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsAMQPConsumer.java
@@ -1,116 +1,116 @@
-package eu.decideh2020.telegraf.components.serviceinputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class ServiceInputsAMQPConsumer extends ServiceInput implements Serializable
-{
-	private static final long serialVersionUID = -5968199842309394481L;
-	
-	private static final String DEFINITION_TEXT = "# AMQP consumer plugin";
-	private static final String SIMPLE_NAME = "inputs.amqp_consumer";
-	private static final String FULL_NAME = "[[inputs.amqp_consumer]]";
-	private static final String KV_URL = "url";
-	private static final String KV_EXCHANGE = "exchange";
-	private static final String KV_QUEUE = "queue";
-	private static final String KV_BINDING_KEY = "binding_key";
-	private static final String KV_PREFETCH_COUNT = "prefetch_count";
-	private static final String KV_AUTH_METHOD = "auth_method";
-	private static final String KV_SSL_CA = "ssl_ca";
-	private static final String KV_SSL_CERT = "ssl_cert";
-	private static final String KV_SSL_KEY = "ssl_key";
-	private static final String KV_INSECURE_SKIP_VERIFY = "insecure_skip_verify";
-	private static final String KV_DATA_FORMAT = "data_format";
-  
-
-	public ServiceInputsAMQPConsumer() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public ServiceInputsAMQPConsumer(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-	
-  
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "## AMQP url"));
-		keyValuePairList.add(new KeyValuePair(1, KV_URL, null, null, null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## AMQP exchange"));
-		keyValuePairList.add(new KeyValuePair(2, KV_EXCHANGE, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## AMQP queue name"));
-		keyValuePairList.add(new KeyValuePair(3, KV_QUEUE, null, null, null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Binding Key"));
-		keyValuePairList.add(new KeyValuePair(4, KV_BINDING_KEY, null, null, null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Maximum number of messages server should give to the worker."));
-		keyValuePairList.add(new KeyValuePair(5, KV_PREFETCH_COUNT, null, null, null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Auth method. PLAIN and EXTERNAL are supported"));
-		list.add(new Comment(3, "## Using EXTERNAL requires enabling the rabbitmq_auth_mechanism_ssl plugin as"));
-		list.add(new Comment(4, "## described here: https://www.rabbitmq.com/plugins.html"));
-		keyValuePairList.add(new KeyValuePair(6, KV_AUTH_METHOD, null, "# ", null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Optional SSL Config"));
-		keyValuePairList.add(new KeyValuePair(7, KV_SSL_CA, null, "# ", null, list));
-    
-		keyValuePairList.add(new KeyValuePair(8, KV_SSL_CERT, null, "# ", null, null));
-    
-		keyValuePairList.add(new KeyValuePair(9, KV_SSL_KEY, null, "# ", null, null));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Use SSL but skip chain & host verification"));
-		keyValuePairList.add(new KeyValuePair(10, KV_INSECURE_SKIP_VERIFY, null, "# ", null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Data format to output."));
-		list.add(new Comment(3, "## Each data format has its own unique set of configuration options, read"));
-		list.add(new Comment(4, "## more about them here:"));
-		list.add(new Comment(5, "## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md"));
-		keyValuePairList.add(new KeyValuePair(11, KV_DATA_FORMAT, null, null, null, list));
-	}
-	
-  
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("ServiceInputsAMQPConsumer { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}	
-}
+package eu.decideh2020.telegraf.components.serviceinputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class ServiceInputsAMQPConsumer extends ServiceInput implements Serializable
+{
+	private static final long serialVersionUID = -5968199842309394481L;
+	
+	private static final String DEFINITION_TEXT = "# AMQP consumer plugin";
+	private static final String SIMPLE_NAME = "inputs.amqp_consumer";
+	private static final String FULL_NAME = "[[inputs.amqp_consumer]]";
+	private static final String KV_URL = "url";
+	private static final String KV_EXCHANGE = "exchange";
+	private static final String KV_QUEUE = "queue";
+	private static final String KV_BINDING_KEY = "binding_key";
+	private static final String KV_PREFETCH_COUNT = "prefetch_count";
+	private static final String KV_AUTH_METHOD = "auth_method";
+	private static final String KV_SSL_CA = "ssl_ca";
+	private static final String KV_SSL_CERT = "ssl_cert";
+	private static final String KV_SSL_KEY = "ssl_key";
+	private static final String KV_INSECURE_SKIP_VERIFY = "insecure_skip_verify";
+	private static final String KV_DATA_FORMAT = "data_format";
+  
+
+	public ServiceInputsAMQPConsumer() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public ServiceInputsAMQPConsumer(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+	
+  
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "## AMQP url"));
+		keyValuePairList.add(new KeyValuePair(1, KV_URL, null, null, null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## AMQP exchange"));
+		keyValuePairList.add(new KeyValuePair(2, KV_EXCHANGE, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## AMQP queue name"));
+		keyValuePairList.add(new KeyValuePair(3, KV_QUEUE, null, null, null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Binding Key"));
+		keyValuePairList.add(new KeyValuePair(4, KV_BINDING_KEY, null, null, null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Maximum number of messages server should give to the worker."));
+		keyValuePairList.add(new KeyValuePair(5, KV_PREFETCH_COUNT, null, null, null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Auth method. PLAIN and EXTERNAL are supported"));
+		list.add(new Comment(3, "## Using EXTERNAL requires enabling the rabbitmq_auth_mechanism_ssl plugin as"));
+		list.add(new Comment(4, "## described here: https://www.rabbitmq.com/plugins.html"));
+		keyValuePairList.add(new KeyValuePair(6, KV_AUTH_METHOD, null, "# ", null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Optional SSL Config"));
+		keyValuePairList.add(new KeyValuePair(7, KV_SSL_CA, null, "# ", null, list));
+    
+		keyValuePairList.add(new KeyValuePair(8, KV_SSL_CERT, null, "# ", null, null));
+    
+		keyValuePairList.add(new KeyValuePair(9, KV_SSL_KEY, null, "# ", null, null));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Use SSL but skip chain & host verification"));
+		keyValuePairList.add(new KeyValuePair(10, KV_INSECURE_SKIP_VERIFY, null, "# ", null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Data format to output."));
+		list.add(new Comment(3, "## Each data format has its own unique set of configuration options, read"));
+		list.add(new Comment(4, "## more about them here:"));
+		list.add(new Comment(5, "## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md"));
+		keyValuePairList.add(new KeyValuePair(11, KV_DATA_FORMAT, null, null, null, list));
+	}
+	
+  
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("ServiceInputsAMQPConsumer { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}	
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsHTTPListener.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsHTTPListener.java
index ef8ee6429d96409a8575647356481efcbce1207f..f2661983d2835ef66b4dd5ed898d5af4eb99b4c0 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsHTTPListener.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsHTTPListener.java
@@ -1,86 +1,86 @@
-package eu.decideh2020.telegraf.components.serviceinputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class ServiceInputsHTTPListener extends ServiceInput implements Serializable
-{
-	private static final long serialVersionUID = -2212131416239722809L;
-	
-	private static final String DEFINITION_TEXT = "# Influx HTTP write listener";
-	private static final String SIMPLE_NAME = "inputs.http_listener";
-	private static final String FULL_NAME = "[[inputs.http_listener]]";
-	private static final String KV_SERVICE_ADDRESS = "service_address";
-	private static final String KV_READ_TIMEOUT = "read_timeout";
-	private static final String KV_WRITE_TIMEOUT = "write_timeout";
-	private static final String KV_MAX_BODY_SIZE = "max_body_size";
-	private static final String KV_MAX_LINE_SIZE = "max_line_size";
-  
-	
-	public ServiceInputsHTTPListener() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public ServiceInputsHTTPListener(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-	
-  
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "## Address and port to host HTTP listener on"));
-		keyValuePairList.add(new KeyValuePair(1, KV_SERVICE_ADDRESS, null, null, null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## maximum duration before timing out read of the request"));
-		keyValuePairList.add(new KeyValuePair(2, KV_READ_TIMEOUT, null, null, null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## maximum duration before timing out write of the response"));
-		keyValuePairList.add(new KeyValuePair(3, KV_WRITE_TIMEOUT, null, null, null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Maximum allowed http request body size in bytes."));
-		list.add(new Comment(3, "## 0 means to use the default of 536,870,912 bytes (500 mebibytes)"));
-		keyValuePairList.add(new KeyValuePair(4, KV_MAX_BODY_SIZE, null, null, null, list));
-
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Maximum line size allowed to be sent in bytes."));
-		list.add(new Comment(3, "## 0 means to use the default of 65536 bytes (64 kibibytes)"));
-		keyValuePairList.add(new KeyValuePair(5, KV_MAX_LINE_SIZE, null, null, null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("ServiceInputsHTTPListener { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.serviceinputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class ServiceInputsHTTPListener extends ServiceInput implements Serializable
+{
+	private static final long serialVersionUID = -2212131416239722809L;
+	
+	private static final String DEFINITION_TEXT = "# Influx HTTP write listener";
+	private static final String SIMPLE_NAME = "inputs.http_listener";
+	private static final String FULL_NAME = "[[inputs.http_listener]]";
+	private static final String KV_SERVICE_ADDRESS = "service_address";
+	private static final String KV_READ_TIMEOUT = "read_timeout";
+	private static final String KV_WRITE_TIMEOUT = "write_timeout";
+	private static final String KV_MAX_BODY_SIZE = "max_body_size";
+	private static final String KV_MAX_LINE_SIZE = "max_line_size";
+  
+	
+	public ServiceInputsHTTPListener() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public ServiceInputsHTTPListener(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+	
+  
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "## Address and port to host HTTP listener on"));
+		keyValuePairList.add(new KeyValuePair(1, KV_SERVICE_ADDRESS, null, null, null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## maximum duration before timing out read of the request"));
+		keyValuePairList.add(new KeyValuePair(2, KV_READ_TIMEOUT, null, null, null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## maximum duration before timing out write of the response"));
+		keyValuePairList.add(new KeyValuePair(3, KV_WRITE_TIMEOUT, null, null, null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Maximum allowed http request body size in bytes."));
+		list.add(new Comment(3, "## 0 means to use the default of 536,870,912 bytes (500 mebibytes)"));
+		keyValuePairList.add(new KeyValuePair(4, KV_MAX_BODY_SIZE, null, null, null, list));
+
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Maximum line size allowed to be sent in bytes."));
+		list.add(new Comment(3, "## 0 means to use the default of 65536 bytes (64 kibibytes)"));
+		keyValuePairList.add(new KeyValuePair(5, KV_MAX_LINE_SIZE, null, null, null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("ServiceInputsHTTPListener { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsKafkaConsumer.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsKafkaConsumer.java
index 3841b58222c7698b2add9f648397a07fadcfdc49..0769d212ba35a34e3e143b015f63592321093a22 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsKafkaConsumer.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsKafkaConsumer.java
@@ -1,97 +1,97 @@
-package eu.decideh2020.telegraf.components.serviceinputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class ServiceInputsKafkaConsumer extends ServiceInput implements Serializable
-{
-	private static final long serialVersionUID = 2315795520736999100L;
-	
-	private static final String DEFINITION_TEXT = "# Read metrics from Kafka topic(s)";
-	private static final String SIMPLE_NAME = "inputs.kafka_consumer";
-	private static final String FULL_NAME = "[[inputs.kafka_consumer]]";
-	private static final String KV_TOPICS = "topics";
-	private static final String KV_ZOOKEEPER_KEEPS = "zookeeper_peers";
-	private static final String KV_ZOOKEEPER_CHROOT = "zookeeper_chroot";
-	private static final String KV_CONSUMER_GROUP = "consumer_group";
-	private static final String KV_OFFSET = "offset";
-	private static final String KV_DATA_FORMAT = "data_format";
-	private static final String KV_MAX_MESSAGE_LEN = "max_message_len";
-  
-
-	public ServiceInputsKafkaConsumer() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public ServiceInputsKafkaConsumer(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-	
-  
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "## topic(s) to consume"));
-		keyValuePairList.add(new KeyValuePair(1, KV_TOPICS, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## an array of Zookeeper connection strings"));
-		keyValuePairList.add(new KeyValuePair(2, KV_ZOOKEEPER_KEEPS, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Zookeeper Chroot"));
-		keyValuePairList.add(new KeyValuePair(3, KV_ZOOKEEPER_CHROOT, null, null, null, list));
-		   
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## the name of the consumer group"));
-		keyValuePairList.add(new KeyValuePair(4, KV_CONSUMER_GROUP, null, null, null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Offset (must be either \"oldest\" or \"newest\")"));
-		keyValuePairList.add(new KeyValuePair(5, KV_OFFSET, null, null, null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Data format to consume."));
-		list.add(new Comment(3, "## Each data format has its own unique set of configuration options, read"));
-		list.add(new Comment(4, "## more about them here:"));
-		list.add(new Comment(5, "## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md"));
-		keyValuePairList.add(new KeyValuePair(6, KV_DATA_FORMAT, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Maximum length of a message to consume, in bytes (default 0/unlimited);"));
-		list.add(new Comment(3, "## larger messages are dropped"));
-		keyValuePairList.add(new KeyValuePair(7, KV_MAX_MESSAGE_LEN, null, null, null, list));
-	}
-	
-  
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("ServiceInputsKafkaConsumer { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.serviceinputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class ServiceInputsKafkaConsumer extends ServiceInput implements Serializable
+{
+	private static final long serialVersionUID = 2315795520736999100L;
+	
+	private static final String DEFINITION_TEXT = "# Read metrics from Kafka topic(s)";
+	private static final String SIMPLE_NAME = "inputs.kafka_consumer";
+	private static final String FULL_NAME = "[[inputs.kafka_consumer]]";
+	private static final String KV_TOPICS = "topics";
+	private static final String KV_ZOOKEEPER_KEEPS = "zookeeper_peers";
+	private static final String KV_ZOOKEEPER_CHROOT = "zookeeper_chroot";
+	private static final String KV_CONSUMER_GROUP = "consumer_group";
+	private static final String KV_OFFSET = "offset";
+	private static final String KV_DATA_FORMAT = "data_format";
+	private static final String KV_MAX_MESSAGE_LEN = "max_message_len";
+  
+
+	public ServiceInputsKafkaConsumer() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public ServiceInputsKafkaConsumer(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+	
+  
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "## topic(s) to consume"));
+		keyValuePairList.add(new KeyValuePair(1, KV_TOPICS, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## an array of Zookeeper connection strings"));
+		keyValuePairList.add(new KeyValuePair(2, KV_ZOOKEEPER_KEEPS, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Zookeeper Chroot"));
+		keyValuePairList.add(new KeyValuePair(3, KV_ZOOKEEPER_CHROOT, null, null, null, list));
+		   
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## the name of the consumer group"));
+		keyValuePairList.add(new KeyValuePair(4, KV_CONSUMER_GROUP, null, null, null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Offset (must be either \"oldest\" or \"newest\")"));
+		keyValuePairList.add(new KeyValuePair(5, KV_OFFSET, null, null, null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Data format to consume."));
+		list.add(new Comment(3, "## Each data format has its own unique set of configuration options, read"));
+		list.add(new Comment(4, "## more about them here:"));
+		list.add(new Comment(5, "## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md"));
+		keyValuePairList.add(new KeyValuePair(6, KV_DATA_FORMAT, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Maximum length of a message to consume, in bytes (default 0/unlimited);"));
+		list.add(new Comment(3, "## larger messages are dropped"));
+		keyValuePairList.add(new KeyValuePair(7, KV_MAX_MESSAGE_LEN, null, null, null, list));
+	}
+	
+  
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("ServiceInputsKafkaConsumer { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsLogparser.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsLogparser.java
index d42aeba333321b3127db9477040c31bc74a3bc83..9d599941360da93cb67c4a6a2539dc867c851e39 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsLogparser.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsLogparser.java
@@ -1,107 +1,107 @@
-package eu.decideh2020.telegraf.components.serviceinputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class ServiceInputsLogparser extends ServiceInput implements Serializable
-{
-	private static final long serialVersionUID = -7512233445176266868L;
-	
-	private static final String DEFINITION_TEXT = "# Stream and parse log file(s).";
-	private static final String SIMPLE_NAME = "inputs.logparser";
-	private static final String FULL_NAME = "[[inputs.logparser]]";
-	private static final String KV_FILES = "files";
-	private static final String KV_FROM_BEGINNING = "from_beginning";
-	private static final String KV_PATTERNS = "patterns";
-	private static final String KV_MEASUREMENT = "measurement";
-	private static final String KV_CUSTOM_PATTERN_FILES = "custom_pattern_files";
-	private static final String KV_CUSTOM_PATTERNS = "custom_patterns";
-	private static final String ST_GROK = "[inputs.logparser.grok]";
-  
-
-	public ServiceInputsLogparser() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public ServiceInputsLogparser(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-	
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		List<Comment> subtableCommentList = new ArrayList<Comment>();
-    
-		 list.add(new Comment(1, "## Log files to parse."));
-		 list.add(new Comment(2, "## These accept standard unix glob matching rules, but with the addition of"));
-		 list.add(new Comment(3, "## ** as a \"super asterisk\". ie:"));
-		 list.add(new Comment(4, "##   /var/log/**.log     -> recursively find all .log files in /var/log"));
-		 list.add(new Comment(5, "##   /var/log/*/*.log    -> find all .log files with a parent dir in /var/log"));
-		 list.add(new Comment(6, "##   /var/log/apache.log -> only tail the apache log file"));
-		 keyValuePairList.add(new KeyValuePair(1, KV_FILES, null, null, null, list));
-		    
-		 list = new ArrayList<Comment>();
-		 list.add(new Comment(1, "## Read files that currently exist from the beginning. Files that are created"));
-		 list.add(new Comment(2, "## while telegraf is running (and that match the \"files\" globs) will always"));
-		 list.add(new Comment(3, "## be read from the beginning."));
-		 keyValuePairList.add(new KeyValuePair(2, KV_FROM_BEGINNING, null, null, null, list));
-    
-		subtableCommentList.add(new Comment(1, ""));
-		subtableCommentList.add(new Comment(2, "## Parse logstash-style \"grok\" patterns:"));
-		subtableCommentList.add(new Comment(3, "##   Telegraf built-in parsing patterns: https://goo.gl/dkay10"));
-		subtableCommentList.add(new Comment(4, "##"));
-		subtableCommentList.add(new Comment(5, "##   Property 'patterns':"));
-		subtableCommentList.add(new Comment(6, "##   This is a list of patterns to check the given log file(s) for."));
-		subtableCommentList.add(new Comment(7, "##   Note that adding patterns here increases processing time. The most"));
-		subtableCommentList.add(new Comment(8, "##   efficient configuration is to have one pattern per logparser."));
-		subtableCommentList.add(new Comment(9, "##   Other common built-in patterns are:"));
-		subtableCommentList.add(new Comment(10, "##   %{COMMON_LOG_FORMAT}   (plain apache & nginx access logs)"));
-		subtableCommentList.add(new Comment(11, "##   %{COMBINED_LOG_FORMAT} (access logs + referrer & agent)"));
-		subtableCommentList.add(new Comment(12, "##"));
-		subtableCommentList.add(new Comment(13, "##   Property 'measurement':"));
-		subtableCommentList.add(new Comment(14, "##   Name of the outputted measurement name."));
-		subtableCommentList.add(new Comment(15, "##"));
-		subtableCommentList.add(new Comment(16, "##   Property 'custom_pattern_files':"));
-		subtableCommentList.add(new Comment(17, "##   Full path(s) to custom pattern files."));
-		subtableCommentList.add(new Comment(18, "##"));
-		subtableCommentList.add(new Comment(19, "##   Property 'custom_patterns':"));
-		subtableCommentList.add(new Comment(20, "##   Custom patterns can also be defined here. Put one pattern per line."));
-		keyValuePairList.add(new KeyValuePair(3, KV_PATTERNS, null, null, null, null, ST_GROK, ST_GROK, subtableCommentList, null));
-		    
-		keyValuePairList.add(new KeyValuePair(4, KV_MEASUREMENT, null, null, null, null, ST_GROK, ST_GROK, null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(5, KV_CUSTOM_PATTERN_FILES, null, null, null, null, ST_GROK, ST_GROK, null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(6, KV_CUSTOM_PATTERNS, "''''''", null, null, null, ST_GROK, ST_GROK, null, null));
-	}
-	
-  
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("ServiceInputsLogparser { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.serviceinputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class ServiceInputsLogparser extends ServiceInput implements Serializable
+{
+	private static final long serialVersionUID = -7512233445176266868L;
+	
+	private static final String DEFINITION_TEXT = "# Stream and parse log file(s).";
+	private static final String SIMPLE_NAME = "inputs.logparser";
+	private static final String FULL_NAME = "[[inputs.logparser]]";
+	private static final String KV_FILES = "files";
+	private static final String KV_FROM_BEGINNING = "from_beginning";
+	private static final String KV_PATTERNS = "patterns";
+	private static final String KV_MEASUREMENT = "measurement";
+	private static final String KV_CUSTOM_PATTERN_FILES = "custom_pattern_files";
+	private static final String KV_CUSTOM_PATTERNS = "custom_patterns";
+	private static final String ST_GROK = "[inputs.logparser.grok]";
+  
+
+	public ServiceInputsLogparser() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public ServiceInputsLogparser(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+	
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		List<Comment> subtableCommentList = new ArrayList<Comment>();
+    
+		 list.add(new Comment(1, "## Log files to parse."));
+		 list.add(new Comment(2, "## These accept standard unix glob matching rules, but with the addition of"));
+		 list.add(new Comment(3, "## ** as a \"super asterisk\". ie:"));
+		 list.add(new Comment(4, "##   /var/log/**.log     -> recursively find all .log files in /var/log"));
+		 list.add(new Comment(5, "##   /var/log/*/*.log    -> find all .log files with a parent dir in /var/log"));
+		 list.add(new Comment(6, "##   /var/log/apache.log -> only tail the apache log file"));
+		 keyValuePairList.add(new KeyValuePair(1, KV_FILES, null, null, null, list));
+		    
+		 list = new ArrayList<Comment>();
+		 list.add(new Comment(1, "## Read files that currently exist from the beginning. Files that are created"));
+		 list.add(new Comment(2, "## while telegraf is running (and that match the \"files\" globs) will always"));
+		 list.add(new Comment(3, "## be read from the beginning."));
+		 keyValuePairList.add(new KeyValuePair(2, KV_FROM_BEGINNING, null, null, null, list));
+    
+		subtableCommentList.add(new Comment(1, ""));
+		subtableCommentList.add(new Comment(2, "## Parse logstash-style \"grok\" patterns:"));
+		subtableCommentList.add(new Comment(3, "##   Telegraf built-in parsing patterns: https://goo.gl/dkay10"));
+		subtableCommentList.add(new Comment(4, "##"));
+		subtableCommentList.add(new Comment(5, "##   Property 'patterns':"));
+		subtableCommentList.add(new Comment(6, "##   This is a list of patterns to check the given log file(s) for."));
+		subtableCommentList.add(new Comment(7, "##   Note that adding patterns here increases processing time. The most"));
+		subtableCommentList.add(new Comment(8, "##   efficient configuration is to have one pattern per logparser."));
+		subtableCommentList.add(new Comment(9, "##   Other common built-in patterns are:"));
+		subtableCommentList.add(new Comment(10, "##   %{COMMON_LOG_FORMAT}   (plain apache & nginx access logs)"));
+		subtableCommentList.add(new Comment(11, "##   %{COMBINED_LOG_FORMAT} (access logs + referrer & agent)"));
+		subtableCommentList.add(new Comment(12, "##"));
+		subtableCommentList.add(new Comment(13, "##   Property 'measurement':"));
+		subtableCommentList.add(new Comment(14, "##   Name of the outputted measurement name."));
+		subtableCommentList.add(new Comment(15, "##"));
+		subtableCommentList.add(new Comment(16, "##   Property 'custom_pattern_files':"));
+		subtableCommentList.add(new Comment(17, "##   Full path(s) to custom pattern files."));
+		subtableCommentList.add(new Comment(18, "##"));
+		subtableCommentList.add(new Comment(19, "##   Property 'custom_patterns':"));
+		subtableCommentList.add(new Comment(20, "##   Custom patterns can also be defined here. Put one pattern per line."));
+		keyValuePairList.add(new KeyValuePair(3, KV_PATTERNS, null, null, null, null, ST_GROK, ST_GROK, subtableCommentList, null));
+		    
+		keyValuePairList.add(new KeyValuePair(4, KV_MEASUREMENT, null, null, null, null, ST_GROK, ST_GROK, null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(5, KV_CUSTOM_PATTERN_FILES, null, null, null, null, ST_GROK, ST_GROK, null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(6, KV_CUSTOM_PATTERNS, "''''''", null, null, null, ST_GROK, ST_GROK, null, null));
+	}
+	
+  
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("ServiceInputsLogparser { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsMQTTConsumer.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsMQTTConsumer.java
index 685b615320dcbee9b4368c69e843f5ffd6313b16..aacd6cbcf8eb24aa45434b078cb47ceded105291 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsMQTTConsumer.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsMQTTConsumer.java
@@ -1,117 +1,117 @@
-package eu.decideh2020.telegraf.components.serviceinputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class ServiceInputsMQTTConsumer extends ServiceInput implements Serializable
-{
-	private static final long serialVersionUID = 4458567653983734099L;
-	
-	private static final String DEFINITION_TEXT = "# Read metrics from MQTT topic(s)";
-	private static final String SIMPLE_NAME = "inputs.mqtt_consumer";
-	private static final String FULL_NAME = "[[inputs.mqtt_consumer]]";
-	private static final String KV_SERVERS = "servers";
-	private static final String KV_QOS = "qos";
-	private static final String KV_TOPICS = "topics";
-	private static final String KV_PERSISTENT_SESSION = "persistent_session";
-	private static final String KV_CLIENT_ID = "client_id";
-	private static final String KV_USERNAME = "username";
-	private static final String KV_PASSWORD = "password";
-	private static final String KV_SSL_CA = "ssl_ca";
-	private static final String KV_SSL_CERT = "ssl_cert";
-	private static final String KV_SSL_KEY = "ssl_key";
-	private static final String KV_INSECURE_SKIP_VERIFY = "insecure_skip_verify";
-	private static final String KV_DATA_FORMAT = "data_format";
-  
-	public ServiceInputsMQTTConsumer() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public ServiceInputsMQTTConsumer(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-	
-  
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		keyValuePairList.add(new KeyValuePair(1, KV_SERVERS, null, null, null, null));
-		    
-		list.add(new Comment(1, "## MQTT QoS, must be 0, 1, or 2"));
-		keyValuePairList.add(new KeyValuePair(2, KV_QOS, null, null, null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Topics to subscribe to"));
-		keyValuePairList.add(new KeyValuePair(3, KV_TOPICS, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "# if true, messages that can't be delivered while the subscriber is offline"));
-		list.add(new Comment(3, "# will be delivered when it comes back (such as on service restart)."));
-		list.add(new Comment(4, "# NOTE: if true, client_id MUST be set"));
-		keyValuePairList.add(new KeyValuePair(4, KV_PERSISTENT_SESSION, null, null, null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "# If empty, a random client ID will be generated."));
-		keyValuePairList.add(new KeyValuePair(5, KV_CLIENT_ID, null, null, null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## username and password to connect MQTT server."));
-		keyValuePairList.add(new KeyValuePair(6, KV_USERNAME, null, "# ", null, list));
-		    
-		keyValuePairList.add(new KeyValuePair(7, KV_PASSWORD, null, "# ", null, null));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Optional SSL Config"));
-		keyValuePairList.add(new KeyValuePair(8, KV_SSL_CA, null, "# ", null, list));
-		    
-		keyValuePairList.add(new KeyValuePair(9, KV_SSL_CERT, null, "# ", null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(10, KV_SSL_KEY, null, "# ", null, null));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Use SSL but skip chain & host verification"));
-		keyValuePairList.add(new KeyValuePair(11, KV_INSECURE_SKIP_VERIFY, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Data format to consume."));
-		list.add(new Comment(3, "## Each data format has its own unique set of configuration options, read"));
-		list.add(new Comment(4, "## more about them here:"));
-		list.add(new Comment(5, "## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md"));
-		keyValuePairList.add(new KeyValuePair(12, KV_DATA_FORMAT, null, null, null, list));
-	}
-	
-  
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("ServiceInputsMQTTConsumer { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.serviceinputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class ServiceInputsMQTTConsumer extends ServiceInput implements Serializable
+{
+	private static final long serialVersionUID = 4458567653983734099L;
+	
+	private static final String DEFINITION_TEXT = "# Read metrics from MQTT topic(s)";
+	private static final String SIMPLE_NAME = "inputs.mqtt_consumer";
+	private static final String FULL_NAME = "[[inputs.mqtt_consumer]]";
+	private static final String KV_SERVERS = "servers";
+	private static final String KV_QOS = "qos";
+	private static final String KV_TOPICS = "topics";
+	private static final String KV_PERSISTENT_SESSION = "persistent_session";
+	private static final String KV_CLIENT_ID = "client_id";
+	private static final String KV_USERNAME = "username";
+	private static final String KV_PASSWORD = "password";
+	private static final String KV_SSL_CA = "ssl_ca";
+	private static final String KV_SSL_CERT = "ssl_cert";
+	private static final String KV_SSL_KEY = "ssl_key";
+	private static final String KV_INSECURE_SKIP_VERIFY = "insecure_skip_verify";
+	private static final String KV_DATA_FORMAT = "data_format";
+  
+	public ServiceInputsMQTTConsumer() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public ServiceInputsMQTTConsumer(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+	
+  
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		keyValuePairList.add(new KeyValuePair(1, KV_SERVERS, null, null, null, null));
+		    
+		list.add(new Comment(1, "## MQTT QoS, must be 0, 1, or 2"));
+		keyValuePairList.add(new KeyValuePair(2, KV_QOS, null, null, null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Topics to subscribe to"));
+		keyValuePairList.add(new KeyValuePair(3, KV_TOPICS, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "# if true, messages that can't be delivered while the subscriber is offline"));
+		list.add(new Comment(3, "# will be delivered when it comes back (such as on service restart)."));
+		list.add(new Comment(4, "# NOTE: if true, client_id MUST be set"));
+		keyValuePairList.add(new KeyValuePair(4, KV_PERSISTENT_SESSION, null, null, null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "# If empty, a random client ID will be generated."));
+		keyValuePairList.add(new KeyValuePair(5, KV_CLIENT_ID, null, null, null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## username and password to connect MQTT server."));
+		keyValuePairList.add(new KeyValuePair(6, KV_USERNAME, null, "# ", null, list));
+		    
+		keyValuePairList.add(new KeyValuePair(7, KV_PASSWORD, null, "# ", null, null));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Optional SSL Config"));
+		keyValuePairList.add(new KeyValuePair(8, KV_SSL_CA, null, "# ", null, list));
+		    
+		keyValuePairList.add(new KeyValuePair(9, KV_SSL_CERT, null, "# ", null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(10, KV_SSL_KEY, null, "# ", null, null));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Use SSL but skip chain & host verification"));
+		keyValuePairList.add(new KeyValuePair(11, KV_INSECURE_SKIP_VERIFY, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Data format to consume."));
+		list.add(new Comment(3, "## Each data format has its own unique set of configuration options, read"));
+		list.add(new Comment(4, "## more about them here:"));
+		list.add(new Comment(5, "## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md"));
+		keyValuePairList.add(new KeyValuePair(12, KV_DATA_FORMAT, null, null, null, list));
+	}
+	
+  
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("ServiceInputsMQTTConsumer { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsNATSConsumer.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsNATSConsumer.java
index 2349ea4f7e22f8a66560ddfd69f529243c79447f..2c28a815e756ab04b85eef6d1a6764a39c118faa 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsNATSConsumer.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsNATSConsumer.java
@@ -1,95 +1,95 @@
-package eu.decideh2020.telegraf.components.serviceinputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class ServiceInputsNATSConsumer extends ServiceInput implements Serializable
-{
-	private static final long serialVersionUID = 7050096934158850475L;
-	
-	private static final String DEFINITION_TEXT = "# Read metrics from NATS subject(s)";
-	private static final String SIMPLE_NAME = "inputs.nats_consumer";
-	private static final String FULL_NAME = "[[inputs.nats_consumer]]";
-	private static final String KV_SERVERS = "servers";
-	private static final String KV_SECURE = "secure";
-	private static final String KV_SUBJECTS = "subjects";
-	private static final String KV_QUEUE_GROUP = "queue_group";
-	private static final String KV_PENDING_MESSAGE_LIMIT = "pending_message_limit";
-	private static final String KV_PENDING_BYTES_LIMIT = "pending_bytes_limit";
-	private static final String KV_DATA_FORMAT = "data_format";
-
-  
-	public ServiceInputsNATSConsumer() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public ServiceInputsNATSConsumer(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-	
-  
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "## urls of NATS servers"));
-		keyValuePairList.add(new KeyValuePair(1, KV_SERVERS, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Use Transport Layer Security"));
-		keyValuePairList.add(new KeyValuePair(2, KV_SECURE, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## subject(s) to consume"));
-		keyValuePairList.add(new KeyValuePair(3, KV_SUBJECTS, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## name a queue group"));
-		keyValuePairList.add(new KeyValuePair(4, KV_QUEUE_GROUP, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Sets the limits for pending msgs and bytes for each subscription"));
-		list.add(new Comment(3, "## These shouldn't need to be adjusted except in very high throughput scenarios"));
-		keyValuePairList.add(new KeyValuePair(5, KV_PENDING_MESSAGE_LIMIT, null, "# ", null, list));
-		    
-		keyValuePairList.add(new KeyValuePair(6, KV_PENDING_BYTES_LIMIT, null, "# ", null, null));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Data format to consume."));
-		list.add(new Comment(3, "## Each data format has its own unique set of configuration options, read"));
-		list.add(new Comment(4, "## more about them here:"));
-		list.add(new Comment(5, "## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md"));
-		keyValuePairList.add(new KeyValuePair(7, KV_DATA_FORMAT, null, null, null, list));
-	}
-  
-	
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("ServiceInputsNATSConsumer { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.serviceinputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class ServiceInputsNATSConsumer extends ServiceInput implements Serializable
+{
+	private static final long serialVersionUID = 7050096934158850475L;
+	
+	private static final String DEFINITION_TEXT = "# Read metrics from NATS subject(s)";
+	private static final String SIMPLE_NAME = "inputs.nats_consumer";
+	private static final String FULL_NAME = "[[inputs.nats_consumer]]";
+	private static final String KV_SERVERS = "servers";
+	private static final String KV_SECURE = "secure";
+	private static final String KV_SUBJECTS = "subjects";
+	private static final String KV_QUEUE_GROUP = "queue_group";
+	private static final String KV_PENDING_MESSAGE_LIMIT = "pending_message_limit";
+	private static final String KV_PENDING_BYTES_LIMIT = "pending_bytes_limit";
+	private static final String KV_DATA_FORMAT = "data_format";
+
+  
+	public ServiceInputsNATSConsumer() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public ServiceInputsNATSConsumer(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+	
+  
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "## urls of NATS servers"));
+		keyValuePairList.add(new KeyValuePair(1, KV_SERVERS, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Use Transport Layer Security"));
+		keyValuePairList.add(new KeyValuePair(2, KV_SECURE, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## subject(s) to consume"));
+		keyValuePairList.add(new KeyValuePair(3, KV_SUBJECTS, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## name a queue group"));
+		keyValuePairList.add(new KeyValuePair(4, KV_QUEUE_GROUP, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Sets the limits for pending msgs and bytes for each subscription"));
+		list.add(new Comment(3, "## These shouldn't need to be adjusted except in very high throughput scenarios"));
+		keyValuePairList.add(new KeyValuePair(5, KV_PENDING_MESSAGE_LIMIT, null, "# ", null, list));
+		    
+		keyValuePairList.add(new KeyValuePair(6, KV_PENDING_BYTES_LIMIT, null, "# ", null, null));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Data format to consume."));
+		list.add(new Comment(3, "## Each data format has its own unique set of configuration options, read"));
+		list.add(new Comment(4, "## more about them here:"));
+		list.add(new Comment(5, "## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md"));
+		keyValuePairList.add(new KeyValuePair(7, KV_DATA_FORMAT, null, null, null, list));
+	}
+  
+	
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("ServiceInputsNATSConsumer { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsNSQConsumer.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsNSQConsumer.java
index 5dbd29ef3413e1d2711a4b1c8e747db233e28e85..cada65ffef9cc0f7c147d2c7e05a67e0f7d9cd68 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsNSQConsumer.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsNSQConsumer.java
@@ -1,79 +1,79 @@
-package eu.decideh2020.telegraf.components.serviceinputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class ServiceInputsNSQConsumer extends ServiceInput implements Serializable
-{
-	private static final long serialVersionUID = 7338116851188586337L;
-	
-	private static final String DEFINITION_TEXT = "# Read NSQ topic for metrics.";
-	private static final String SIMPLE_NAME = "inputs.nsq_consumer";
-	private static final String FULL_NAME = "[[inputs.nsq_consumer]]";
-	private static final String KV_SERVER = "server";
-	private static final String KV_TOPIC = "topic";
-	private static final String KV_CHANNEL = "channel";
-	private static final String KV_MAX_IN_FLIGHT = "max_in_flight";
-	private static final String KV_DATA_FORMAT = "data_format";
-	
-  
-	public ServiceInputsNSQConsumer() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public ServiceInputsNSQConsumer(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-	
-  
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "## An string representing the NSQD TCP Endpoint"));
-		keyValuePairList.add(new KeyValuePair(1, KV_SERVER, null, null, null, list));
-    
-		keyValuePairList.add(new KeyValuePair(2, KV_TOPIC, null, null, null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(3, KV_CHANNEL, null, null, null, null));
-		    
-		keyValuePairList.add(new KeyValuePair(4, KV_MAX_IN_FLIGHT, null, null, null, null));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Data format to consume."));
-		list.add(new Comment(3, "## Each data format has its own unique set of configuration options, read"));
-		list.add(new Comment(4, "## more about them here:"));
-		list.add(new Comment(5, "## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md"));
-		keyValuePairList.add(new KeyValuePair(5, KV_DATA_FORMAT, null, null, null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("ServiceInputsNSQConsumer { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.serviceinputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class ServiceInputsNSQConsumer extends ServiceInput implements Serializable
+{
+	private static final long serialVersionUID = 7338116851188586337L;
+	
+	private static final String DEFINITION_TEXT = "# Read NSQ topic for metrics.";
+	private static final String SIMPLE_NAME = "inputs.nsq_consumer";
+	private static final String FULL_NAME = "[[inputs.nsq_consumer]]";
+	private static final String KV_SERVER = "server";
+	private static final String KV_TOPIC = "topic";
+	private static final String KV_CHANNEL = "channel";
+	private static final String KV_MAX_IN_FLIGHT = "max_in_flight";
+	private static final String KV_DATA_FORMAT = "data_format";
+	
+  
+	public ServiceInputsNSQConsumer() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public ServiceInputsNSQConsumer(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+	
+  
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "## An string representing the NSQD TCP Endpoint"));
+		keyValuePairList.add(new KeyValuePair(1, KV_SERVER, null, null, null, list));
+    
+		keyValuePairList.add(new KeyValuePair(2, KV_TOPIC, null, null, null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(3, KV_CHANNEL, null, null, null, null));
+		    
+		keyValuePairList.add(new KeyValuePair(4, KV_MAX_IN_FLIGHT, null, null, null, null));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Data format to consume."));
+		list.add(new Comment(3, "## Each data format has its own unique set of configuration options, read"));
+		list.add(new Comment(4, "## more about them here:"));
+		list.add(new Comment(5, "## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md"));
+		keyValuePairList.add(new KeyValuePair(5, KV_DATA_FORMAT, null, null, null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("ServiceInputsNSQConsumer { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsSocketListener.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsSocketListener.java
index b5bd7e819de99fd4f17ca321e76c00ab328fc508..d7cac65f5373bb5755e38e4bb7b998d3863404c1 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsSocketListener.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsSocketListener.java
@@ -1,106 +1,106 @@
-package eu.decideh2020.telegraf.components.serviceinputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class ServiceInputsSocketListener extends ServiceInput implements Serializable
-{
-	private static final long serialVersionUID = 4597395918303640640L;
-	
-	private static final String DEFINITION_TEXT = "# Generic socket listener capable of handling multiple socket types.";
-	private static final String SIMPLE_NAME = "inputs.socket_listener";
-	private static final String FULL_NAME = "[[inputs.socket_listener]]";
-	private static final String KV_SERVICE_ADDRESS = "service_address";
-	private static final String KV_MAX_CONNECTIONS = "max_connections";
-	private static final String KV_READ_BUFFER_SIZE = "read_buffer_size";
-	private static final String KV_KEEP_ALIVE_PERIOD = "keep_alive_period";
-	private static final String KV_DATA_FORMAT = "data_format";
-	
-  
-	public ServiceInputsSocketListener() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public ServiceInputsSocketListener(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-
-	
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "## URL to listen on"));
-		list.add(new Comment(2, "## service_address=\"tcp://:8094\""));
-		list.add(new Comment(3, "## service_address=\"tcp://127.0.0.1:http\""));
-		list.add(new Comment(4, "## service_address=\"tcp4://:8094\""));
-		list.add(new Comment(5, "## service_address=\"tcp6://:8094\""));
-		list.add(new Comment(6, "## service_address=\"tcp6://[2001:db8::1]:8094\""));
-		list.add(new Comment(7, "## service_address=\"udp://:8094\""));
-		list.add(new Comment(8, "## service_address=\"udp4://:8094\""));
-		list.add(new Comment(9, "## service_address=\"udp6://:8094\""));
-		list.add(new Comment(10, "## service_address=\"unix:///tmp/telegraf.sock\""));
-		list.add(new Comment(11, "## service_address=\"unixgram:///tmp/telegraf.sock\""));
-		keyValuePairList.add(new KeyValuePair(1, KV_SERVICE_ADDRESS, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Maximum number of concurrent connections."));
-		list.add(new Comment(3, "## Only applies to stream sockets (e.g. TCP)."));
-		list.add(new Comment(4, "## 0 (default) is unlimited."));
-		keyValuePairList.add(new KeyValuePair(2, KV_MAX_CONNECTIONS, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Maximum socket buffer size in bytes."));
-		list.add(new Comment(3, "## For stream sockets, once the buffer fills up, the sender will start backing up."));
-		list.add(new Comment(4, "## For datagram sockets, once the buffer fills up, metrics will start dropping."));
-		list.add(new Comment(5, "## Defaults to the OS default."));
-		keyValuePairList.add(new KeyValuePair(3, KV_READ_BUFFER_SIZE, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Period between keep alive probes."));
-		list.add(new Comment(3, "## Only applies to TCP sockets."));
-		list.add(new Comment(4, "## 0 disables keep alive probes."));
-		list.add(new Comment(5, "## Defaults to the OS configuration."));
-		keyValuePairList.add(new KeyValuePair(4, KV_KEEP_ALIVE_PERIOD, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Data format to consume."));
-		list.add(new Comment(3, "## Each data format has its own unique set of configuration options, read"));
-		list.add(new Comment(4, "## more about them here:"));
-		list.add(new Comment(5, "## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md"));
-		keyValuePairList.add(new KeyValuePair(5, KV_DATA_FORMAT, null, "# ", null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("ServiceInputsSocketListener { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.serviceinputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class ServiceInputsSocketListener extends ServiceInput implements Serializable
+{
+	private static final long serialVersionUID = 4597395918303640640L;
+	
+	private static final String DEFINITION_TEXT = "# Generic socket listener capable of handling multiple socket types.";
+	private static final String SIMPLE_NAME = "inputs.socket_listener";
+	private static final String FULL_NAME = "[[inputs.socket_listener]]";
+	private static final String KV_SERVICE_ADDRESS = "service_address";
+	private static final String KV_MAX_CONNECTIONS = "max_connections";
+	private static final String KV_READ_BUFFER_SIZE = "read_buffer_size";
+	private static final String KV_KEEP_ALIVE_PERIOD = "keep_alive_period";
+	private static final String KV_DATA_FORMAT = "data_format";
+	
+  
+	public ServiceInputsSocketListener() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public ServiceInputsSocketListener(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+
+	
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "## URL to listen on"));
+		list.add(new Comment(2, "## service_address=\"tcp://:8094\""));
+		list.add(new Comment(3, "## service_address=\"tcp://127.0.0.1:http\""));
+		list.add(new Comment(4, "## service_address=\"tcp4://:8094\""));
+		list.add(new Comment(5, "## service_address=\"tcp6://:8094\""));
+		list.add(new Comment(6, "## service_address=\"tcp6://[2001:db8::1]:8094\""));
+		list.add(new Comment(7, "## service_address=\"udp://:8094\""));
+		list.add(new Comment(8, "## service_address=\"udp4://:8094\""));
+		list.add(new Comment(9, "## service_address=\"udp6://:8094\""));
+		list.add(new Comment(10, "## service_address=\"unix:///tmp/telegraf.sock\""));
+		list.add(new Comment(11, "## service_address=\"unixgram:///tmp/telegraf.sock\""));
+		keyValuePairList.add(new KeyValuePair(1, KV_SERVICE_ADDRESS, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Maximum number of concurrent connections."));
+		list.add(new Comment(3, "## Only applies to stream sockets (e.g. TCP)."));
+		list.add(new Comment(4, "## 0 (default) is unlimited."));
+		keyValuePairList.add(new KeyValuePair(2, KV_MAX_CONNECTIONS, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Maximum socket buffer size in bytes."));
+		list.add(new Comment(3, "## For stream sockets, once the buffer fills up, the sender will start backing up."));
+		list.add(new Comment(4, "## For datagram sockets, once the buffer fills up, metrics will start dropping."));
+		list.add(new Comment(5, "## Defaults to the OS default."));
+		keyValuePairList.add(new KeyValuePair(3, KV_READ_BUFFER_SIZE, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Period between keep alive probes."));
+		list.add(new Comment(3, "## Only applies to TCP sockets."));
+		list.add(new Comment(4, "## 0 disables keep alive probes."));
+		list.add(new Comment(5, "## Defaults to the OS configuration."));
+		keyValuePairList.add(new KeyValuePair(4, KV_KEEP_ALIVE_PERIOD, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Data format to consume."));
+		list.add(new Comment(3, "## Each data format has its own unique set of configuration options, read"));
+		list.add(new Comment(4, "## more about them here:"));
+		list.add(new Comment(5, "## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md"));
+		keyValuePairList.add(new KeyValuePair(5, KV_DATA_FORMAT, null, "# ", null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("ServiceInputsSocketListener { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsStatsd.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsStatsd.java
index b70f233c9b3e407bf971ffafea0de1924473f74b..497e48ee1669745e88c7ebb6634af9e73fd9462d 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsStatsd.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsStatsd.java
@@ -1,126 +1,126 @@
-package eu.decideh2020.telegraf.components.serviceinputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class ServiceInputsStatsd extends ServiceInput implements Serializable
-{
-	private static final long serialVersionUID = -2942076992461234891L;
-	
-	private static final String DEFINITION_TEXT = "# Statsd Server";
-	private static final String SIMPLE_NAME = "inputs.statsd";
-	private static final String FULL_NAME = "[[inputs.statsd]]";
-	private static final String KV_SERVICE_ADDRESS = "service_address";
-	private static final String KV_DELETE_GAUGES = "delete_gauges";
-	private static final String KV_DELETE_COUNTERS = "delete_counters";
-	private static final String KV_DELETE_SETS = "delete_sets";
-	private static final String KV_DELETE_TIMINGS = "delete_timings";
-	private static final String KV_PERCENTILES = "percentiles";
-	private static final String KV_METRIC_SEPARATOR = "metric_separator";
-	private static final String KV_PARSE_DATA_DOG_TAGS = "parse_data_dog_tags";
-	private static final String KV_TEMPLATES = "templates";
-	private static final String KV_ALLOWED_PENDING_MESSAGES = "allowed_pending_messages";
-	private static final String KV_PERCENTILE_LIMIT = "percentile_limit";
-  
-
-	public ServiceInputsStatsd() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public ServiceInputsStatsd(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment, 
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-	
-  
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "## Address and port to host UDP listener on"));
-		keyValuePairList.add(new KeyValuePair(1, KV_SERVICE_ADDRESS, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## The following configuration options control when telegraf clears it's cache"));
-		list.add(new Comment(3, "## of previous values. If set to false, then telegraf will only clear it's"));
-		list.add(new Comment(4, "## cache when the daemon is restarted."));
-		list.add(new Comment(5, "## Reset gauges every interval (default=true)"));
-		keyValuePairList.add(new KeyValuePair(2, KV_DELETE_GAUGES, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Reset counters every interval (default=true)"));
-		keyValuePairList.add(new KeyValuePair(3, KV_DELETE_COUNTERS, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Reset sets every interval (default=true)"));
-		keyValuePairList.add(new KeyValuePair(4, KV_DELETE_SETS, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Reset timings & histograms every interval (default=true)"));
-		keyValuePairList.add(new KeyValuePair(5, KV_DELETE_TIMINGS, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Percentiles to calculate for timing & histogram stats"));
-		keyValuePairList.add(new KeyValuePair(6, KV_PERCENTILES, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## separator to use between elements of a statsd metric"));
-		keyValuePairList.add(new KeyValuePair(7, KV_METRIC_SEPARATOR, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Parses tags in the datadog statsd format"));
-		list.add(new Comment(3, "## http://docs.datadoghq.com/guides/dogstatsd/"));
-		keyValuePairList.add(new KeyValuePair(8, KV_PARSE_DATA_DOG_TAGS, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Statsd data translation templates, more info can be read here:"));
-		list.add(new Comment(3, "## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md#graphite"));
-		keyValuePairList.add(new KeyValuePair(9, KV_TEMPLATES, null, "# ", null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Number of UDP messages allowed to queue up, once filled,"));
-		list.add(new Comment(3, "## the statsd server will start dropping packets"));
-		keyValuePairList.add(new KeyValuePair(10, KV_ALLOWED_PENDING_MESSAGES, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Number of timing/histogram values to track per-measurement in the"));
-		list.add(new Comment(3, "## calculation of percentiles. Raising this limit increases the accuracy"));
-		list.add(new Comment(4, "## of percentiles but also increases the memory usage and cpu time."));
-		keyValuePairList.add(new KeyValuePair(11, KV_PERCENTILE_LIMIT, null, null, null, list));
-	}
-	
-  
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("ServiceInputsStatsd { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.serviceinputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class ServiceInputsStatsd extends ServiceInput implements Serializable
+{
+	private static final long serialVersionUID = -2942076992461234891L;
+	
+	private static final String DEFINITION_TEXT = "# Statsd Server";
+	private static final String SIMPLE_NAME = "inputs.statsd";
+	private static final String FULL_NAME = "[[inputs.statsd]]";
+	private static final String KV_SERVICE_ADDRESS = "service_address";
+	private static final String KV_DELETE_GAUGES = "delete_gauges";
+	private static final String KV_DELETE_COUNTERS = "delete_counters";
+	private static final String KV_DELETE_SETS = "delete_sets";
+	private static final String KV_DELETE_TIMINGS = "delete_timings";
+	private static final String KV_PERCENTILES = "percentiles";
+	private static final String KV_METRIC_SEPARATOR = "metric_separator";
+	private static final String KV_PARSE_DATA_DOG_TAGS = "parse_data_dog_tags";
+	private static final String KV_TEMPLATES = "templates";
+	private static final String KV_ALLOWED_PENDING_MESSAGES = "allowed_pending_messages";
+	private static final String KV_PERCENTILE_LIMIT = "percentile_limit";
+  
+
+	public ServiceInputsStatsd() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public ServiceInputsStatsd(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment, 
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+	
+  
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "## Address and port to host UDP listener on"));
+		keyValuePairList.add(new KeyValuePair(1, KV_SERVICE_ADDRESS, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## The following configuration options control when telegraf clears it's cache"));
+		list.add(new Comment(3, "## of previous values. If set to false, then telegraf will only clear it's"));
+		list.add(new Comment(4, "## cache when the daemon is restarted."));
+		list.add(new Comment(5, "## Reset gauges every interval (default=true)"));
+		keyValuePairList.add(new KeyValuePair(2, KV_DELETE_GAUGES, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Reset counters every interval (default=true)"));
+		keyValuePairList.add(new KeyValuePair(3, KV_DELETE_COUNTERS, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Reset sets every interval (default=true)"));
+		keyValuePairList.add(new KeyValuePair(4, KV_DELETE_SETS, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Reset timings & histograms every interval (default=true)"));
+		keyValuePairList.add(new KeyValuePair(5, KV_DELETE_TIMINGS, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Percentiles to calculate for timing & histogram stats"));
+		keyValuePairList.add(new KeyValuePair(6, KV_PERCENTILES, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## separator to use between elements of a statsd metric"));
+		keyValuePairList.add(new KeyValuePair(7, KV_METRIC_SEPARATOR, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Parses tags in the datadog statsd format"));
+		list.add(new Comment(3, "## http://docs.datadoghq.com/guides/dogstatsd/"));
+		keyValuePairList.add(new KeyValuePair(8, KV_PARSE_DATA_DOG_TAGS, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Statsd data translation templates, more info can be read here:"));
+		list.add(new Comment(3, "## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md#graphite"));
+		keyValuePairList.add(new KeyValuePair(9, KV_TEMPLATES, null, "# ", null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Number of UDP messages allowed to queue up, once filled,"));
+		list.add(new Comment(3, "## the statsd server will start dropping packets"));
+		keyValuePairList.add(new KeyValuePair(10, KV_ALLOWED_PENDING_MESSAGES, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Number of timing/histogram values to track per-measurement in the"));
+		list.add(new Comment(3, "## calculation of percentiles. Raising this limit increases the accuracy"));
+		list.add(new Comment(4, "## of percentiles but also increases the memory usage and cpu time."));
+		keyValuePairList.add(new KeyValuePair(11, KV_PERCENTILE_LIMIT, null, null, null, list));
+	}
+	
+  
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("ServiceInputsStatsd { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsTCPListener.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsTCPListener.java
index c1ae665e1aa936dd946a2de827efe43f71f29227..0827f46af392fd88ff2b10f41f35a1d21df1b817 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsTCPListener.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsTCPListener.java
@@ -1,62 +1,62 @@
-package eu.decideh2020.telegraf.components.serviceinputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class ServiceInputsTCPListener extends ServiceInput implements Serializable
-{
-	private static final long serialVersionUID = 2878911869284994118L;
-	
-	private static final String DEFINITION_TEXT = "# Generic TCP listener";
-	private static final String SIMPLE_NAME = "inputs.tcp_listener";
-	private static final String FULL_NAME = "[[inputs.tcp_listener]]";
-	
-  
-	public ServiceInputsTCPListener() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public ServiceInputsTCPListener(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "# DEPRECATED: the TCP listener plugin has been deprecated in favor of the"));
-		list.add(new Comment(2, "# socket_listener plugin"));
-		list.add(new Comment(3, "# see https://github.com/influxdata/telegraf/tree/master/plugins/inputs/socket_listener"));
-		keyValuePairList.add(new KeyValuePair(1, null, null, null, null, list));
-	}
-	
-  
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("ServiceInputsTCPListener { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.serviceinputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class ServiceInputsTCPListener extends ServiceInput implements Serializable
+{
+	private static final long serialVersionUID = 2878911869284994118L;
+	
+	private static final String DEFINITION_TEXT = "# Generic TCP listener";
+	private static final String SIMPLE_NAME = "inputs.tcp_listener";
+	private static final String FULL_NAME = "[[inputs.tcp_listener]]";
+	
+  
+	public ServiceInputsTCPListener() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public ServiceInputsTCPListener(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "# DEPRECATED: the TCP listener plugin has been deprecated in favor of the"));
+		list.add(new Comment(2, "# socket_listener plugin"));
+		list.add(new Comment(3, "# see https://github.com/influxdata/telegraf/tree/master/plugins/inputs/socket_listener"));
+		keyValuePairList.add(new KeyValuePair(1, null, null, null, null, list));
+	}
+	
+  
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("ServiceInputsTCPListener { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsTail.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsTail.java
index d518c8e96f0ceb20622576f80fd6f7ae5d043141..aa9561559789560d4326ae842c56383ce54c4545 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsTail.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsTail.java
@@ -1,88 +1,88 @@
-package eu.decideh2020.telegraf.components.serviceinputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class ServiceInputsTail extends ServiceInput implements Serializable
-{
-	private static final long serialVersionUID = 5990867612637736496L;
-	
-	private static final String DEFINITION_TEXT = "# Stream a log file, like the tail -f command";
-	private static final String SIMPLE_NAME = "inputs.tail";
-	private static final String FULL_NAME = "[[inputs.tail]]";
-	private static final String KV_FILES = "files";
-	private static final String KV_FROM_BEGINNING = "from_beginning";
-	private static final String KV_PIPE = "pipe";
-	private static final String KV_DATA_FORMAT = "data_format";
-	
-  
-	public ServiceInputsTail() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public ServiceInputsTail(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-  
-	
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-		    
-		list.add(new Comment(1, "## files to tail."));
-		list.add(new Comment(2, "## These accept standard unix glob matching rules, but with the addition of"));
-		list.add(new Comment(3, "## ** as a \"super asterisk\". ie:"));
-		list.add(new Comment(4, "##   \"/var/log/**.log\"  -> recursively find all .log files in /var/log"));
-		list.add(new Comment(5, "##   \"/var/log/*/*.log\" -> find all .log files with a parent dir in /var/log"));
-		list.add(new Comment(6, "##   \"/var/log/apache.log\" -> just tail the apache log file"));
-		list.add(new Comment(7, "##"));
-		list.add(new Comment(8, "## See https://github.com/gobwas/glob for more examples"));
-		list.add(new Comment(9, "##"));
-		keyValuePairList.add(new KeyValuePair(1, KV_FILES, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Read file from beginning."));
-		keyValuePairList.add(new KeyValuePair(2, KV_FROM_BEGINNING, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, "## Whether file is a named pipe"));
-		keyValuePairList.add(new KeyValuePair(3, KV_PIPE, null, null, null, list));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		list.add(new Comment(2, "## Data format to consume."));
-		list.add(new Comment(3, "## Each data format has its own unique set of configuration options, read"));
-		list.add(new Comment(4, "## more about them here:"));
-		list.add(new Comment(5, "## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md"));
-		keyValuePairList.add(new KeyValuePair(4, KV_DATA_FORMAT, null, null, null, list));
-	}
-  
-
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("ServiceInputsTail { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.serviceinputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class ServiceInputsTail extends ServiceInput implements Serializable
+{
+	private static final long serialVersionUID = 5990867612637736496L;
+	
+	private static final String DEFINITION_TEXT = "# Stream a log file, like the tail -f command";
+	private static final String SIMPLE_NAME = "inputs.tail";
+	private static final String FULL_NAME = "[[inputs.tail]]";
+	private static final String KV_FILES = "files";
+	private static final String KV_FROM_BEGINNING = "from_beginning";
+	private static final String KV_PIPE = "pipe";
+	private static final String KV_DATA_FORMAT = "data_format";
+	
+  
+	public ServiceInputsTail() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public ServiceInputsTail(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+  
+	
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+		    
+		list.add(new Comment(1, "## files to tail."));
+		list.add(new Comment(2, "## These accept standard unix glob matching rules, but with the addition of"));
+		list.add(new Comment(3, "## ** as a \"super asterisk\". ie:"));
+		list.add(new Comment(4, "##   \"/var/log/**.log\"  -> recursively find all .log files in /var/log"));
+		list.add(new Comment(5, "##   \"/var/log/*/*.log\" -> find all .log files with a parent dir in /var/log"));
+		list.add(new Comment(6, "##   \"/var/log/apache.log\" -> just tail the apache log file"));
+		list.add(new Comment(7, "##"));
+		list.add(new Comment(8, "## See https://github.com/gobwas/glob for more examples"));
+		list.add(new Comment(9, "##"));
+		keyValuePairList.add(new KeyValuePair(1, KV_FILES, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Read file from beginning."));
+		keyValuePairList.add(new KeyValuePair(2, KV_FROM_BEGINNING, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, "## Whether file is a named pipe"));
+		keyValuePairList.add(new KeyValuePair(3, KV_PIPE, null, null, null, list));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		list.add(new Comment(2, "## Data format to consume."));
+		list.add(new Comment(3, "## Each data format has its own unique set of configuration options, read"));
+		list.add(new Comment(4, "## more about them here:"));
+		list.add(new Comment(5, "## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md"));
+		keyValuePairList.add(new KeyValuePair(4, KV_DATA_FORMAT, null, null, null, list));
+	}
+  
+
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("ServiceInputsTail { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsUDPListener.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsUDPListener.java
index d2f3fdb99f8742ce6e70de1e822fefdfc91f84c3..abfdf049795678e47147f259220d0f455a0ecc1b 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsUDPListener.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsUDPListener.java
@@ -1,62 +1,62 @@
-package eu.decideh2020.telegraf.components.serviceinputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class ServiceInputsUDPListener extends ServiceInput implements Serializable
-{
-	private static final long serialVersionUID = 5002537897472964796L;
-	
-	private static final String DEFINITION_TEXT = "# Generic UDP listener";
-	private static final String SIMPLE_NAME = "inputs.udp_listener";
-	private static final String FULL_NAME = "[[inputs.udp_listener]]";
-  
-
-	public ServiceInputsUDPListener() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public ServiceInputsUDPListener(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-	
-  
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "# DEPRECATED: the UDP listener plugin has been deprecated in favor of the"));
-		list.add(new Comment(2, "# socket_listener plugin"));
-		list.add(new Comment(3, "# see https://github.com/influxdata/telegraf/tree/master/plugins/inputs/socket_listener"));
-		keyValuePairList.add(new KeyValuePair(1, null, null, null, null, list));
-	}
-	
-  
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("ServiceInputsUDPListener { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.serviceinputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class ServiceInputsUDPListener extends ServiceInput implements Serializable
+{
+	private static final long serialVersionUID = 5002537897472964796L;
+	
+	private static final String DEFINITION_TEXT = "# Generic UDP listener";
+	private static final String SIMPLE_NAME = "inputs.udp_listener";
+	private static final String FULL_NAME = "[[inputs.udp_listener]]";
+  
+
+	public ServiceInputsUDPListener() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public ServiceInputsUDPListener(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+	
+  
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "# DEPRECATED: the UDP listener plugin has been deprecated in favor of the"));
+		list.add(new Comment(2, "# socket_listener plugin"));
+		list.add(new Comment(3, "# see https://github.com/influxdata/telegraf/tree/master/plugins/inputs/socket_listener"));
+		keyValuePairList.add(new KeyValuePair(1, null, null, null, null, list));
+	}
+	
+  
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("ServiceInputsUDPListener { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsWebhooks.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsWebhooks.java
index 23c534a511f643fbde514ff41ef17aa993c60994..d99df05683644105184540243ebf47ebc52fee88 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsWebhooks.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/components/serviceinputs/ServiceInputsWebhooks.java
@@ -1,92 +1,92 @@
-package eu.decideh2020.telegraf.components.serviceinputs;
-
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public final class ServiceInputsWebhooks extends ServiceInput implements Serializable
-{
-	private static final long serialVersionUID = -9036754551604428682L;
-	
-	private static final String DEFINITION_TEXT = "# A Webhooks Event collector";
-	private static final String SIMPLE_NAME = "inputs.webhooks";
-	private static final String FULL_NAME = "[[inputs.webhooks]]";
-	private static final String KV_SERVICE_ADDRESS = "service_address";
-	private static final String KV_PATH = "path";
-	private static final String KV_SECRET = "secret";
-	private static final String ST_FILESTACK = "[inputs.webhooks.filestack]";
-	private static final String ST_GITHUB = "[inputs.webhooks.github]";
-	private static final String ST_MANDRILL = "[inputs.webhooks.mandrill]";
-	private static final String ST_ROLLBAR = "[inputs.webhooks.rollbar]";
-	private static final String ST_PAPERTRAIL = "[inputs.webhooks.papertrail]";
-	
-  
-	public ServiceInputsWebhooks() {
-		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
-		initComponent();
-	}
-  
-	public ServiceInputsWebhooks(final String definitionText, final String simpleName,
-			final String fullName, final String namePreComment,
-			final List<KeyValuePair> keyValuePairList) {
-		super(definitionText, simpleName, fullName, namePreComment);
-		initComponent();
-	}
-	
-  
-	public void initComponent() {
-		List<Comment> list = new ArrayList<Comment>();
-    
-		list.add(new Comment(1, "## Address and port to host Webhook listener on"));
-		keyValuePairList.add(new KeyValuePair(1, KV_SERVICE_ADDRESS, null, null, null, list));
-    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		keyValuePairList.add(new KeyValuePair(2, KV_PATH, null, null, null, null, ST_FILESTACK, ST_FILESTACK, list, null));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		keyValuePairList.add(new KeyValuePair(3, KV_PATH, null, null, null, null, ST_GITHUB, ST_GITHUB, list, null));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		keyValuePairList.add(new KeyValuePair(4, KV_SECRET, null, null, null, null, ST_GITHUB, ST_GITHUB, list, null));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		keyValuePairList.add(new KeyValuePair(5, KV_PATH, null, null, null, null, ST_MANDRILL, ST_MANDRILL, list, null));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		keyValuePairList.add(new KeyValuePair(6, KV_PATH, null, null, null, null, ST_ROLLBAR, ST_ROLLBAR, list, null));
-		    
-		list = new ArrayList<Comment>();
-		list.add(new Comment(1, ""));
-		keyValuePairList.add(new KeyValuePair(7, KV_PATH, null, null, null, null, ST_PAPERTRAIL, ST_PAPERTRAIL, list, null));
-	}
-	
-  
-	@Override
-	public String toString() {
-		StringBuffer ret = new StringBuffer();
-		ret.append("ServiceInputsWebhooks { ");
-		ret.append("index=").append(String.valueOf(getIndex().intValue()));
-		ret.append(", definition=").append(getDefinition());
-		ret.append(", name=").append(getName());
-		ret.append(", keyValuePairList=[");
-		List<KeyValuePair> list = getKeyValuePairList();
-		final int len = list.size();
-		for (int i = 0; i < len; i++) {
-			if (i > 0) {
-				ret.append(", ");
-			}
-			ret.append(list.get(i));
-		}
-		ret.append("]");
-		ret.append(" }");
-		return ret.toString();
-	}
-}
+package eu.decideh2020.telegraf.components.serviceinputs;
+
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public final class ServiceInputsWebhooks extends ServiceInput implements Serializable
+{
+	private static final long serialVersionUID = -9036754551604428682L;
+	
+	private static final String DEFINITION_TEXT = "# A Webhooks Event collector";
+	private static final String SIMPLE_NAME = "inputs.webhooks";
+	private static final String FULL_NAME = "[[inputs.webhooks]]";
+	private static final String KV_SERVICE_ADDRESS = "service_address";
+	private static final String KV_PATH = "path";
+	private static final String KV_SECRET = "secret";
+	private static final String ST_FILESTACK = "[inputs.webhooks.filestack]";
+	private static final String ST_GITHUB = "[inputs.webhooks.github]";
+	private static final String ST_MANDRILL = "[inputs.webhooks.mandrill]";
+	private static final String ST_ROLLBAR = "[inputs.webhooks.rollbar]";
+	private static final String ST_PAPERTRAIL = "[inputs.webhooks.papertrail]";
+	
+  
+	public ServiceInputsWebhooks() {
+		super(DEFINITION_TEXT, SIMPLE_NAME, FULL_NAME, null);
+		initComponent();
+	}
+  
+	public ServiceInputsWebhooks(final String definitionText, final String simpleName,
+			final String fullName, final String namePreComment,
+			final List<KeyValuePair> keyValuePairList) {
+		super(definitionText, simpleName, fullName, namePreComment);
+		initComponent();
+	}
+	
+  
+	public void initComponent() {
+		List<Comment> list = new ArrayList<Comment>();
+    
+		list.add(new Comment(1, "## Address and port to host Webhook listener on"));
+		keyValuePairList.add(new KeyValuePair(1, KV_SERVICE_ADDRESS, null, null, null, list));
+    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		keyValuePairList.add(new KeyValuePair(2, KV_PATH, null, null, null, null, ST_FILESTACK, ST_FILESTACK, list, null));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		keyValuePairList.add(new KeyValuePair(3, KV_PATH, null, null, null, null, ST_GITHUB, ST_GITHUB, list, null));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		keyValuePairList.add(new KeyValuePair(4, KV_SECRET, null, null, null, null, ST_GITHUB, ST_GITHUB, list, null));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		keyValuePairList.add(new KeyValuePair(5, KV_PATH, null, null, null, null, ST_MANDRILL, ST_MANDRILL, list, null));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		keyValuePairList.add(new KeyValuePair(6, KV_PATH, null, null, null, null, ST_ROLLBAR, ST_ROLLBAR, list, null));
+		    
+		list = new ArrayList<Comment>();
+		list.add(new Comment(1, ""));
+		keyValuePairList.add(new KeyValuePair(7, KV_PATH, null, null, null, null, ST_PAPERTRAIL, ST_PAPERTRAIL, list, null));
+	}
+	
+  
+	@Override
+	public String toString() {
+		StringBuffer ret = new StringBuffer();
+		ret.append("ServiceInputsWebhooks { ");
+		ret.append("index=").append(String.valueOf(getIndex().intValue()));
+		ret.append(", definition=").append(getDefinition());
+		ret.append(", name=").append(getName());
+		ret.append(", keyValuePairList=[");
+		List<KeyValuePair> list = getKeyValuePairList();
+		final int len = list.size();
+		for (int i = 0; i < len; i++) {
+			if (i > 0) {
+				ret.append(", ");
+			}
+			ret.append(list.get(i));
+		}
+		ret.append("]");
+		ret.append(" }");
+		return ret.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/file/FileParser.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/file/FileParser.java
index 3ca99f5ccfa0eea072fd2648fa55226229db9a5b..9bba055b0c1591458ba6358cd38287ddefd93d9a 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/file/FileParser.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/file/FileParser.java
@@ -1,329 +1,329 @@
-package eu.decideh2020.telegraf.file;
-
-import java.io.IOException;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-import eu.decideh2020.telegraf.components.document.Document;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import eu.decideh2020.telegraf.components.document.Name;
-import eu.decideh2020.telegraf.components.document.Plugin;
-
-
-public final class FileParser implements Serializable
-{	
-	/** The "serialVersionUID" constant. */
-	private static final long serialVersionUID = 1629441479335350388L;
-	
-	/** The PreComment separator. */
-	private final String PRECOMMENT_SEPARATOR = "# ";
-	
-	/** The Document. */
-	private Document document;
-	
-	
-	/**
-	 * Constructor.
-	 * @param fileUrl The fileUrl.
-	 * @throws IOException 
-	 * @throws ClassNotFoundException 
-	 * @throws IllegalAccessException 
-	 * @throws InstantiationException 
-	 */
-	public FileParser(final String fileUrl) throws InstantiationException, IllegalAccessException, ClassNotFoundException, IOException {
-		document = new FileReader().readFile(fileUrl, true);
-	}
-	
-	
-	/**
-	 * Constructor.
-	 * @param fileUrl The fileUrl.
-	 * @param readFromAbsolutePath The readFromAbsolutePath.
-	 * @throws IOException 
-	 * @throws ClassNotFoundException 
-	 * @throws IllegalAccessException 
-	 * @throws InstantiationException 
-	 */
-	public FileParser(final String fileUrl, final boolean readFromAbsolutePath) throws InstantiationException, IllegalAccessException, ClassNotFoundException, IOException {
-		document = new FileReader().readFile(fileUrl, readFromAbsolutePath);
-	}
-	
-	
-	// ***** GETTERs and SETTERs ***** //
-	/**
-	 * Gets the document.
-	 * @return Document
-	 */
-	public Document getDocument() {
-		return document;
-	}
-
-	/**
-	 * Sets the document.
-	 * @param document The document.
-	 */
-	public void setDocument(final Document document) {
-		this.document = document;
-	}
-	// ******************************* //
-	
-	
-	/**
-	 * Comments/uncomments a property.
-	 * @param pluginName The pluginName.
-	 * @param property The property.
-	 * @param comment The comment.
-	 */
-	public void changePropertyComment(final String pluginName, final String property, final boolean comment) {
-		changePropertyComment(pluginName, new Integer(1), property, comment);
-	}
-	
-	
-	/**
-	 * Comments/uncomments a property.
-	 * @param pluginName The pluginName.
-	 * @param pluginIndex The pluginIndex.
-	 * @param property The property.
-	 * @param comment The comment.
-	 */
-	public void changePropertyComment(final String pluginName, final Integer pluginIndex, final String property, final boolean comment) {
-		for (Plugin plugin : document.getPluginList()) {
-			if (plugin.getName().getFullName().indexOf("[" + pluginName + "]") != -1
-					&& plugin.getIndex().intValue() == pluginIndex.intValue()) {
-				for (KeyValuePair kv : plugin.getKeyValuePairList()) {
-					if (kv.getKey().equals(property)) {
-						kv.setPreComment(comment ? PRECOMMENT_SEPARATOR : null);
-						break;
-					}
-				}
-				break;
-			}
-		}
-	}
-	
-	
-	/**
-	 * Comments/uncomments the properties containing the substring.
-	 * @param pluginName The pluginName.
-	 * @param substring The substring.
-	 * @param comment The comment.
-	 */
-	public void changePropertiesComment(final String pluginName, final String substring, final boolean comment) {
-		changePropertiesComment(pluginName, new Integer(1), substring, comment);
-	}
-	
-	
-	/**
-	 * Comments/uncomments the properties containing the substring.
-	 * @param pluginName The pluginName.
-	 * @param pluginIndex The pluginIndex.
-	 * @param substring The substring.
-	 * @param comment The comment.
-	 */
-	public void changePropertiesComment(final String pluginName, final Integer pluginIndex, final String substring, final boolean comment) {
-		for (Plugin plugin : document.getPluginList()) {
-			if (plugin.getName().getFullName().indexOf("[" + pluginName + "]") != -1
-					&& plugin.getIndex().intValue() == pluginIndex.intValue()) {
-				for (KeyValuePair kv : plugin.getKeyValuePairList()) {
-					if (kv.getKey().indexOf(substring) != -1) {
-						kv.setPreComment(comment ? PRECOMMENT_SEPARATOR : null);
-					}
-				}
-				break;
-			}
-		}
-	}
-	
-	
-	/**
-	 * Comments/uncomments a plugin.
-	 * @param pluginName The pluginName.
-	 * @param comment The comment.
-	 * @throws CloneNotSupportedException 
-	 */
-	public void changePluginComment(final String pluginName, final boolean comment) throws CloneNotSupportedException {
-		changePluginComment(pluginName, new Integer(1), comment);
-	}
-	
-	
-	/**
-	 * Comments/uncomments a plugin.
-	 * @param pluginName The pluginName.
-	 * @param pluginIndex The pluginIndex.
-	 * @param comment The comment.
-	 * @throws CloneNotSupportedException 
-	 */
-	public void changePluginComment(final String pluginName, final Integer pluginIndex, final boolean comment) throws CloneNotSupportedException {
-		for (Plugin plugin : document.getPluginList()) {
-			if (plugin.getName().getFullName().indexOf("[" + pluginName + "]") != -1
-					&& plugin.getIndex().intValue() == pluginIndex.intValue()) {				
-				Name name = (Name)plugin.getName().clone();
-				name.setPreComment(comment ? PRECOMMENT_SEPARATOR : null);
-				plugin.setName(new Name());
-				plugin.setName(name);
-			}
-		}
-	}
-	
-	
-	/**
-	 * Changes the value of a property.
-	 * @param pluginName The pluginName.
-	 * @param property The property.
-	 * @param newValue The newValue.
-	 */
-	public void changePropertyValue(final String pluginName, final String property, final String newValue) {
-		changePropertyValue(pluginName, new Integer(1), property, newValue);
-	}
-	
-	
-	/**
-	 * Changes the value of a property.
-	 * @param pluginName The pluginName.
-	 * @param pluginIndex The pluginIndex.
-	 * @param property The property.
-	 * @param newValue The newValue.
-	 */
-	public void changePropertyValue(final String pluginName, final Integer pluginIndex, final String property, final String newValue) {
-		for (Plugin plugin : document.getPluginList()) {
-			if (plugin.getName().getFullName().indexOf("[" + pluginName + "]") != -1
-					&& plugin.getIndex().intValue() == pluginIndex.intValue()) {
-				for (KeyValuePair kv : plugin.getKeyValuePairList()) {
-					if (kv.getKey().equals(property)) {
-						kv.setValue(newValue);
-						break;
-					}
-				}
-				break;
-			}
-		}
-	}
-	
-	
-	/**
-	 * Changes all the values of a property.
-	 * @param pluginName The pluginName.
-	 * @param property The property.
-	 * @param newValues The newValues.
-	 */
-	public void changePropertyValues(final String pluginName, final String property, final List<String> newValues) {
-		changePropertyValues(pluginName, new Integer(1), property, newValues);
-	}
-	
-	
-	/**
-	 * Changes all the values of a property.
-	 * @param pluginName The pluginName.
-	 * @param pluginIndex The pluginIndex.
-	 * @param property The property.
-	 * @param newValues The newValues.
-	 */
-	public void changePropertyValues(final String pluginName, final Integer pluginIndex, final String property, final List<String> newValues) {
-		for (Plugin plugin : document.getPluginList()) {
-			if (plugin.getName().getFullName().indexOf("[" + pluginName + "]") != -1
-					&& plugin.getIndex().intValue() == pluginIndex.intValue()) {
-				for (KeyValuePair kv : plugin.getKeyValuePairList()) {
-					if (kv.getKey().equals(property) && newValues != null) {
-						StringBuffer value = new StringBuffer("[");
-						final int len = newValues.size();
-						for (int i = 0;i < len;i++) {
-							if (i > 0) {
-								value.append(", ");
-							}
-							value.append(newValues.get(i));
-						}
-						kv.setValue(value.append("]").toString());
-						break;
-					}
-				}
-				break;
-			}
-		}
-	}
-	
-	
-	/**
-	 * Duplicates a plugin.
-	 * @param pluginName The pluginName.
-	 * @throws CloneNotSupportedException 
-	 */
-	public void duplicatePlugin(final String pluginName) throws CloneNotSupportedException {
-		duplicatePlugin(pluginName, new Integer(1));
-	}
-	
-	
-	/**
-	 * Duplicates a plugin.
-	 * @param pluginName The pluginName.
-	 * @param pluginIndex The pluginIndex.
-	 * @throws CloneNotSupportedException 
-	 */
-	public void duplicatePlugin(final String pluginName, final Integer pluginIndex) throws CloneNotSupportedException {
-		Plugin newPlugin = null;
-		for (Plugin plugin : document.getPluginList()) {
-			if (plugin.getName().getFullName().indexOf("[" + pluginName + "]") != -1
-					&& plugin.getIndex().intValue() == pluginIndex.intValue()) {
-				if (newPlugin == null || plugin.getIndex().intValue() > newPlugin.getIndex().intValue()) {
-					newPlugin = (Plugin)plugin.clone();
-					List<KeyValuePair> clonedList = new ArrayList<KeyValuePair>(plugin.getKeyValuePairList().size());
-					for (KeyValuePair kv : plugin.getKeyValuePairList()) {
-						clonedList.add((KeyValuePair)kv.clone());
-					}
-					newPlugin.setKeyValuePairList(clonedList);
-				}
-			}
-		}
-		if (newPlugin != null) {
-			newPlugin.setIndex(countPluginsByName(pluginName) + 1);
-			document.getPluginList().add(newPlugin);
-		}
-	}
-	
-	
-	/**
-	 * Deletes a plugin.
-	 * @param pluginName The pluginName.
-	 */
-	public void deletePlugin(final String pluginName) {
-		deletePlugin(pluginName, new Integer(1));
-	}
-	
-	
-	/**
-	 * Deletes a plugin.
-	 * @param pluginName The pluginName.
-	 * @param pluginIndex The pluginIndex.
-	 */
-	public void deletePlugin(final String pluginName, final Integer pluginIndex) {
-		for (Plugin plugin : document.getPluginList()) {
-			if (plugin.getName().getFullName().indexOf("[" + pluginName + "]") != -1
-					&& plugin.getIndex().intValue() == pluginIndex.intValue()) {
-				document.getPluginList().remove(plugin);
-				break;
-			}
-		}
-		for (Plugin plugin : document.getPluginList()) {
-			if (plugin.getName().getFullName().indexOf("[" + pluginName + "]") != -1
-					&& plugin.getIndex().intValue() > pluginIndex.intValue()) {
-				plugin.setIndex(plugin.getIndex().intValue() - 1);
-			}
-		}
-	}
-	
-
-	/**
-	 * Counts the number of plugins with the same name.
-	 * @param pluginName The pluginName.
-	 * @return int
-	 */
-	public int countPluginsByName(final String pluginName) {
-		int result = 0;
-		for (Plugin plugin : document.getPluginList()) {
-			if (plugin.getName().getFullName().indexOf("[" + pluginName + "]") != -1) {
-				result++;
-			}
-		}
-		return result;
-	}
-}
+package eu.decideh2020.telegraf.file;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+import eu.decideh2020.telegraf.components.document.Document;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import eu.decideh2020.telegraf.components.document.Name;
+import eu.decideh2020.telegraf.components.document.Plugin;
+
+
+public final class FileParser implements Serializable
+{	
+	/** The "serialVersionUID" constant. */
+	private static final long serialVersionUID = 1629441479335350388L;
+	
+	/** The PreComment separator. */
+	private final String PRECOMMENT_SEPARATOR = "# ";
+	
+	/** The Document. */
+	private Document document;
+	
+	
+	/**
+	 * Constructor.
+	 * @param fileUrl The fileUrl.
+	 * @throws IOException 
+	 * @throws ClassNotFoundException 
+	 * @throws IllegalAccessException 
+	 * @throws InstantiationException 
+	 */
+	public FileParser(final String fileUrl) throws InstantiationException, IllegalAccessException, ClassNotFoundException, IOException {
+		document = new FileReader().readFile(fileUrl, true);
+	}
+	
+	
+	/**
+	 * Constructor.
+	 * @param fileUrl The fileUrl.
+	 * @param readFromAbsolutePath The readFromAbsolutePath.
+	 * @throws IOException 
+	 * @throws ClassNotFoundException 
+	 * @throws IllegalAccessException 
+	 * @throws InstantiationException 
+	 */
+	public FileParser(final String fileUrl, final boolean readFromAbsolutePath) throws InstantiationException, IllegalAccessException, ClassNotFoundException, IOException {
+		document = new FileReader().readFile(fileUrl, readFromAbsolutePath);
+	}
+	
+	
+	// ***** GETTERs and SETTERs ***** //
+	/**
+	 * Gets the document.
+	 * @return Document
+	 */
+	public Document getDocument() {
+		return document;
+	}
+
+	/**
+	 * Sets the document.
+	 * @param document The document.
+	 */
+	public void setDocument(final Document document) {
+		this.document = document;
+	}
+	// ******************************* //
+	
+	
+	/**
+	 * Comments/uncomments a property.
+	 * @param pluginName The pluginName.
+	 * @param property The property.
+	 * @param comment The comment.
+	 */
+	public void changePropertyComment(final String pluginName, final String property, final boolean comment) {
+		changePropertyComment(pluginName, new Integer(1), property, comment);
+	}
+	
+	
+	/**
+	 * Comments/uncomments a property.
+	 * @param pluginName The pluginName.
+	 * @param pluginIndex The pluginIndex.
+	 * @param property The property.
+	 * @param comment The comment.
+	 */
+	public void changePropertyComment(final String pluginName, final Integer pluginIndex, final String property, final boolean comment) {
+		for (Plugin plugin : document.getPluginList()) {
+			if (plugin.getName().getFullName().indexOf("[" + pluginName + "]") != -1
+					&& plugin.getIndex().intValue() == pluginIndex.intValue()) {
+				for (KeyValuePair kv : plugin.getKeyValuePairList()) {
+					if (kv.getKey().equals(property)) {
+						kv.setPreComment(comment ? PRECOMMENT_SEPARATOR : null);
+						break;
+					}
+				}
+				break;
+			}
+		}
+	}
+	
+	
+	/**
+	 * Comments/uncomments the properties containing the substring.
+	 * @param pluginName The pluginName.
+	 * @param substring The substring.
+	 * @param comment The comment.
+	 */
+	public void changePropertiesComment(final String pluginName, final String substring, final boolean comment) {
+		changePropertiesComment(pluginName, new Integer(1), substring, comment);
+	}
+	
+	
+	/**
+	 * Comments/uncomments the properties containing the substring.
+	 * @param pluginName The pluginName.
+	 * @param pluginIndex The pluginIndex.
+	 * @param substring The substring.
+	 * @param comment The comment.
+	 */
+	public void changePropertiesComment(final String pluginName, final Integer pluginIndex, final String substring, final boolean comment) {
+		for (Plugin plugin : document.getPluginList()) {
+			if (plugin.getName().getFullName().indexOf("[" + pluginName + "]") != -1
+					&& plugin.getIndex().intValue() == pluginIndex.intValue()) {
+				for (KeyValuePair kv : plugin.getKeyValuePairList()) {
+					if (kv.getKey().indexOf(substring) != -1) {
+						kv.setPreComment(comment ? PRECOMMENT_SEPARATOR : null);
+					}
+				}
+				break;
+			}
+		}
+	}
+	
+	
+	/**
+	 * Comments/uncomments a plugin.
+	 * @param pluginName The pluginName.
+	 * @param comment The comment.
+	 * @throws CloneNotSupportedException 
+	 */
+	public void changePluginComment(final String pluginName, final boolean comment) throws CloneNotSupportedException {
+		changePluginComment(pluginName, new Integer(1), comment);
+	}
+	
+	
+	/**
+	 * Comments/uncomments a plugin.
+	 * @param pluginName The pluginName.
+	 * @param pluginIndex The pluginIndex.
+	 * @param comment The comment.
+	 * @throws CloneNotSupportedException 
+	 */
+	public void changePluginComment(final String pluginName, final Integer pluginIndex, final boolean comment) throws CloneNotSupportedException {
+		for (Plugin plugin : document.getPluginList()) {
+			if (plugin.getName().getFullName().indexOf("[" + pluginName + "]") != -1
+					&& plugin.getIndex().intValue() == pluginIndex.intValue()) {				
+				Name name = (Name)plugin.getName().clone();
+				name.setPreComment(comment ? PRECOMMENT_SEPARATOR : null);
+				plugin.setName(new Name());
+				plugin.setName(name);
+			}
+		}
+	}
+	
+	
+	/**
+	 * Changes the value of a property.
+	 * @param pluginName The pluginName.
+	 * @param property The property.
+	 * @param newValue The newValue.
+	 */
+	public void changePropertyValue(final String pluginName, final String property, final String newValue) {
+		changePropertyValue(pluginName, new Integer(1), property, newValue);
+	}
+	
+	
+	/**
+	 * Changes the value of a property.
+	 * @param pluginName The pluginName.
+	 * @param pluginIndex The pluginIndex.
+	 * @param property The property.
+	 * @param newValue The newValue.
+	 */
+	public void changePropertyValue(final String pluginName, final Integer pluginIndex, final String property, final String newValue) {
+		for (Plugin plugin : document.getPluginList()) {
+			if (plugin.getName().getFullName().indexOf("[" + pluginName + "]") != -1
+					&& plugin.getIndex().intValue() == pluginIndex.intValue()) {
+				for (KeyValuePair kv : plugin.getKeyValuePairList()) {
+					if (kv.getKey().equals(property)) {
+						kv.setValue(newValue);
+						break;
+					}
+				}
+				break;
+			}
+		}
+	}
+	
+	
+	/**
+	 * Changes all the values of a property.
+	 * @param pluginName The pluginName.
+	 * @param property The property.
+	 * @param newValues The newValues.
+	 */
+	public void changePropertyValues(final String pluginName, final String property, final List<String> newValues) {
+		changePropertyValues(pluginName, new Integer(1), property, newValues);
+	}
+	
+	
+	/**
+	 * Changes all the values of a property.
+	 * @param pluginName The pluginName.
+	 * @param pluginIndex The pluginIndex.
+	 * @param property The property.
+	 * @param newValues The newValues.
+	 */
+	public void changePropertyValues(final String pluginName, final Integer pluginIndex, final String property, final List<String> newValues) {
+		for (Plugin plugin : document.getPluginList()) {
+			if (plugin.getName().getFullName().indexOf("[" + pluginName + "]") != -1
+					&& plugin.getIndex().intValue() == pluginIndex.intValue()) {
+				for (KeyValuePair kv : plugin.getKeyValuePairList()) {
+					if (kv.getKey().equals(property) && newValues != null) {
+						StringBuffer value = new StringBuffer("[");
+						final int len = newValues.size();
+						for (int i = 0;i < len;i++) {
+							if (i > 0) {
+								value.append(", ");
+							}
+							value.append(newValues.get(i));
+						}
+						kv.setValue(value.append("]").toString());
+						break;
+					}
+				}
+				break;
+			}
+		}
+	}
+	
+	
+	/**
+	 * Duplicates a plugin.
+	 * @param pluginName The pluginName.
+	 * @throws CloneNotSupportedException 
+	 */
+	public void duplicatePlugin(final String pluginName) throws CloneNotSupportedException {
+		duplicatePlugin(pluginName, new Integer(1));
+	}
+	
+	
+	/**
+	 * Duplicates a plugin.
+	 * @param pluginName The pluginName.
+	 * @param pluginIndex The pluginIndex.
+	 * @throws CloneNotSupportedException 
+	 */
+	public void duplicatePlugin(final String pluginName, final Integer pluginIndex) throws CloneNotSupportedException {
+		Plugin newPlugin = null;
+		for (Plugin plugin : document.getPluginList()) {
+			if (plugin.getName().getFullName().indexOf("[" + pluginName + "]") != -1
+					&& plugin.getIndex().intValue() == pluginIndex.intValue()) {
+				if (newPlugin == null || plugin.getIndex().intValue() > newPlugin.getIndex().intValue()) {
+					newPlugin = (Plugin)plugin.clone();
+					List<KeyValuePair> clonedList = new ArrayList<KeyValuePair>(plugin.getKeyValuePairList().size());
+					for (KeyValuePair kv : plugin.getKeyValuePairList()) {
+						clonedList.add((KeyValuePair)kv.clone());
+					}
+					newPlugin.setKeyValuePairList(clonedList);
+				}
+			}
+		}
+		if (newPlugin != null) {
+			newPlugin.setIndex(countPluginsByName(pluginName) + 1);
+			document.getPluginList().add(newPlugin);
+		}
+	}
+	
+	
+	/**
+	 * Deletes a plugin.
+	 * @param pluginName The pluginName.
+	 */
+	public void deletePlugin(final String pluginName) {
+		deletePlugin(pluginName, new Integer(1));
+	}
+	
+	
+	/**
+	 * Deletes a plugin.
+	 * @param pluginName The pluginName.
+	 * @param pluginIndex The pluginIndex.
+	 */
+	public void deletePlugin(final String pluginName, final Integer pluginIndex) {
+		for (Plugin plugin : document.getPluginList()) {
+			if (plugin.getName().getFullName().indexOf("[" + pluginName + "]") != -1
+					&& plugin.getIndex().intValue() == pluginIndex.intValue()) {
+				document.getPluginList().remove(plugin);
+				break;
+			}
+		}
+		for (Plugin plugin : document.getPluginList()) {
+			if (plugin.getName().getFullName().indexOf("[" + pluginName + "]") != -1
+					&& plugin.getIndex().intValue() > pluginIndex.intValue()) {
+				plugin.setIndex(plugin.getIndex().intValue() - 1);
+			}
+		}
+	}
+	
+
+	/**
+	 * Counts the number of plugins with the same name.
+	 * @param pluginName The pluginName.
+	 * @return int
+	 */
+	public int countPluginsByName(final String pluginName) {
+		int result = 0;
+		for (Plugin plugin : document.getPluginList()) {
+			if (plugin.getName().getFullName().indexOf("[" + pluginName + "]") != -1) {
+				result++;
+			}
+		}
+		return result;
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/file/FileReader.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/file/FileReader.java
index 4e7a22fa0ee1efd1acfdcd35cae63ba0ec74f2a0..88ff259e15f29e5302fe9dc8f6779c2aa94752a8 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/file/FileReader.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/file/FileReader.java
@@ -1,421 +1,421 @@
-package eu.decideh2020.telegraf.file;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import eu.decideh2020.telegraf.components.document.Document;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import eu.decideh2020.telegraf.components.document.Plugin;
-
-
-public final class FileReader implements Serializable
-{	
-	/** The "serialVersionUID" constant. */
-	private static final long serialVersionUID = 8707451571813201215L;
-	
-	/** The KeyValuePair separator. */
-	private final String KEYVALUEPAIR_SEPARATOR = " = ";
-	
-	/** The PreComment separator. */
-	private final String PRECOMMENT_SEPARATOR = "# ";
-	
-	/** The PostComment separator. */
-	private final String POSTCOMMENT_SEPARATOR = "# ";
-	
-	/** The multiline separator. */
-	private final String MULTILINE_SEPARATOR = "'''";
-	
-	/** The multiline data separator. */
-	private final String MULTILINE_DATA_SEPARATOR = "|@|";
-	
-	/** The Plugin map. */
-	private Map<String, String> pluginMap;
-	
-	
-	/**
-	 * Constructor.
-	 */
-	public FileReader() {
-		pluginMap = new HashMap<String, String>();
-		fillPluginMap();
-	}
-	
-	
-	// ***** GETTERs and SETTERs ***** //
-	/**
-	 * Gets the Plugin map.
-	 * @return Map
-	 */
-	public Map<String, String> getPluginMap() {
-		return pluginMap;
-	}
-
-	/**
-	 * Sets the Plugin map.
-	 * @param pluginMap The pluginMap.
-	 */
-	public void setPluginMap(final Map<String, String> pluginMap) {
-		this.pluginMap = pluginMap;
-	}
-	// ******************************* //
-	
-	
-	/**
-	 * Fills the Plugin map.
-	 */
-	private void fillPluginMap() {
-		// Global Plugins (2)
-		pluginMap.put("[global_tags]", "eu.decideh2020.telegraf.components.global.GlobalGlobalTags");
-		pluginMap.put("[agent]", "eu.decideh2020.telegraf.components.global.GlobalAgent");
-		
-		// Output Plugins (22)
-		pluginMap.put("[[outputs.influxdb]]", "eu.decideh2020.telegraf.components.outputs.OutputsInfluxDB");
-		pluginMap.put("[[outputs.amon]]", "eu.decideh2020.telegraf.components.outputs.OutputsAmon");
-		pluginMap.put("[[outputs.amqp]]", "eu.decideh2020.telegraf.components.outputs.OutputsAMQP");
-		pluginMap.put("[[outputs.cloudwatch]]", "eu.decideh2020.telegraf.components.outputs.OutputsCloudwatch");		
-		pluginMap.put("[[outputs.datadog]]", "eu.decideh2020.telegraf.components.outputs.OutputsDatadog");
-		pluginMap.put("[[outputs.discard]]", "eu.decideh2020.telegraf.components.outputs.OutputsDiscard");
-		pluginMap.put("[[outputs.elasticsearch]]", "eu.decideh2020.telegraf.components.outputs.OutputsElasticsearch");
-		pluginMap.put("[[outputs.file]]", "eu.decideh2020.telegraf.components.outputs.OutputsFile");
-		pluginMap.put("[[outputs.graphite]]", "eu.decideh2020.telegraf.components.outputs.OutputsGraphite");
-		pluginMap.put("[[outputs.graylog]]", "eu.decideh2020.telegraf.components.outputs.OutputsGraylog");
-		pluginMap.put("[[outputs.instrumental]]", "eu.decideh2020.telegraf.components.outputs.OutputsInstrumental");
-		pluginMap.put("[[outputs.kafka]]", "eu.decideh2020.telegraf.components.outputs.OutputsKafka");
-		pluginMap.put("[[outputs.kinesis]]", "eu.decideh2020.telegraf.components.outputs.OutputsKinesis");		
-		pluginMap.put("[[outputs.librato]]", "eu.decideh2020.telegraf.components.outputs.OutputsLibrato");
-		pluginMap.put("[[outputs.mqtt]]", "eu.decideh2020.telegraf.components.outputs.OutputsMQTT");
-		pluginMap.put("[[outputs.nats]]", "eu.decideh2020.telegraf.components.outputs.OutputsNATS");
-		pluginMap.put("[[outputs.nsq]]", "eu.decideh2020.telegraf.components.outputs.OutputsNSQ");
-		pluginMap.put("[[outputs.opentsdb]]", "eu.decideh2020.telegraf.components.outputs.OutputsOpenTSDB");
-		pluginMap.put("[[outputs.prometheus_client]]", "eu.decideh2020.telegraf.components.outputs.OutputsPrometheusClient");
-		pluginMap.put("[[outputs.riemann]]", "eu.decideh2020.telegraf.components.outputs.OutputsRiemann");
-		pluginMap.put("[[outputs.riemann_legacy]]", "eu.decideh2020.telegraf.components.outputs.OutputsRiemannLegacy");
-		pluginMap.put("[[outputs.socket_writer]]", "eu.decideh2020.telegraf.components.outputs.OutputsSocketWriter");
-		
-		// Processor Plugins (1)
-		pluginMap.put("[[processors.printer]]", "eu.decideh2020.telegraf.components.processor.ProcessorsPrinter");
-		
-		// Aggregator Plugins (1)
-		pluginMap.put("[[aggregators.minmax]]", "eu.decideh2020.telegraf.components.aggregator.AggregatorsMinMax");
-		
-		// Input Plugins (80)
-		pluginMap.put("[[inputs.cpu]]", "eu.decideh2020.telegraf.components.inputs.InputsCPU");
-		pluginMap.put("[[inputs.disk]]", "eu.decideh2020.telegraf.components.inputs.InputsDisk");
-		pluginMap.put("[[inputs.diskio]]", "eu.decideh2020.telegraf.components.inputs.InputsDiskIO");
-		pluginMap.put("[[inputs.kernel]]", "eu.decideh2020.telegraf.components.inputs.InputsKernel");
-		pluginMap.put("[[inputs.mem]]", "eu.decideh2020.telegraf.components.inputs.InputsMem");
-		pluginMap.put("[[inputs.processes]]", "eu.decideh2020.telegraf.components.inputs.InputsProcesses");
-		pluginMap.put("[[inputs.swap]]", "eu.decideh2020.telegraf.components.inputs.InputsSwap");
-		pluginMap.put("[[inputs.system]]", "eu.decideh2020.telegraf.components.inputs.InputsSystem");
-		pluginMap.put("[[inputs.aerospike]]", "eu.decideh2020.telegraf.components.inputs.InputsAerospike");
-		pluginMap.put("[[inputs.apache]]", "eu.decideh2020.telegraf.components.inputs.InputsApache");
-		pluginMap.put("[[inputs.bcache]]", "eu.decideh2020.telegraf.components.inputs.InputsBcache");
-		pluginMap.put("[[inputs.cassandra]]", "eu.decideh2020.telegraf.components.inputs.InputsCassandra");
-		pluginMap.put("[[inputs.ceph]]", "eu.decideh2020.telegraf.components.inputs.InputsCeph");
-		pluginMap.put("[[inputs.cgroup]]", "eu.decideh2020.telegraf.components.inputs.InputsCgroup");
-		pluginMap.put("[[inputs.chrony]]", "eu.decideh2020.telegraf.components.inputs.InputsChrony");
-		pluginMap.put("[[inputs.cloudwatch]]", "eu.decideh2020.telegraf.components.inputs.InputsCloudwatch");
-		pluginMap.put("[[inputs.conntrack]]", "eu.decideh2020.telegraf.components.inputs.InputsConntrack");
-		pluginMap.put("[[inputs.consul]]", "eu.decideh2020.telegraf.components.inputs.InputsConsul");
-		pluginMap.put("[[inputs.couchbase]]", "eu.decideh2020.telegraf.components.inputs.InputsCouchbase");
-		pluginMap.put("[[inputs.couchdb]]", "eu.decideh2020.telegraf.components.inputs.InputsCouchDB");
-		pluginMap.put("[[inputs.disque]]", "eu.decideh2020.telegraf.components.inputs.InputsDisque");
-		pluginMap.put("[[inputs.dmcache]]", "eu.decideh2020.telegraf.components.inputs.InputsDMCache");
-		pluginMap.put("[[inputs.dns_query]]", "eu.decideh2020.telegraf.components.inputs.InputsDNSQuery");
-		pluginMap.put("[[inputs.docker]]", "eu.decideh2020.telegraf.components.inputs.InputsDocker");
-		pluginMap.put("[[inputs.dovecot]]", "eu.decideh2020.telegraf.components.inputs.InputsDovecot");
-		pluginMap.put("[[inputs.elasticsearch]]", "eu.decideh2020.telegraf.components.inputs.InputsElasticsearch");
-		pluginMap.put("[[inputs.exec]]", "eu.decideh2020.telegraf.components.inputs.InputsExec");
-		pluginMap.put("[[inputs.filestat]]", "eu.decideh2020.telegraf.components.inputs.InputsFilestat");
-		pluginMap.put("[[inputs.graylog]]", "eu.decideh2020.telegraf.components.inputs.InputsGraylog");
-		pluginMap.put("[[inputs.haproxy]]", "eu.decideh2020.telegraf.components.inputs.InputsHAProxy");
-		pluginMap.put("[[inputs.hddtemp]]", "eu.decideh2020.telegraf.components.inputs.InputsHDDTemp");
-		pluginMap.put("[[inputs.http_response]]", "eu.decideh2020.telegraf.components.inputs.InputsHTTPResponse");
-		pluginMap.put("[[inputs.httpjson]]", "eu.decideh2020.telegraf.components.inputs.InputsHTTPJSON");
-		pluginMap.put("[[inputs.influxdb]]", "eu.decideh2020.telegraf.components.inputs.InputsInfluxDB");
-		pluginMap.put("[[inputs.internal]]", "eu.decideh2020.telegraf.components.inputs.InputsInternal");
-		pluginMap.put("[[inputs.interrupts]]", "eu.decideh2020.telegraf.components.inputs.InputsInterrupts");
-		pluginMap.put("[[inputs.ipmi_sensor]]", "eu.decideh2020.telegraf.components.inputs.InputsIPMISensor");
-		pluginMap.put("[[inputs.iptables]]", "eu.decideh2020.telegraf.components.inputs.InputsIPTables");
-		pluginMap.put("[[inputs.jolokia]]", "eu.decideh2020.telegraf.components.inputs.InputsJolokia");
-		pluginMap.put("[[inputs.kapacitor]]", "eu.decideh2020.telegraf.components.inputs.InputsKapacitor");
-		pluginMap.put("[[inputs.kernel_vmstat]]", "eu.decideh2020.telegraf.components.inputs.InputsKernelVMStat");
-		pluginMap.put("[[inputs.kubernetes]]", "eu.decideh2020.telegraf.components.inputs.InputsKubernetes");
-		pluginMap.put("[[inputs.leofs]]", "eu.decideh2020.telegraf.components.inputs.InputsLeoFS");
-		pluginMap.put("[[inputs.linux_sysctl_fs]]", "eu.decideh2020.telegraf.components.inputs.InputsLinuxSysCtlFS");
-		pluginMap.put("[[inputs.lustre2]]", "eu.decideh2020.telegraf.components.inputs.InputsLustre2");
-		pluginMap.put("[[inputs.mailchimp]]", "eu.decideh2020.telegraf.components.inputs.InputsMailChimp");
-		pluginMap.put("[[inputs.memcached]]", "eu.decideh2020.telegraf.components.inputs.InputsMemCached");
-		pluginMap.put("[[inputs.mesos]]", "eu.decideh2020.telegraf.components.inputs.InputsMesos");
-		pluginMap.put("[[inputs.mongodb]]", "eu.decideh2020.telegraf.components.inputs.InputsMongoDB");
-		pluginMap.put("[[inputs.mysql]]", "eu.decideh2020.telegraf.components.inputs.InputsMySQL");
-		pluginMap.put("[[inputs.net]]", "eu.decideh2020.telegraf.components.inputs.InputsNet");
-		pluginMap.put("[[inputs.net_response]]", "eu.decideh2020.telegraf.components.inputs.InputsNetResponse");
-		pluginMap.put("[[inputs.netstat]]", "eu.decideh2020.telegraf.components.inputs.InputsNetStat");
-		pluginMap.put("[[inputs.nginx]]", "eu.decideh2020.telegraf.components.inputs.InputsNginx");
-		pluginMap.put("[[inputs.nsq]]", "eu.decideh2020.telegraf.components.inputs.InputsNSQ");
-		pluginMap.put("[[inputs.nstat]]", "eu.decideh2020.telegraf.components.inputs.InputsNStat");
-		pluginMap.put("[[inputs.ntpq]]", "eu.decideh2020.telegraf.components.inputs.InputsNTPQ");
-		pluginMap.put("[[inputs.passenger]]", "eu.decideh2020.telegraf.components.inputs.InputsPassenger");
-		pluginMap.put("[[inputs.phpfpm]]", "eu.decideh2020.telegraf.components.inputs.InputsPhpfpm");
-		pluginMap.put("[[inputs.ping]]", "eu.decideh2020.telegraf.components.inputs.InputsPing");
-		pluginMap.put("[[inputs.postgresql]]", "eu.decideh2020.telegraf.components.inputs.InputsPostgreSQL");
-		pluginMap.put("[[inputs.postgresql_extensible]]", "eu.decideh2020.telegraf.components.inputs.InputsPostgreSQLExtensible");
-		pluginMap.put("[[inputs.powerdns]]", "eu.decideh2020.telegraf.components.inputs.InputsPowerDNS");
-		pluginMap.put("[[inputs.procstat]]", "eu.decideh2020.telegraf.components.inputs.InputsProcStat");
-		pluginMap.put("[[inputs.prometheus]]", "eu.decideh2020.telegraf.components.inputs.InputsPrometheus");
-		pluginMap.put("[[inputs.puppetagent]]", "eu.decideh2020.telegraf.components.inputs.InputsPuppetAgent");
-		pluginMap.put("[[inputs.rabbitmq]]", "eu.decideh2020.telegraf.components.inputs.InputsRabbitMQ");
-		pluginMap.put("[[inputs.raindrops]]", "eu.decideh2020.telegraf.components.inputs.InputsRaindrops");
-		pluginMap.put("[[inputs.redis]]", "eu.decideh2020.telegraf.components.inputs.InputsRedis");
-		pluginMap.put("[[inputs.rethinkdb]]", "eu.decideh2020.telegraf.components.inputs.InputsRethinkDB");
-		pluginMap.put("[[inputs.riak]]", "eu.decideh2020.telegraf.components.inputs.InputsRiak");
-		pluginMap.put("[[inputs.sensors]]", "eu.decideh2020.telegraf.components.inputs.InputsSensors");
-		pluginMap.put("[[inputs.snmp]]", "eu.decideh2020.telegraf.components.inputs.InputsSNMP");
-		pluginMap.put("[[inputs.sqlserver]]", "eu.decideh2020.telegraf.components.inputs.InputsSQLServer");
-		pluginMap.put("[[inputs.sysstat]]", "eu.decideh2020.telegraf.components.inputs.InputsSysStat");
-		pluginMap.put("[[inputs.trig]]", "eu.decideh2020.telegraf.components.inputs.InputsTrig");
-		pluginMap.put("[[inputs.twemproxy]]", "eu.decideh2020.telegraf.components.inputs.InputsTwemproxy");
-		pluginMap.put("[[inputs.varnish]]", "eu.decideh2020.telegraf.components.inputs.InputsVarnish");
-		pluginMap.put("[[inputs.zfs]]", "eu.decideh2020.telegraf.components.inputs.InputsZFS");
-		pluginMap.put("[[inputs.zookeeper]]", "eu.decideh2020.telegraf.components.inputs.InputsZookeeper");
-		
-		// Service Input Plugins (13)
-		pluginMap.put("[[inputs.amqp_consumer]]", "eu.decideh2020.telegraf.components.serviceinputs.ServiceInputsAMQPConsumer");
-		pluginMap.put("[[inputs.http_listener]]", "eu.decideh2020.telegraf.components.serviceinputs.ServiceInputsHTTPListener");
-		pluginMap.put("[[inputs.kafka_consumer]]", "eu.decideh2020.telegraf.components.serviceinputs.ServiceInputsKafkaConsumer");
-		pluginMap.put("[[inputs.logparser]]", "eu.decideh2020.telegraf.components.serviceinputs.ServiceInputsLogparser");
-		pluginMap.put("[[inputs.mqtt_consumer]]", "eu.decideh2020.telegraf.components.serviceinputs.ServiceInputsMQTTConsumer");
-		pluginMap.put("[[inputs.nats_consumer]]", "eu.decideh2020.telegraf.components.serviceinputs.ServiceInputsNATSConsumer");
-		pluginMap.put("[[inputs.nsq_consumer]]", "eu.decideh2020.telegraf.components.serviceinputs.ServiceInputsNSQConsumer");
-		pluginMap.put("[[inputs.socket_listener]]", "eu.decideh2020.telegraf.components.serviceinputs.ServiceInputsSocketListener");
-		pluginMap.put("[[inputs.statsd]]", "eu.decideh2020.telegraf.components.serviceinputs.ServiceInputsStatsd");
-		pluginMap.put("[[inputs.tail]]", "eu.decideh2020.telegraf.components.serviceinputs.ServiceInputsTail");
-		pluginMap.put("[[inputs.tcp_listener]]", "eu.decideh2020.telegraf.components.serviceinputs.ServiceInputsTCPListener");
-		pluginMap.put("[[inputs.udp_listener]]", "eu.decideh2020.telegraf.components.serviceinputs.ServiceInputsUDPListener");
-		pluginMap.put("[[inputs.webhooks]]", "eu.decideh2020.telegraf.components.serviceinputs.ServiceInputsWebhooks");
-	}
-	
-	
-	/**
-	 * Reads the file content.
-	 * @param fileName The fileName.
-	 * @return Document
-	 * @throws InstantiationException
-	 * @throws IllegalAccessException
-	 * @throws ClassNotFoundException
-	 * @throws IOException 
-	 */
-	public Document readFile(final String fileName, final boolean isAbsolutePath) throws InstantiationException, IllegalAccessException, ClassNotFoundException, IOException {
-		Map<String, Integer> indexMap = new HashMap<String, Integer>();
-		String pluginSimpleName = null;
-		
-		Document document = new Document();
-		final List<String> fileContent = isAbsolutePath ? loadFileToListFromAbsolutePath(fileName) : loadFileToListFromRelativePath(fileName);
-		if (!fileContent.isEmpty()) {
-			final int len = fileContent.size();
-			for (int i = 0;i < len;i++) {
-				final String line = fileContent.get(i);
-				for (String key : pluginMap.keySet()) {
-					if (line.indexOf(key) != -1) {
-						// Build Plugin object
-						Plugin plugin = (Plugin)Class.forName(pluginMap.get(key)).newInstance();
-						pluginSimpleName = plugin.getName().getSimpleName();
-						
-						// Add Plugin index to index map
-						if (!indexMap.containsKey(pluginSimpleName)) {
-							indexMap.put(pluginSimpleName, plugin.getIndex());
-						} else {
-							final int newIndex = indexMap.get(pluginSimpleName).intValue() + 1;
-							indexMap.put(pluginSimpleName, newIndex);
-							plugin.setIndex(newIndex);
-						}
-						
-						// Set global preComment
-						plugin.getName().setPreComment(getObjectPreComment(line));
-						
-						// Get the Plugin KeyValuePair list
-						final List<KeyValuePair> kvList = plugin.getKeyValuePairList();
-						for (KeyValuePair kv : kvList) {
-
-							//currentSubtable = kv.getParentSubtableName();
-							
-							// Search the key in the fileContent
- 							final int index = seachKeyValuePairIndex(fileContent, kv.getKey(), kv.getParentSubtableName(), kv.getParentSubtableFullName(), i);
-							if (index != -1) {
-								// Get the line of the KeyValuePair, and transform
-								String kvLine = fileContent.get(index);
-								kvLine = kvLine.startsWith(PRECOMMENT_SEPARATOR) ? kvLine.substring(2) : kvLine.trim();
-								
-								// Split the line to obtain de preComment, the value and the postComment
-								final String[] splittedLine = splitLine(kvLine);
-								kv.setPreComment(splittedLine[0]);
-								kv.setValue(splittedLine[1]);
-								kv.setPostComment(splittedLine[2]);
-								
-								// If the KeyValuePair is muliline
-								if (splittedLine[1].equals(MULTILINE_SEPARATOR)) {
-									StringBuffer multilineString = new StringBuffer(splittedLine[1]);
-									int multilineIndex = index + 1;
-									String multiline = fileContent.get(multilineIndex);
-									while (multiline.indexOf(MULTILINE_SEPARATOR) == -1) {
-										multiline = splittedLine[0] != null ?
-												multiline.substring(multiline.indexOf(PRECOMMENT_SEPARATOR) + 1).trim() : multiline.trim();
-										multilineString.append(MULTILINE_DATA_SEPARATOR + multiline);
-										multilineIndex++;
-										multiline = fileContent.get(multilineIndex);
-									}
-									kv.setValue(multilineString.append(MULTILINE_SEPARATOR).toString());
-								}
-								
-								// Update de main index
-								if (kv.getParentSubtableName() == null) {
-									i = index + 1;
-								}/* else if (!kv.getParentSubtableName().equals(kv.getParentSubtableFullName())) {
-									i = index;
-								}*/
-							}
-						}
-						
-						// Add Plugin to Document
-						document.getPluginList().add(plugin);
-						break;
-					}
-				}
-			}
-		}
-		return document;
-	}
-	
-	
-	/**
-	 * Reads the file from an absolute Path and loads it to a List.
-	 * @param fileName The fileName.
-	 * @return List
-	 * @throws IOException
-	 */
-	private List<String> loadFileToListFromAbsolutePath(final String fileName) throws IOException {
-		List<String> result = new ArrayList<String>();
-		BufferedReader bufferedReader = null;
-		String line = null;
-		try { 
-			bufferedReader = new BufferedReader(new java.io.FileReader(new File(fileName)));
-			while ((line = bufferedReader.readLine()) != null) {
-				result.add(line);
-            }
-		} finally {
-			if (bufferedReader != null) {
-				bufferedReader.close();
-			}
-        }
-		return result;
-	}
-	
-	
-	/**
-	 * Reads the file from a relative Path and loads it to a List.
-	 * @param fileName The fileName.
-	 * @return List
-	 * @throws IOException
-	 */
-	private List<String> loadFileToListFromRelativePath(final String fileName) throws IOException {
-		List<String> result = new ArrayList<String>();
-		InputStream inputStream = null;
-		BufferedReader bufferedReader = null;
-		String line = null;
-		try {
-			inputStream  = new FileInputStream(fileName);
-			bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
-			while ((line = bufferedReader.readLine()) != null) {
-				result.add(line);
-            }
-		} finally {
-			if (bufferedReader != null) {
-				bufferedReader.close();
-			}
-			if (inputStream != null) {
-				inputStream.close();
-			}
-        }
-		return result;
-	}
-	
-	
-	/**
-	 * Gets the preComment of the object.
-	 * @param line The line.
-	 * @return String
-	 */
-	private String getObjectPreComment(final String line) {
-		return line.startsWith(PRECOMMENT_SEPARATOR) ? PRECOMMENT_SEPARATOR : null;
-	}
-	
-	
-	/**
-	 * Searches a KeyValuePair in the fileContent.
-	 * @param fileContent The fileContent.
-	 * @param key The key.
-	 * @param parentSubtableName The parentSubtableName.
-	 * @param parentSubtableFullName The parentSubtableFullName.
-	 * @param startIndex The startIndex.
-	 * @return int
-	 */
-	private int seachKeyValuePairIndex(final List<String> fileContent, final String key, String parentSubtableName, String parentSubtableFullName, int startIndex) {
-		final int len = fileContent.size();
-		for (int i = startIndex; i < len;i++) {
-			final String line = fileContent.get(i);
-			if (parentSubtableFullName == null) {
-				if (line.indexOf(key + KEYVALUEPAIR_SEPARATOR) != -1) {
-					return i;
-				}
-			} else {
-				int auxIndex = i;
-				while (fileContent.get(auxIndex).indexOf(parentSubtableFullName) == -1) {
-					auxIndex++;
-				}
-				while (auxIndex < len) {
-					String lineAux = fileContent.get(auxIndex);
-					if (lineAux.indexOf(key + KEYVALUEPAIR_SEPARATOR) != -1) {
-						return auxIndex;
-					}
-					auxIndex++;
-				}
-			}
-		}
-		return -1;
-	}
-	
-	
-	/**
-	 * Splits a KeyValuePair line. [0] = preComment ; [1] = value ; [2] = postComment
-	 * @param line The line.
-	 * @return String[]
-	 */
-	private String[] splitLine(final String line) {
-		String[] result = new String[3];
-		final String[] array = line.split(KEYVALUEPAIR_SEPARATOR);
-		if (array != null) {
-			// PreComment
-			result[0] = array[0].trim().startsWith(PRECOMMENT_SEPARATOR) ? PRECOMMENT_SEPARATOR : null;
-			
-			// Value and postComment
-			final int postCommentIndex = array[1].trim().indexOf(POSTCOMMENT_SEPARATOR);
-			if (postCommentIndex != -1) {
-				result[1] = array[1].trim().substring(0, postCommentIndex);
-				result[2] = array[1].trim().substring(postCommentIndex);
-			} else {
-				result[1] = array[1].trim();
-			}
-		}
-		return result;
-	}
-}
+package eu.decideh2020.telegraf.file;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import eu.decideh2020.telegraf.components.document.Document;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import eu.decideh2020.telegraf.components.document.Plugin;
+
+
+public final class FileReader implements Serializable
+{	
+	/** The "serialVersionUID" constant. */
+	private static final long serialVersionUID = 8707451571813201215L;
+	
+	/** The KeyValuePair separator. */
+	private final String KEYVALUEPAIR_SEPARATOR = " = ";
+	
+	/** The PreComment separator. */
+	private final String PRECOMMENT_SEPARATOR = "# ";
+	
+	/** The PostComment separator. */
+	private final String POSTCOMMENT_SEPARATOR = "# ";
+	
+	/** The multiline separator. */
+	private final String MULTILINE_SEPARATOR = "'''";
+	
+	/** The multiline data separator. */
+	private final String MULTILINE_DATA_SEPARATOR = "|@|";
+	
+	/** The Plugin map. */
+	private Map<String, String> pluginMap;
+	
+	
+	/**
+	 * Constructor.
+	 */
+	public FileReader() {
+		pluginMap = new HashMap<String, String>();
+		fillPluginMap();
+	}
+	
+	
+	// ***** GETTERs and SETTERs ***** //
+	/**
+	 * Gets the Plugin map.
+	 * @return Map
+	 */
+	public Map<String, String> getPluginMap() {
+		return pluginMap;
+	}
+
+	/**
+	 * Sets the Plugin map.
+	 * @param pluginMap The pluginMap.
+	 */
+	public void setPluginMap(final Map<String, String> pluginMap) {
+		this.pluginMap = pluginMap;
+	}
+	// ******************************* //
+	
+	
+	/**
+	 * Fills the Plugin map.
+	 */
+	private void fillPluginMap() {
+		// Global Plugins (2)
+		pluginMap.put("[global_tags]", "eu.decideh2020.telegraf.components.global.GlobalGlobalTags");
+		pluginMap.put("[agent]", "eu.decideh2020.telegraf.components.global.GlobalAgent");
+		
+		// Output Plugins (22)
+		pluginMap.put("[[outputs.influxdb]]", "eu.decideh2020.telegraf.components.outputs.OutputsInfluxDB");
+		pluginMap.put("[[outputs.amon]]", "eu.decideh2020.telegraf.components.outputs.OutputsAmon");
+		pluginMap.put("[[outputs.amqp]]", "eu.decideh2020.telegraf.components.outputs.OutputsAMQP");
+		pluginMap.put("[[outputs.cloudwatch]]", "eu.decideh2020.telegraf.components.outputs.OutputsCloudwatch");		
+		pluginMap.put("[[outputs.datadog]]", "eu.decideh2020.telegraf.components.outputs.OutputsDatadog");
+		pluginMap.put("[[outputs.discard]]", "eu.decideh2020.telegraf.components.outputs.OutputsDiscard");
+		pluginMap.put("[[outputs.elasticsearch]]", "eu.decideh2020.telegraf.components.outputs.OutputsElasticsearch");
+		pluginMap.put("[[outputs.file]]", "eu.decideh2020.telegraf.components.outputs.OutputsFile");
+		pluginMap.put("[[outputs.graphite]]", "eu.decideh2020.telegraf.components.outputs.OutputsGraphite");
+		pluginMap.put("[[outputs.graylog]]", "eu.decideh2020.telegraf.components.outputs.OutputsGraylog");
+		pluginMap.put("[[outputs.instrumental]]", "eu.decideh2020.telegraf.components.outputs.OutputsInstrumental");
+		pluginMap.put("[[outputs.kafka]]", "eu.decideh2020.telegraf.components.outputs.OutputsKafka");
+		pluginMap.put("[[outputs.kinesis]]", "eu.decideh2020.telegraf.components.outputs.OutputsKinesis");		
+		pluginMap.put("[[outputs.librato]]", "eu.decideh2020.telegraf.components.outputs.OutputsLibrato");
+		pluginMap.put("[[outputs.mqtt]]", "eu.decideh2020.telegraf.components.outputs.OutputsMQTT");
+		pluginMap.put("[[outputs.nats]]", "eu.decideh2020.telegraf.components.outputs.OutputsNATS");
+		pluginMap.put("[[outputs.nsq]]", "eu.decideh2020.telegraf.components.outputs.OutputsNSQ");
+		pluginMap.put("[[outputs.opentsdb]]", "eu.decideh2020.telegraf.components.outputs.OutputsOpenTSDB");
+		pluginMap.put("[[outputs.prometheus_client]]", "eu.decideh2020.telegraf.components.outputs.OutputsPrometheusClient");
+		pluginMap.put("[[outputs.riemann]]", "eu.decideh2020.telegraf.components.outputs.OutputsRiemann");
+		pluginMap.put("[[outputs.riemann_legacy]]", "eu.decideh2020.telegraf.components.outputs.OutputsRiemannLegacy");
+		pluginMap.put("[[outputs.socket_writer]]", "eu.decideh2020.telegraf.components.outputs.OutputsSocketWriter");
+		
+		// Processor Plugins (1)
+		pluginMap.put("[[processors.printer]]", "eu.decideh2020.telegraf.components.processor.ProcessorsPrinter");
+		
+		// Aggregator Plugins (1)
+		pluginMap.put("[[aggregators.minmax]]", "eu.decideh2020.telegraf.components.aggregator.AggregatorsMinMax");
+		
+		// Input Plugins (80)
+		pluginMap.put("[[inputs.cpu]]", "eu.decideh2020.telegraf.components.inputs.InputsCPU");
+		pluginMap.put("[[inputs.disk]]", "eu.decideh2020.telegraf.components.inputs.InputsDisk");
+		pluginMap.put("[[inputs.diskio]]", "eu.decideh2020.telegraf.components.inputs.InputsDiskIO");
+		pluginMap.put("[[inputs.kernel]]", "eu.decideh2020.telegraf.components.inputs.InputsKernel");
+		pluginMap.put("[[inputs.mem]]", "eu.decideh2020.telegraf.components.inputs.InputsMem");
+		pluginMap.put("[[inputs.processes]]", "eu.decideh2020.telegraf.components.inputs.InputsProcesses");
+		pluginMap.put("[[inputs.swap]]", "eu.decideh2020.telegraf.components.inputs.InputsSwap");
+		pluginMap.put("[[inputs.system]]", "eu.decideh2020.telegraf.components.inputs.InputsSystem");
+		pluginMap.put("[[inputs.aerospike]]", "eu.decideh2020.telegraf.components.inputs.InputsAerospike");
+		pluginMap.put("[[inputs.apache]]", "eu.decideh2020.telegraf.components.inputs.InputsApache");
+		pluginMap.put("[[inputs.bcache]]", "eu.decideh2020.telegraf.components.inputs.InputsBcache");
+		pluginMap.put("[[inputs.cassandra]]", "eu.decideh2020.telegraf.components.inputs.InputsCassandra");
+		pluginMap.put("[[inputs.ceph]]", "eu.decideh2020.telegraf.components.inputs.InputsCeph");
+		pluginMap.put("[[inputs.cgroup]]", "eu.decideh2020.telegraf.components.inputs.InputsCgroup");
+		pluginMap.put("[[inputs.chrony]]", "eu.decideh2020.telegraf.components.inputs.InputsChrony");
+		pluginMap.put("[[inputs.cloudwatch]]", "eu.decideh2020.telegraf.components.inputs.InputsCloudwatch");
+		pluginMap.put("[[inputs.conntrack]]", "eu.decideh2020.telegraf.components.inputs.InputsConntrack");
+		pluginMap.put("[[inputs.consul]]", "eu.decideh2020.telegraf.components.inputs.InputsConsul");
+		pluginMap.put("[[inputs.couchbase]]", "eu.decideh2020.telegraf.components.inputs.InputsCouchbase");
+		pluginMap.put("[[inputs.couchdb]]", "eu.decideh2020.telegraf.components.inputs.InputsCouchDB");
+		pluginMap.put("[[inputs.disque]]", "eu.decideh2020.telegraf.components.inputs.InputsDisque");
+		pluginMap.put("[[inputs.dmcache]]", "eu.decideh2020.telegraf.components.inputs.InputsDMCache");
+		pluginMap.put("[[inputs.dns_query]]", "eu.decideh2020.telegraf.components.inputs.InputsDNSQuery");
+		pluginMap.put("[[inputs.docker]]", "eu.decideh2020.telegraf.components.inputs.InputsDocker");
+		pluginMap.put("[[inputs.dovecot]]", "eu.decideh2020.telegraf.components.inputs.InputsDovecot");
+		pluginMap.put("[[inputs.elasticsearch]]", "eu.decideh2020.telegraf.components.inputs.InputsElasticsearch");
+		pluginMap.put("[[inputs.exec]]", "eu.decideh2020.telegraf.components.inputs.InputsExec");
+		pluginMap.put("[[inputs.filestat]]", "eu.decideh2020.telegraf.components.inputs.InputsFilestat");
+		pluginMap.put("[[inputs.graylog]]", "eu.decideh2020.telegraf.components.inputs.InputsGraylog");
+		pluginMap.put("[[inputs.haproxy]]", "eu.decideh2020.telegraf.components.inputs.InputsHAProxy");
+		pluginMap.put("[[inputs.hddtemp]]", "eu.decideh2020.telegraf.components.inputs.InputsHDDTemp");
+		pluginMap.put("[[inputs.http_response]]", "eu.decideh2020.telegraf.components.inputs.InputsHTTPResponse");
+		pluginMap.put("[[inputs.httpjson]]", "eu.decideh2020.telegraf.components.inputs.InputsHTTPJSON");
+		pluginMap.put("[[inputs.influxdb]]", "eu.decideh2020.telegraf.components.inputs.InputsInfluxDB");
+		pluginMap.put("[[inputs.internal]]", "eu.decideh2020.telegraf.components.inputs.InputsInternal");
+		pluginMap.put("[[inputs.interrupts]]", "eu.decideh2020.telegraf.components.inputs.InputsInterrupts");
+		pluginMap.put("[[inputs.ipmi_sensor]]", "eu.decideh2020.telegraf.components.inputs.InputsIPMISensor");
+		pluginMap.put("[[inputs.iptables]]", "eu.decideh2020.telegraf.components.inputs.InputsIPTables");
+		pluginMap.put("[[inputs.jolokia]]", "eu.decideh2020.telegraf.components.inputs.InputsJolokia");
+		pluginMap.put("[[inputs.kapacitor]]", "eu.decideh2020.telegraf.components.inputs.InputsKapacitor");
+		pluginMap.put("[[inputs.kernel_vmstat]]", "eu.decideh2020.telegraf.components.inputs.InputsKernelVMStat");
+		pluginMap.put("[[inputs.kubernetes]]", "eu.decideh2020.telegraf.components.inputs.InputsKubernetes");
+		pluginMap.put("[[inputs.leofs]]", "eu.decideh2020.telegraf.components.inputs.InputsLeoFS");
+		pluginMap.put("[[inputs.linux_sysctl_fs]]", "eu.decideh2020.telegraf.components.inputs.InputsLinuxSysCtlFS");
+		pluginMap.put("[[inputs.lustre2]]", "eu.decideh2020.telegraf.components.inputs.InputsLustre2");
+		pluginMap.put("[[inputs.mailchimp]]", "eu.decideh2020.telegraf.components.inputs.InputsMailChimp");
+		pluginMap.put("[[inputs.memcached]]", "eu.decideh2020.telegraf.components.inputs.InputsMemCached");
+		pluginMap.put("[[inputs.mesos]]", "eu.decideh2020.telegraf.components.inputs.InputsMesos");
+		pluginMap.put("[[inputs.mongodb]]", "eu.decideh2020.telegraf.components.inputs.InputsMongoDB");
+		pluginMap.put("[[inputs.mysql]]", "eu.decideh2020.telegraf.components.inputs.InputsMySQL");
+		pluginMap.put("[[inputs.net]]", "eu.decideh2020.telegraf.components.inputs.InputsNet");
+		pluginMap.put("[[inputs.net_response]]", "eu.decideh2020.telegraf.components.inputs.InputsNetResponse");
+		pluginMap.put("[[inputs.netstat]]", "eu.decideh2020.telegraf.components.inputs.InputsNetStat");
+		pluginMap.put("[[inputs.nginx]]", "eu.decideh2020.telegraf.components.inputs.InputsNginx");
+		pluginMap.put("[[inputs.nsq]]", "eu.decideh2020.telegraf.components.inputs.InputsNSQ");
+		pluginMap.put("[[inputs.nstat]]", "eu.decideh2020.telegraf.components.inputs.InputsNStat");
+		pluginMap.put("[[inputs.ntpq]]", "eu.decideh2020.telegraf.components.inputs.InputsNTPQ");
+		pluginMap.put("[[inputs.passenger]]", "eu.decideh2020.telegraf.components.inputs.InputsPassenger");
+		pluginMap.put("[[inputs.phpfpm]]", "eu.decideh2020.telegraf.components.inputs.InputsPhpfpm");
+		pluginMap.put("[[inputs.ping]]", "eu.decideh2020.telegraf.components.inputs.InputsPing");
+		pluginMap.put("[[inputs.postgresql]]", "eu.decideh2020.telegraf.components.inputs.InputsPostgreSQL");
+		pluginMap.put("[[inputs.postgresql_extensible]]", "eu.decideh2020.telegraf.components.inputs.InputsPostgreSQLExtensible");
+		pluginMap.put("[[inputs.powerdns]]", "eu.decideh2020.telegraf.components.inputs.InputsPowerDNS");
+		pluginMap.put("[[inputs.procstat]]", "eu.decideh2020.telegraf.components.inputs.InputsProcStat");
+		pluginMap.put("[[inputs.prometheus]]", "eu.decideh2020.telegraf.components.inputs.InputsPrometheus");
+		pluginMap.put("[[inputs.puppetagent]]", "eu.decideh2020.telegraf.components.inputs.InputsPuppetAgent");
+		pluginMap.put("[[inputs.rabbitmq]]", "eu.decideh2020.telegraf.components.inputs.InputsRabbitMQ");
+		pluginMap.put("[[inputs.raindrops]]", "eu.decideh2020.telegraf.components.inputs.InputsRaindrops");
+		pluginMap.put("[[inputs.redis]]", "eu.decideh2020.telegraf.components.inputs.InputsRedis");
+		pluginMap.put("[[inputs.rethinkdb]]", "eu.decideh2020.telegraf.components.inputs.InputsRethinkDB");
+		pluginMap.put("[[inputs.riak]]", "eu.decideh2020.telegraf.components.inputs.InputsRiak");
+		pluginMap.put("[[inputs.sensors]]", "eu.decideh2020.telegraf.components.inputs.InputsSensors");
+		pluginMap.put("[[inputs.snmp]]", "eu.decideh2020.telegraf.components.inputs.InputsSNMP");
+		pluginMap.put("[[inputs.sqlserver]]", "eu.decideh2020.telegraf.components.inputs.InputsSQLServer");
+		pluginMap.put("[[inputs.sysstat]]", "eu.decideh2020.telegraf.components.inputs.InputsSysStat");
+		pluginMap.put("[[inputs.trig]]", "eu.decideh2020.telegraf.components.inputs.InputsTrig");
+		pluginMap.put("[[inputs.twemproxy]]", "eu.decideh2020.telegraf.components.inputs.InputsTwemproxy");
+		pluginMap.put("[[inputs.varnish]]", "eu.decideh2020.telegraf.components.inputs.InputsVarnish");
+		pluginMap.put("[[inputs.zfs]]", "eu.decideh2020.telegraf.components.inputs.InputsZFS");
+		pluginMap.put("[[inputs.zookeeper]]", "eu.decideh2020.telegraf.components.inputs.InputsZookeeper");
+		
+		// Service Input Plugins (13)
+		pluginMap.put("[[inputs.amqp_consumer]]", "eu.decideh2020.telegraf.components.serviceinputs.ServiceInputsAMQPConsumer");
+		pluginMap.put("[[inputs.http_listener]]", "eu.decideh2020.telegraf.components.serviceinputs.ServiceInputsHTTPListener");
+		pluginMap.put("[[inputs.kafka_consumer]]", "eu.decideh2020.telegraf.components.serviceinputs.ServiceInputsKafkaConsumer");
+		pluginMap.put("[[inputs.logparser]]", "eu.decideh2020.telegraf.components.serviceinputs.ServiceInputsLogparser");
+		pluginMap.put("[[inputs.mqtt_consumer]]", "eu.decideh2020.telegraf.components.serviceinputs.ServiceInputsMQTTConsumer");
+		pluginMap.put("[[inputs.nats_consumer]]", "eu.decideh2020.telegraf.components.serviceinputs.ServiceInputsNATSConsumer");
+		pluginMap.put("[[inputs.nsq_consumer]]", "eu.decideh2020.telegraf.components.serviceinputs.ServiceInputsNSQConsumer");
+		pluginMap.put("[[inputs.socket_listener]]", "eu.decideh2020.telegraf.components.serviceinputs.ServiceInputsSocketListener");
+		pluginMap.put("[[inputs.statsd]]", "eu.decideh2020.telegraf.components.serviceinputs.ServiceInputsStatsd");
+		pluginMap.put("[[inputs.tail]]", "eu.decideh2020.telegraf.components.serviceinputs.ServiceInputsTail");
+		pluginMap.put("[[inputs.tcp_listener]]", "eu.decideh2020.telegraf.components.serviceinputs.ServiceInputsTCPListener");
+		pluginMap.put("[[inputs.udp_listener]]", "eu.decideh2020.telegraf.components.serviceinputs.ServiceInputsUDPListener");
+		pluginMap.put("[[inputs.webhooks]]", "eu.decideh2020.telegraf.components.serviceinputs.ServiceInputsWebhooks");
+	}
+	
+	
+	/**
+	 * Reads the file content.
+	 * @param fileName The fileName.
+	 * @return Document
+	 * @throws InstantiationException
+	 * @throws IllegalAccessException
+	 * @throws ClassNotFoundException
+	 * @throws IOException 
+	 */
+	public Document readFile(final String fileName, final boolean isAbsolutePath) throws InstantiationException, IllegalAccessException, ClassNotFoundException, IOException {
+		Map<String, Integer> indexMap = new HashMap<String, Integer>();
+		String pluginSimpleName = null;
+		
+		Document document = new Document();
+		final List<String> fileContent = isAbsolutePath ? loadFileToListFromAbsolutePath(fileName) : loadFileToListFromRelativePath(fileName);
+		if (!fileContent.isEmpty()) {
+			final int len = fileContent.size();
+			for (int i = 0;i < len;i++) {
+				final String line = fileContent.get(i);
+				for (String key : pluginMap.keySet()) {
+					if (line.indexOf(key) != -1) {
+						// Build Plugin object
+						Plugin plugin = (Plugin)Class.forName(pluginMap.get(key)).newInstance();
+						pluginSimpleName = plugin.getName().getSimpleName();
+						
+						// Add Plugin index to index map
+						if (!indexMap.containsKey(pluginSimpleName)) {
+							indexMap.put(pluginSimpleName, plugin.getIndex());
+						} else {
+							final int newIndex = indexMap.get(pluginSimpleName).intValue() + 1;
+							indexMap.put(pluginSimpleName, newIndex);
+							plugin.setIndex(newIndex);
+						}
+						
+						// Set global preComment
+						plugin.getName().setPreComment(getObjectPreComment(line));
+						
+						// Get the Plugin KeyValuePair list
+						final List<KeyValuePair> kvList = plugin.getKeyValuePairList();
+						for (KeyValuePair kv : kvList) {
+
+							//currentSubtable = kv.getParentSubtableName();
+							
+							// Search the key in the fileContent
+ 							final int index = seachKeyValuePairIndex(fileContent, kv.getKey(), kv.getParentSubtableName(), kv.getParentSubtableFullName(), i);
+							if (index != -1) {
+								// Get the line of the KeyValuePair, and transform
+								String kvLine = fileContent.get(index);
+								kvLine = kvLine.startsWith(PRECOMMENT_SEPARATOR) ? kvLine.substring(2) : kvLine.trim();
+								
+								// Split the line to obtain de preComment, the value and the postComment
+								final String[] splittedLine = splitLine(kvLine);
+								kv.setPreComment(splittedLine[0]);
+								kv.setValue(splittedLine[1]);
+								kv.setPostComment(splittedLine[2]);
+								
+								// If the KeyValuePair is muliline
+								if (splittedLine[1].equals(MULTILINE_SEPARATOR)) {
+									StringBuffer multilineString = new StringBuffer(splittedLine[1]);
+									int multilineIndex = index + 1;
+									String multiline = fileContent.get(multilineIndex);
+									while (multiline.indexOf(MULTILINE_SEPARATOR) == -1) {
+										multiline = splittedLine[0] != null ?
+												multiline.substring(multiline.indexOf(PRECOMMENT_SEPARATOR) + 1).trim() : multiline.trim();
+										multilineString.append(MULTILINE_DATA_SEPARATOR + multiline);
+										multilineIndex++;
+										multiline = fileContent.get(multilineIndex);
+									}
+									kv.setValue(multilineString.append(MULTILINE_SEPARATOR).toString());
+								}
+								
+								// Update de main index
+								if (kv.getParentSubtableName() == null) {
+									i = index + 1;
+								}/* else if (!kv.getParentSubtableName().equals(kv.getParentSubtableFullName())) {
+									i = index;
+								}*/
+							}
+						}
+						
+						// Add Plugin to Document
+						document.getPluginList().add(plugin);
+						break;
+					}
+				}
+			}
+		}
+		return document;
+	}
+	
+	
+	/**
+	 * Reads the file from an absolute Path and loads it to a List.
+	 * @param fileName The fileName.
+	 * @return List
+	 * @throws IOException
+	 */
+	private List<String> loadFileToListFromAbsolutePath(final String fileName) throws IOException {
+		List<String> result = new ArrayList<String>();
+		BufferedReader bufferedReader = null;
+		String line = null;
+		try { 
+			bufferedReader = new BufferedReader(new java.io.FileReader(new File(fileName)));
+			while ((line = bufferedReader.readLine()) != null) {
+				result.add(line);
+            }
+		} finally {
+			if (bufferedReader != null) {
+				bufferedReader.close();
+			}
+        }
+		return result;
+	}
+	
+	
+	/**
+	 * Reads the file from a relative Path and loads it to a List.
+	 * @param fileName The fileName.
+	 * @return List
+	 * @throws IOException
+	 */
+	private List<String> loadFileToListFromRelativePath(final String fileName) throws IOException {
+		List<String> result = new ArrayList<String>();
+		InputStream inputStream = null;
+		BufferedReader bufferedReader = null;
+		String line = null;
+		try {
+			inputStream  = new FileInputStream(fileName);
+			bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
+			while ((line = bufferedReader.readLine()) != null) {
+				result.add(line);
+            }
+		} finally {
+			if (bufferedReader != null) {
+				bufferedReader.close();
+			}
+			if (inputStream != null) {
+				inputStream.close();
+			}
+        }
+		return result;
+	}
+	
+	
+	/**
+	 * Gets the preComment of the object.
+	 * @param line The line.
+	 * @return String
+	 */
+	private String getObjectPreComment(final String line) {
+		return line.startsWith(PRECOMMENT_SEPARATOR) ? PRECOMMENT_SEPARATOR : null;
+	}
+	
+	
+	/**
+	 * Searches a KeyValuePair in the fileContent.
+	 * @param fileContent The fileContent.
+	 * @param key The key.
+	 * @param parentSubtableName The parentSubtableName.
+	 * @param parentSubtableFullName The parentSubtableFullName.
+	 * @param startIndex The startIndex.
+	 * @return int
+	 */
+	private int seachKeyValuePairIndex(final List<String> fileContent, final String key, String parentSubtableName, String parentSubtableFullName, int startIndex) {
+		final int len = fileContent.size();
+		for (int i = startIndex; i < len;i++) {
+			final String line = fileContent.get(i);
+			if (parentSubtableFullName == null) {
+				if (line.indexOf(key + KEYVALUEPAIR_SEPARATOR) != -1) {
+					return i;
+				}
+			} else {
+				int auxIndex = i;
+				while (fileContent.get(auxIndex).indexOf(parentSubtableFullName) == -1) {
+					auxIndex++;
+				}
+				while (auxIndex < len) {
+					String lineAux = fileContent.get(auxIndex);
+					if (lineAux.indexOf(key + KEYVALUEPAIR_SEPARATOR) != -1) {
+						return auxIndex;
+					}
+					auxIndex++;
+				}
+			}
+		}
+		return -1;
+	}
+	
+	
+	/**
+	 * Splits a KeyValuePair line. [0] = preComment ; [1] = value ; [2] = postComment
+	 * @param line The line.
+	 * @return String[]
+	 */
+	private String[] splitLine(final String line) {
+		String[] result = new String[3];
+		final String[] array = line.split(KEYVALUEPAIR_SEPARATOR);
+		if (array != null) {
+			// PreComment
+			result[0] = array[0].trim().startsWith(PRECOMMENT_SEPARATOR) ? PRECOMMENT_SEPARATOR : null;
+			
+			// Value and postComment
+			final int postCommentIndex = array[1].trim().indexOf(POSTCOMMENT_SEPARATOR);
+			if (postCommentIndex != -1) {
+				result[1] = array[1].trim().substring(0, postCommentIndex);
+				result[2] = array[1].trim().substring(postCommentIndex);
+			} else {
+				result[1] = array[1].trim();
+			}
+		}
+		return result;
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/file/FileViewer.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/file/FileViewer.java
index 63f0a64d579ef53d7bd0e5e006d0423010e043e5..f5444b31483f9a39704267f98160bdcef90ae2d5 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/file/FileViewer.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/file/FileViewer.java
@@ -1,24 +1,24 @@
-package eu.decideh2020.telegraf.file;
-
-import java.io.Serializable;
-import java.util.List;
-
-import eu.decideh2020.telegraf.components.document.Document;
-
-
-public final class FileViewer implements Serializable
-{
-	private static final long serialVersionUID = 7242500063898235915L;
-  
-	public static void viewFileContentConsole(final List<String> fileContent) {
-		for (String str : fileContent) {
-			System.out.println(str);
-		}
-	}
-  
-	
-	public static void viewDocumentConsole(Document document) throws CloneNotSupportedException {
-		final List<String> list = FileWriter.convertDocumentToFileFormat(document);
-		viewFileContentConsole(list);
-	}
-}
+package eu.decideh2020.telegraf.file;
+
+import java.io.Serializable;
+import java.util.List;
+
+import eu.decideh2020.telegraf.components.document.Document;
+
+
+public final class FileViewer implements Serializable
+{
+	private static final long serialVersionUID = 7242500063898235915L;
+  
+	public static void viewFileContentConsole(final List<String> fileContent) {
+		for (String str : fileContent) {
+			System.out.println(str);
+		}
+	}
+  
+	
+	public static void viewDocumentConsole(Document document) throws CloneNotSupportedException {
+		final List<String> list = FileWriter.convertDocumentToFileFormat(document);
+		viewFileContentConsole(list);
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/file/FileWriter.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/file/FileWriter.java
index 5a23ae7b08c8d319c6c748ed8ebbfeebca05f041..aefade1a4e45fe1049e30b69da8f00cf7c955862 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/file/FileWriter.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/file/FileWriter.java
@@ -1,457 +1,457 @@
-package eu.decideh2020.telegraf.file;
-
-import java.io.BufferedWriter;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-import eu.decideh2020.telegraf.components.aggregator.Aggregator;
-import eu.decideh2020.telegraf.components.document.Comment;
-import eu.decideh2020.telegraf.components.document.Document;
-import eu.decideh2020.telegraf.components.document.FileDescriptor;
-import eu.decideh2020.telegraf.components.document.KeyValuePair;
-import eu.decideh2020.telegraf.components.document.Plugin;
-import eu.decideh2020.telegraf.components.global.Global;
-import eu.decideh2020.telegraf.components.inputs.Input;
-import eu.decideh2020.telegraf.components.outputs.Output;
-import eu.decideh2020.telegraf.components.processor.Processor;
-import eu.decideh2020.telegraf.components.serviceinputs.ServiceInput;
-
-
-public final class FileWriter implements Serializable
-{	
-	/** The "serialVersionUID" constant. */
-	private static final long serialVersionUID = 9089627246365086681L;
-		
-	/** The "multiline String" symbol. */
-	private static final String MULTILINE_SEPARATOR = "'''";
-	
-	/** The "multiline String" separator. */
-	private static final String MULTILINE_DATA_SEPARATOR = "\\|@\\|";
-	
-	
-	/**
-	 * Converts the Plugin object in a list with the right file format.
-	 * @param plugin The Plugin object.
-	 * @return List
-	 * @throws CloneNotSupportedException 
-	 */
-	public static List<String> convertPluginToFileFormat(final Plugin plugin) throws CloneNotSupportedException {
-		// Declare variables
-		List<String> result = new ArrayList<String>();
-		String currentSubtable = null;
-		
-		// Build the definition and the name
-		result.add(writeDefinition(plugin.getName().getPreComment(), plugin.getDefinition().getText()));
-		result.add(writeName(plugin.getName().getPreComment(), plugin.getName().getFullName()));
-		
-		// Build KeyValuePair's
-		for (KeyValuePair kv : plugin.getKeyValuePairList()) {
-			KeyValuePair kvCloned = (KeyValuePair)kv.clone();
-			if (kvCloned.getParentSubtableFullName() == null) {
-				// Write KeyValuePair's not belonging to a subtable
-				if (kvCloned.getCommentList() != null) {
-					for (Comment comment : kvCloned.getCommentList()) {
-						result.add(writeComment(plugin.getName().getPreComment(), "  ", comment.getText(), null, null));
-					}
-				}
-				if (kvCloned.getValue() == null || !kvCloned.getValue().startsWith(MULTILINE_SEPARATOR)) {
-					result.add(writeKeyValuePair(plugin.getName().getPreComment(), "  ", " ", kvCloned));
-				}
-				
-				// Write multiline Strings
-				if (kvCloned.getValue() != null && kvCloned.getValue().startsWith(MULTILINE_SEPARATOR)) {
-					final String[] array = getMultilineArray(kvCloned.getValue());
-					kvCloned.setValue(MULTILINE_SEPARATOR);
-					result.add(writeKeyValuePair(plugin.getName().getPreComment(), "  ", "  ", kvCloned));
-					if (array != null && array.length >= 1) {
-						for (int i = 0;i < array.length;i++) {
-							if (array[i].trim().length() > 0) {
-								result.add(writeSingleText(plugin.getName().getPreComment(), kvCloned.getPreComment(), "  ", array[i]));
-							}
-						}
-					}
-					result.add(writeSingleText(plugin.getName().getPreComment(), kvCloned.getPreComment(), "  ", MULTILINE_SEPARATOR));
-				}
-			} else {
-				// Write KeyValuePair's belonging to a subtable
-				// Write a subtable
-				if (currentSubtable == null || !currentSubtable.equals(kvCloned.getParentSubtableName())) {
-					if (!kvCloned.getParentSubtableCommentList().isEmpty()) {
-						for (Comment comment : kvCloned.getParentSubtableCommentList()) {
-							result.add(writeComment(plugin.getName().getPreComment(), "  ", comment.getText(), kvCloned.getParentSubtableFullName(), kvCloned.getPreComment()));
-						}
-					}
-					result.add(writeSubtable(plugin.getName().getPreComment(), "  ", kvCloned.getParentSubtableFullName(), kvCloned.getParentSubtablePreComment()));
-					currentSubtable = kvCloned.getParentSubtableName();
-				}
-
-				// Write the KeyValuePair
-				if (kvCloned.getCommentList() != null) {
-					for (Comment comment : kvCloned.getCommentList()) {
-						result.add(writeComment(plugin.getName().getPreComment(), "  ", comment.getText(), kvCloned.getParentSubtableFullName(), kvCloned.getPreComment()));
-					}
-				}
-				if (kvCloned.getValue() == null || !kvCloned.getValue().startsWith(MULTILINE_SEPARATOR)) {
-					result.add(writeKeyValuePair(plugin.getName().getPreComment(), "  ", "  ", kvCloned));
-				}
-				
-				// Write multiline Strings
-				if (kvCloned.getValue() != null && kvCloned.getValue().startsWith(MULTILINE_SEPARATOR)) {
-					final String[] array = getMultilineArray(kvCloned.getValue());
-					kvCloned.setValue(MULTILINE_SEPARATOR);
-					result.add(writeKeyValuePair(plugin.getName().getPreComment(), "  ", "  ", kvCloned));
-					if (array != null && array.length >= 1) {
-						for (int i = 0;i < array.length;i++) {
-							if (array[i].trim().length() > 0) {
-								result.add(writeSingleText(plugin.getName().getPreComment(), kvCloned.getPreComment(), "  ", array[i]));
-							}
-						}
-					}
-					result.add(writeSingleText(plugin.getName().getPreComment(), kvCloned.getPreComment(), "    ", MULTILINE_SEPARATOR));
-				}
-			}
-		}
-
-		return result;
-	}
-	
-	
-	/**
-	 * Converts the Document object in a list with the right file format.
-	 * @param document The Document object.
-	 * @return List
-	 * @throws CloneNotSupportedException 
-	 */
-	public static List<String> convertDocumentToFileFormat(final Document document) throws CloneNotSupportedException {
-		// Declare variables
-		List<String> result = new ArrayList<String>();
-		
-		// Add the FileDescriptor header
-		for (int i = 0;i < FileDescriptor.FILE_DESCRIPTOR_HEADER.length;i++) {
-			result.add(FileDescriptor.FILE_DESCRIPTOR_HEADER[i]);
-		}
-		result.add("");
-		result.add("");
-		
-		// Add the Global Plugin list to result
-		List<Plugin> list = document.getPluginList();
-		for (Plugin plugin : list) {
-			if (plugin instanceof Global) {
-				result.addAll(convertPluginToFileFormat(plugin));
-				result.add("");
-				result.add("");
-			}
-		}
-		
-		// Add the Output Plugin list to result
-		boolean fileDescriptorOutputPluginsWritten = false;
-		for (Plugin plugin : list) {
-			if (plugin instanceof Output) {
-				if (!fileDescriptorOutputPluginsWritten) {
-					for (int i = 0;i < FileDescriptor.FILE_DESCRIPTOR_OUTPUT_PLUGINS.length;i++) {
-						result.add(FileDescriptor.FILE_DESCRIPTOR_OUTPUT_PLUGINS[i]);
-					}
-					fileDescriptorOutputPluginsWritten = true;
-				}
-				result.addAll(convertPluginToFileFormat(plugin));
-				result.add("");
-				result.add("");
-			}
-		}
-		
-		// Add the Processor Plugin list to result
-		boolean fileDescriptorProcessorPluginsWritten = false;
-		for (Plugin plugin : list) {
-			if (plugin instanceof Processor) {
-				if (!fileDescriptorProcessorPluginsWritten) {
-					for (int i = 0;i < FileDescriptor.FILE_DESCRIPTOR_PROCESSOR_PLUGINS.length;i++) {
-						result.add(FileDescriptor.FILE_DESCRIPTOR_PROCESSOR_PLUGINS[i]);
-					}
-					fileDescriptorProcessorPluginsWritten = true;
-				}
-				result.addAll(convertPluginToFileFormat(plugin));
-				result.add("");
-				result.add("");
-			}
-		}
-		
-		// Add the Aggregator Plugin list to result
-		boolean fileDescriptorAggregatorPluginsWritten = false;
-		for (Plugin plugin : list) {
-			if (plugin instanceof Aggregator) {
-				if (!fileDescriptorAggregatorPluginsWritten) {
-					for (int i = 0;i < FileDescriptor.FILE_DESCRIPTOR_AGGREGATOR_PLUGINS.length;i++) {
-						result.add(FileDescriptor.FILE_DESCRIPTOR_AGGREGATOR_PLUGINS[i]);
-					}
-					fileDescriptorAggregatorPluginsWritten = true;
-				}
-				result.addAll(convertPluginToFileFormat(plugin));
-				result.add("");
-				result.add("");
-			}
-		}
-		
-		// Add the Input Plugin list to result
-		boolean fileDescriptorInputPluginsWritten = false;
-		for (Plugin plugin : list) {
-			if (plugin instanceof Input) {
-				if (!fileDescriptorInputPluginsWritten) {
-					for (int i = 0;i < FileDescriptor.FILE_DESCRIPTOR_INPUT_PLUGINS.length;i++) {
-						result.add(FileDescriptor.FILE_DESCRIPTOR_INPUT_PLUGINS[i]);
-					}
-					fileDescriptorInputPluginsWritten = true;
-				}
-				result.addAll(convertPluginToFileFormat(plugin));
-				result.add("");
-				result.add("");
-			}
-		}
-		
-		// Add the Service Input Plugin list to result
-		boolean fileDescriptorServiceInputPluginsWritten = false;
-		for (Plugin plugin : list) {
-			if (plugin instanceof ServiceInput) {
-				if (!fileDescriptorServiceInputPluginsWritten) {
-					for (int i = 0;i < FileDescriptor.FILE_DESCRIPTOR_SERVICE_INPUT_PLUGINS.length;i++) {
-						result.add(FileDescriptor.FILE_DESCRIPTOR_SERVICE_INPUT_PLUGINS[i]);
-					}
-					fileDescriptorServiceInputPluginsWritten = true;
-				}
-				result.addAll(convertPluginToFileFormat(plugin));
-				result.add("");
-				result.add("");
-			}
-		}
-		
-		return result;
-	}
-	
-	
-	/**
-	 * Writes the Document object in a file.
-	 * @param fileName The fileName.
-	 * @param document The Document object.
-	 * @throws IOException 
-	 * @throws CloneNotSupportedException 
-	 */
-	public static void writeFile(final String fileName, final Document document) throws IOException, CloneNotSupportedException {
-		writeFileToAbsolutePath(fileName, document);
-	}
-	
-	
-	/**
-	 * Writes the Document object in a file.
-	 * @param fileName The fileName.
-	 * @param writeToAbsolutePath The writeToAbsolutePath.
-	 * @param document The Document object.
-	 * @throws IOException 
-	 * @throws CloneNotSupportedException 
-	 */
-	public static void writeFile(final String fileName, final boolean writeToAbsolutePath, final Document document) throws IOException, CloneNotSupportedException {
-		if (writeToAbsolutePath) {
-			writeFileToAbsolutePath(fileName, document);
-		} else {
-			writeFileToRelativePath(fileName, document);
-		}
-	}
-	
-	
-	/**
-	 * Writes the Document object in a file with relative path.
-	 * @param fileName The fileName.
-	 * @param document The Document object.
-	 * @throws IOException 
-	 * @throws CloneNotSupportedException 
-	 */
-	private static void writeFileToRelativePath(final String fileName, final Document document) throws IOException, CloneNotSupportedException {
-		final List<String> fileContent = convertDocumentToFileFormat(document);
-		
-		OutputStream outputStream = null;
-		BufferedWriter bufferedWriter = null;
-		try {
-			outputStream  = new FileOutputStream(fileName);
-			bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));
-			for (String line : fileContent) {
-				bufferedWriter.write(line);
-				bufferedWriter.newLine();
-			}
-		} finally {
-			if (bufferedWriter != null) {
-				bufferedWriter.close();
-			}
-			if (outputStream != null) {
-				outputStream.close();
-			}
-        }
-	}
-	
-	
-	/**
-	 * Writes the Document object in a file with absolute path.
-	 * @param fileName The fileName.
-	 * @param document The Document object.
-	 * @throws IOException 
-	 * @throws CloneNotSupportedException 
-	 */
-	private static void writeFileToAbsolutePath(final String fileName, final Document document) throws IOException, CloneNotSupportedException {
-		final List<String> fileContent = convertDocumentToFileFormat(document);
-		
-		OutputStream outputStream = null;
-		BufferedWriter bufferedWriter = null;
-		try {
-			outputStream  = new FileOutputStream(fileName);
-			bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));
-			for (String line : fileContent) {
-				bufferedWriter.write(line);
-				bufferedWriter.newLine();
-			}
-		} finally {
-			if (bufferedWriter != null) {
-				bufferedWriter.close();
-			}
-			if (outputStream != null) {
-				outputStream.close();
-			}
-        }
-	}
-	
-
-	/**
-	 * Writes the definition.
-	 * @param preComment The preComment.
-	 * @param definitionText The definitionText.
-	 * @return String
-	 */
-	private static String writeDefinition(final String preComment, final String definitionText) {
-		return (new StringBuffer(preComment != null ? preComment : "").append(definitionText)).toString();
-	}
-	
-	
-	/**
-	 * Writes the name.
-	 * @param preComment The preComment.
-	 * @param fullName The fullName.
-	 * @return String
-	 */
-	private static String writeName(final String preComment, final String fullName) {
-		return (new StringBuffer(preComment != null ? preComment : "").append(fullName)).toString();
-	}
-	
-	
-	/**
-	 * Writes a comment.
-	 * @param preComment The preComment.
-	 * @param indent The indent.
-	 * @param commentText The commentText.
-	 * @param subtableFullName The subtableFullName.
-	 * @param keyValuePairPreComment The keyValuePairPreComment.
-	 * @return String
-	 */
-	private static String writeComment(final String preComment, final String indent,
-			final String commentText, final String subtableFullName, final String keyValuePairPreComment) {
-		StringBuffer buffer = new StringBuffer(preComment != null ? preComment : "").append(indent);
-		String extraIndent = "";
-		if (subtableFullName!= null) {
-			final String[] arrayIndent = subtableFullName.split("\\.");
-			if (arrayIndent.length > 3) {
-				extraIndent = "  ";
-				buffer.append(keyValuePairPreComment != null ? keyValuePairPreComment : "").append(extraIndent);
-			}
-		}
-		//buffer.append(extraIndent).append(commentText);
-		buffer.append(commentText).append(extraIndent);
-		return buffer.toString();
-	}
-	
-	
-	/**
-	 * Writes a KeyValuePair.
-	 * @param preComment The preComment.
-	 * @param preCommentIndent The preCommentIndent.
-	 * @param postCommentIndent The postCommentIndent.
-	 * @param keyValuePair The KeyValuePair.
-	 * @return String
-	 */
-	private static String writeKeyValuePair(final String preComment, final String preCommentIndent, final String postCommentIndent, final KeyValuePair keyValuePair) {
-		StringBuffer buffer = new StringBuffer("");
-		if (keyValuePair.getKey() != null) {
-			buffer.append(preComment != null ? preComment : "").append(preCommentIndent);
-			if (keyValuePair.getParentSubtableFullName() != null) {
-				String extraIndent = "";
-				final String[] arrayIndent = keyValuePair.getParentSubtableFullName().split("\\.");
-				if (arrayIndent.length >= 3) {
-					for (int i = 2;i < arrayIndent.length;i++) {
-						extraIndent += "  ";
-					}
-				}
-				buffer.append(keyValuePair.getParentSubtablePreComment() != null ? keyValuePair.getParentSubtablePreComment() : "").append(extraIndent);
-			} else {
-				buffer.append(keyValuePair.getPreComment() != null ? keyValuePair.getPreComment() : "");
-			}
-			buffer.append(keyValuePair.getKey()).append(" = ").append(keyValuePair.getValue());
-			if (keyValuePair.getPostComment() != null) {
-				buffer.append(postCommentIndent).append(keyValuePair.getPostComment());
-			}
-		}
-		return buffer.toString();
-	}
-	
-
-	/**
-	 * Writes a subtable.
-	 * @param preComment The preComment.
-	 * @param indent The indent.
-	 * @param subtableFullName The subtableFullName.
-	 * @param subtablePreComment The subtablePreComment.
-	 * @return String
-	 */
-	private static String writeSubtable(final String preComment, final String indent,
-			final String subtableFullName, final String subtablePreComment) {
-		StringBuffer buffer = new StringBuffer(preComment != null ? preComment : "");
-		String extraIndent = "";
-		final String[] arrayIndent = subtableFullName.split("\\.");
-		if (arrayIndent.length > 3) {
-			for (int i = 3;i < arrayIndent.length;i++) {
-				extraIndent += "  ";
-			}
-		}
-		if (subtablePreComment != null) {
-			buffer.append(indent).append(subtablePreComment).append(extraIndent).append(subtableFullName);
-		} else {
-			buffer.append(indent).append(subtableFullName).append(extraIndent);
-		}
-		return buffer.toString();
-	}
-	
-	
-	/**
-	 * Gets the multiline array of Strings.
-	 * @param value The value.
-	 * @return String[]
-	 */
-	private static String[] getMultilineArray(final String value) {		
-		final String newValue = value.substring(value.indexOf(MULTILINE_SEPARATOR) +
-				MULTILINE_SEPARATOR.length(), value.lastIndexOf(MULTILINE_SEPARATOR));
-		return newValue.split(MULTILINE_DATA_SEPARATOR);
-	}
-	
-	
-	/**
-	 * Writes a single text.
-	 * @param pluginPreComment The pluginPreComment.
-	 * @param keyValuePairPreComment The keyValuePairPreComment.
-	 * @param indent The indent.
-	 * @param text The text.
-	 * @return String
-	 */
-	private static String writeSingleText(final String pluginPreComment, final String keyValuePairPreComment, final String indent, final String text) {
-		StringBuffer buffer = new StringBuffer(pluginPreComment != null ? pluginPreComment : "");
-		buffer.append(indent).append(keyValuePairPreComment != null ? keyValuePairPreComment : "").append(text);
-		return buffer.toString();
-	}
-}
+package eu.decideh2020.telegraf.file;
+
+import java.io.BufferedWriter;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+import eu.decideh2020.telegraf.components.aggregator.Aggregator;
+import eu.decideh2020.telegraf.components.document.Comment;
+import eu.decideh2020.telegraf.components.document.Document;
+import eu.decideh2020.telegraf.components.document.FileDescriptor;
+import eu.decideh2020.telegraf.components.document.KeyValuePair;
+import eu.decideh2020.telegraf.components.document.Plugin;
+import eu.decideh2020.telegraf.components.global.Global;
+import eu.decideh2020.telegraf.components.inputs.Input;
+import eu.decideh2020.telegraf.components.outputs.Output;
+import eu.decideh2020.telegraf.components.processor.Processor;
+import eu.decideh2020.telegraf.components.serviceinputs.ServiceInput;
+
+
+public final class FileWriter implements Serializable
+{	
+	/** The "serialVersionUID" constant. */
+	private static final long serialVersionUID = 9089627246365086681L;
+		
+	/** The "multiline String" symbol. */
+	private static final String MULTILINE_SEPARATOR = "'''";
+	
+	/** The "multiline String" separator. */
+	private static final String MULTILINE_DATA_SEPARATOR = "\\|@\\|";
+	
+	
+	/**
+	 * Converts the Plugin object in a list with the right file format.
+	 * @param plugin The Plugin object.
+	 * @return List
+	 * @throws CloneNotSupportedException 
+	 */
+	public static List<String> convertPluginToFileFormat(final Plugin plugin) throws CloneNotSupportedException {
+		// Declare variables
+		List<String> result = new ArrayList<String>();
+		String currentSubtable = null;
+		
+		// Build the definition and the name
+		result.add(writeDefinition(plugin.getName().getPreComment(), plugin.getDefinition().getText()));
+		result.add(writeName(plugin.getName().getPreComment(), plugin.getName().getFullName()));
+		
+		// Build KeyValuePair's
+		for (KeyValuePair kv : plugin.getKeyValuePairList()) {
+			KeyValuePair kvCloned = (KeyValuePair)kv.clone();
+			if (kvCloned.getParentSubtableFullName() == null) {
+				// Write KeyValuePair's not belonging to a subtable
+				if (kvCloned.getCommentList() != null) {
+					for (Comment comment : kvCloned.getCommentList()) {
+						result.add(writeComment(plugin.getName().getPreComment(), "  ", comment.getText(), null, null));
+					}
+				}
+				if (kvCloned.getValue() == null || !kvCloned.getValue().startsWith(MULTILINE_SEPARATOR)) {
+					result.add(writeKeyValuePair(plugin.getName().getPreComment(), "  ", " ", kvCloned));
+				}
+				
+				// Write multiline Strings
+				if (kvCloned.getValue() != null && kvCloned.getValue().startsWith(MULTILINE_SEPARATOR)) {
+					final String[] array = getMultilineArray(kvCloned.getValue());
+					kvCloned.setValue(MULTILINE_SEPARATOR);
+					result.add(writeKeyValuePair(plugin.getName().getPreComment(), "  ", "  ", kvCloned));
+					if (array != null && array.length >= 1) {
+						for (int i = 0;i < array.length;i++) {
+							if (array[i].trim().length() > 0) {
+								result.add(writeSingleText(plugin.getName().getPreComment(), kvCloned.getPreComment(), "  ", array[i]));
+							}
+						}
+					}
+					result.add(writeSingleText(plugin.getName().getPreComment(), kvCloned.getPreComment(), "  ", MULTILINE_SEPARATOR));
+				}
+			} else {
+				// Write KeyValuePair's belonging to a subtable
+				// Write a subtable
+				if (currentSubtable == null || !currentSubtable.equals(kvCloned.getParentSubtableName())) {
+					if (!kvCloned.getParentSubtableCommentList().isEmpty()) {
+						for (Comment comment : kvCloned.getParentSubtableCommentList()) {
+							result.add(writeComment(plugin.getName().getPreComment(), "  ", comment.getText(), kvCloned.getParentSubtableFullName(), kvCloned.getPreComment()));
+						}
+					}
+					result.add(writeSubtable(plugin.getName().getPreComment(), "  ", kvCloned.getParentSubtableFullName(), kvCloned.getParentSubtablePreComment()));
+					currentSubtable = kvCloned.getParentSubtableName();
+				}
+
+				// Write the KeyValuePair
+				if (kvCloned.getCommentList() != null) {
+					for (Comment comment : kvCloned.getCommentList()) {
+						result.add(writeComment(plugin.getName().getPreComment(), "  ", comment.getText(), kvCloned.getParentSubtableFullName(), kvCloned.getPreComment()));
+					}
+				}
+				if (kvCloned.getValue() == null || !kvCloned.getValue().startsWith(MULTILINE_SEPARATOR)) {
+					result.add(writeKeyValuePair(plugin.getName().getPreComment(), "  ", "  ", kvCloned));
+				}
+				
+				// Write multiline Strings
+				if (kvCloned.getValue() != null && kvCloned.getValue().startsWith(MULTILINE_SEPARATOR)) {
+					final String[] array = getMultilineArray(kvCloned.getValue());
+					kvCloned.setValue(MULTILINE_SEPARATOR);
+					result.add(writeKeyValuePair(plugin.getName().getPreComment(), "  ", "  ", kvCloned));
+					if (array != null && array.length >= 1) {
+						for (int i = 0;i < array.length;i++) {
+							if (array[i].trim().length() > 0) {
+								result.add(writeSingleText(plugin.getName().getPreComment(), kvCloned.getPreComment(), "  ", array[i]));
+							}
+						}
+					}
+					result.add(writeSingleText(plugin.getName().getPreComment(), kvCloned.getPreComment(), "    ", MULTILINE_SEPARATOR));
+				}
+			}
+		}
+
+		return result;
+	}
+	
+	
+	/**
+	 * Converts the Document object in a list with the right file format.
+	 * @param document The Document object.
+	 * @return List
+	 * @throws CloneNotSupportedException 
+	 */
+	public static List<String> convertDocumentToFileFormat(final Document document) throws CloneNotSupportedException {
+		// Declare variables
+		List<String> result = new ArrayList<String>();
+		
+		// Add the FileDescriptor header
+		for (int i = 0;i < FileDescriptor.FILE_DESCRIPTOR_HEADER.length;i++) {
+			result.add(FileDescriptor.FILE_DESCRIPTOR_HEADER[i]);
+		}
+		result.add("");
+		result.add("");
+		
+		// Add the Global Plugin list to result
+		List<Plugin> list = document.getPluginList();
+		for (Plugin plugin : list) {
+			if (plugin instanceof Global) {
+				result.addAll(convertPluginToFileFormat(plugin));
+				result.add("");
+				result.add("");
+			}
+		}
+		
+		// Add the Output Plugin list to result
+		boolean fileDescriptorOutputPluginsWritten = false;
+		for (Plugin plugin : list) {
+			if (plugin instanceof Output) {
+				if (!fileDescriptorOutputPluginsWritten) {
+					for (int i = 0;i < FileDescriptor.FILE_DESCRIPTOR_OUTPUT_PLUGINS.length;i++) {
+						result.add(FileDescriptor.FILE_DESCRIPTOR_OUTPUT_PLUGINS[i]);
+					}
+					fileDescriptorOutputPluginsWritten = true;
+				}
+				result.addAll(convertPluginToFileFormat(plugin));
+				result.add("");
+				result.add("");
+			}
+		}
+		
+		// Add the Processor Plugin list to result
+		boolean fileDescriptorProcessorPluginsWritten = false;
+		for (Plugin plugin : list) {
+			if (plugin instanceof Processor) {
+				if (!fileDescriptorProcessorPluginsWritten) {
+					for (int i = 0;i < FileDescriptor.FILE_DESCRIPTOR_PROCESSOR_PLUGINS.length;i++) {
+						result.add(FileDescriptor.FILE_DESCRIPTOR_PROCESSOR_PLUGINS[i]);
+					}
+					fileDescriptorProcessorPluginsWritten = true;
+				}
+				result.addAll(convertPluginToFileFormat(plugin));
+				result.add("");
+				result.add("");
+			}
+		}
+		
+		// Add the Aggregator Plugin list to result
+		boolean fileDescriptorAggregatorPluginsWritten = false;
+		for (Plugin plugin : list) {
+			if (plugin instanceof Aggregator) {
+				if (!fileDescriptorAggregatorPluginsWritten) {
+					for (int i = 0;i < FileDescriptor.FILE_DESCRIPTOR_AGGREGATOR_PLUGINS.length;i++) {
+						result.add(FileDescriptor.FILE_DESCRIPTOR_AGGREGATOR_PLUGINS[i]);
+					}
+					fileDescriptorAggregatorPluginsWritten = true;
+				}
+				result.addAll(convertPluginToFileFormat(plugin));
+				result.add("");
+				result.add("");
+			}
+		}
+		
+		// Add the Input Plugin list to result
+		boolean fileDescriptorInputPluginsWritten = false;
+		for (Plugin plugin : list) {
+			if (plugin instanceof Input) {
+				if (!fileDescriptorInputPluginsWritten) {
+					for (int i = 0;i < FileDescriptor.FILE_DESCRIPTOR_INPUT_PLUGINS.length;i++) {
+						result.add(FileDescriptor.FILE_DESCRIPTOR_INPUT_PLUGINS[i]);
+					}
+					fileDescriptorInputPluginsWritten = true;
+				}
+				result.addAll(convertPluginToFileFormat(plugin));
+				result.add("");
+				result.add("");
+			}
+		}
+		
+		// Add the Service Input Plugin list to result
+		boolean fileDescriptorServiceInputPluginsWritten = false;
+		for (Plugin plugin : list) {
+			if (plugin instanceof ServiceInput) {
+				if (!fileDescriptorServiceInputPluginsWritten) {
+					for (int i = 0;i < FileDescriptor.FILE_DESCRIPTOR_SERVICE_INPUT_PLUGINS.length;i++) {
+						result.add(FileDescriptor.FILE_DESCRIPTOR_SERVICE_INPUT_PLUGINS[i]);
+					}
+					fileDescriptorServiceInputPluginsWritten = true;
+				}
+				result.addAll(convertPluginToFileFormat(plugin));
+				result.add("");
+				result.add("");
+			}
+		}
+		
+		return result;
+	}
+	
+	
+	/**
+	 * Writes the Document object in a file.
+	 * @param fileName The fileName.
+	 * @param document The Document object.
+	 * @throws IOException 
+	 * @throws CloneNotSupportedException 
+	 */
+	public static void writeFile(final String fileName, final Document document) throws IOException, CloneNotSupportedException {
+		writeFileToAbsolutePath(fileName, document);
+	}
+	
+	
+	/**
+	 * Writes the Document object in a file.
+	 * @param fileName The fileName.
+	 * @param writeToAbsolutePath The writeToAbsolutePath.
+	 * @param document The Document object.
+	 * @throws IOException 
+	 * @throws CloneNotSupportedException 
+	 */
+	public static void writeFile(final String fileName, final boolean writeToAbsolutePath, final Document document) throws IOException, CloneNotSupportedException {
+		if (writeToAbsolutePath) {
+			writeFileToAbsolutePath(fileName, document);
+		} else {
+			writeFileToRelativePath(fileName, document);
+		}
+	}
+	
+	
+	/**
+	 * Writes the Document object in a file with relative path.
+	 * @param fileName The fileName.
+	 * @param document The Document object.
+	 * @throws IOException 
+	 * @throws CloneNotSupportedException 
+	 */
+	private static void writeFileToRelativePath(final String fileName, final Document document) throws IOException, CloneNotSupportedException {
+		final List<String> fileContent = convertDocumentToFileFormat(document);
+		
+		OutputStream outputStream = null;
+		BufferedWriter bufferedWriter = null;
+		try {
+			outputStream  = new FileOutputStream(fileName);
+			bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));
+			for (String line : fileContent) {
+				bufferedWriter.write(line);
+				bufferedWriter.newLine();
+			}
+		} finally {
+			if (bufferedWriter != null) {
+				bufferedWriter.close();
+			}
+			if (outputStream != null) {
+				outputStream.close();
+			}
+        }
+	}
+	
+	
+	/**
+	 * Writes the Document object in a file with absolute path.
+	 * @param fileName The fileName.
+	 * @param document The Document object.
+	 * @throws IOException 
+	 * @throws CloneNotSupportedException 
+	 */
+	private static void writeFileToAbsolutePath(final String fileName, final Document document) throws IOException, CloneNotSupportedException {
+		final List<String> fileContent = convertDocumentToFileFormat(document);
+		
+		OutputStream outputStream = null;
+		BufferedWriter bufferedWriter = null;
+		try {
+			outputStream  = new FileOutputStream(fileName);
+			bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));
+			for (String line : fileContent) {
+				bufferedWriter.write(line);
+				bufferedWriter.newLine();
+			}
+		} finally {
+			if (bufferedWriter != null) {
+				bufferedWriter.close();
+			}
+			if (outputStream != null) {
+				outputStream.close();
+			}
+        }
+	}
+	
+
+	/**
+	 * Writes the definition.
+	 * @param preComment The preComment.
+	 * @param definitionText The definitionText.
+	 * @return String
+	 */
+	private static String writeDefinition(final String preComment, final String definitionText) {
+		return (new StringBuffer(preComment != null ? preComment : "").append(definitionText)).toString();
+	}
+	
+	
+	/**
+	 * Writes the name.
+	 * @param preComment The preComment.
+	 * @param fullName The fullName.
+	 * @return String
+	 */
+	private static String writeName(final String preComment, final String fullName) {
+		return (new StringBuffer(preComment != null ? preComment : "").append(fullName)).toString();
+	}
+	
+	
+	/**
+	 * Writes a comment.
+	 * @param preComment The preComment.
+	 * @param indent The indent.
+	 * @param commentText The commentText.
+	 * @param subtableFullName The subtableFullName.
+	 * @param keyValuePairPreComment The keyValuePairPreComment.
+	 * @return String
+	 */
+	private static String writeComment(final String preComment, final String indent,
+			final String commentText, final String subtableFullName, final String keyValuePairPreComment) {
+		StringBuffer buffer = new StringBuffer(preComment != null ? preComment : "").append(indent);
+		String extraIndent = "";
+		if (subtableFullName!= null) {
+			final String[] arrayIndent = subtableFullName.split("\\.");
+			if (arrayIndent.length > 3) {
+				extraIndent = "  ";
+				buffer.append(keyValuePairPreComment != null ? keyValuePairPreComment : "").append(extraIndent);
+			}
+		}
+		//buffer.append(extraIndent).append(commentText);
+		buffer.append(commentText).append(extraIndent);
+		return buffer.toString();
+	}
+	
+	
+	/**
+	 * Writes a KeyValuePair.
+	 * @param preComment The preComment.
+	 * @param preCommentIndent The preCommentIndent.
+	 * @param postCommentIndent The postCommentIndent.
+	 * @param keyValuePair The KeyValuePair.
+	 * @return String
+	 */
+	private static String writeKeyValuePair(final String preComment, final String preCommentIndent, final String postCommentIndent, final KeyValuePair keyValuePair) {
+		StringBuffer buffer = new StringBuffer("");
+		if (keyValuePair.getKey() != null) {
+			buffer.append(preComment != null ? preComment : "").append(preCommentIndent);
+			if (keyValuePair.getParentSubtableFullName() != null) {
+				String extraIndent = "";
+				final String[] arrayIndent = keyValuePair.getParentSubtableFullName().split("\\.");
+				if (arrayIndent.length >= 3) {
+					for (int i = 2;i < arrayIndent.length;i++) {
+						extraIndent += "  ";
+					}
+				}
+				buffer.append(keyValuePair.getParentSubtablePreComment() != null ? keyValuePair.getParentSubtablePreComment() : "").append(extraIndent);
+			} else {
+				buffer.append(keyValuePair.getPreComment() != null ? keyValuePair.getPreComment() : "");
+			}
+			buffer.append(keyValuePair.getKey()).append(" = ").append(keyValuePair.getValue());
+			if (keyValuePair.getPostComment() != null) {
+				buffer.append(postCommentIndent).append(keyValuePair.getPostComment());
+			}
+		}
+		return buffer.toString();
+	}
+	
+
+	/**
+	 * Writes a subtable.
+	 * @param preComment The preComment.
+	 * @param indent The indent.
+	 * @param subtableFullName The subtableFullName.
+	 * @param subtablePreComment The subtablePreComment.
+	 * @return String
+	 */
+	private static String writeSubtable(final String preComment, final String indent,
+			final String subtableFullName, final String subtablePreComment) {
+		StringBuffer buffer = new StringBuffer(preComment != null ? preComment : "");
+		String extraIndent = "";
+		final String[] arrayIndent = subtableFullName.split("\\.");
+		if (arrayIndent.length > 3) {
+			for (int i = 3;i < arrayIndent.length;i++) {
+				extraIndent += "  ";
+			}
+		}
+		if (subtablePreComment != null) {
+			buffer.append(indent).append(subtablePreComment).append(extraIndent).append(subtableFullName);
+		} else {
+			buffer.append(indent).append(subtableFullName).append(extraIndent);
+		}
+		return buffer.toString();
+	}
+	
+	
+	/**
+	 * Gets the multiline array of Strings.
+	 * @param value The value.
+	 * @return String[]
+	 */
+	private static String[] getMultilineArray(final String value) {		
+		final String newValue = value.substring(value.indexOf(MULTILINE_SEPARATOR) +
+				MULTILINE_SEPARATOR.length(), value.lastIndexOf(MULTILINE_SEPARATOR));
+		return newValue.split(MULTILINE_DATA_SEPARATOR);
+	}
+	
+	
+	/**
+	 * Writes a single text.
+	 * @param pluginPreComment The pluginPreComment.
+	 * @param keyValuePairPreComment The keyValuePairPreComment.
+	 * @param indent The indent.
+	 * @param text The text.
+	 * @return String
+	 */
+	private static String writeSingleText(final String pluginPreComment, final String keyValuePairPreComment, final String indent, final String text) {
+		StringBuffer buffer = new StringBuffer(pluginPreComment != null ? pluginPreComment : "");
+		buffer.append(indent).append(keyValuePairPreComment != null ? keyValuePairPreComment : "").append(text);
+		return buffer.toString();
+	}
+}
diff --git a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/test/MainTest.java b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/test/MainTest.java
index dcc5dc96e92c2be9a563ca7c405cca484b8617b1..cffd421dcdd50e64795d2377461ad246370fb1c3 100644
--- a/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/test/MainTest.java
+++ b/ACSmI/Telegraf_ConfigParser/src/main/java/eu/decideh2020/telegraf/test/MainTest.java
@@ -1,56 +1,55 @@
-package eu.decideh2020.telegraf.test;
-
-import java.util.Arrays;
-
-import eu.decideh2020.telegraf.file.FileParser;
-import eu.decideh2020.telegraf.file.FileViewer;
-import eu.decideh2020.telegraf.file.FileWriter;
-
-public final class MainTest
-{
-	// ***** Main method ***** //
-	public static void main(String[] args) {
-		System.out.println("*****  INICIO DEL PROCESO *****\n");
-		
-		// Execute process
-		try {
-			//final String FILE_NAME = "resources/telegraf.conf";
-			final String FILE_NAME = "C:\\D\\telegraf.conf";
-			
-			// Leer fichero
-			FileParser parser = new FileParser(FILE_NAME);
-			
-			// 1) Realizar dos duplicados del plugin “inputs.ping”.
-			parser.duplicatePlugin("inputs.ping");
-			parser.duplicatePlugin("inputs.ping");
-			
-			// 2) Modificar la propiedad “count” del plugin “inputs.ping” original (índice = 1).
-			parser.changePropertyValue("inputs.ping", "count", "3");
-
-			// 3) Modificar la propiedad “timeout” del primer plugin “inputs.ping” duplicado (índice = 2).
-			parser.changePropertyValue("inputs.ping", 2, "timeout", "1.5");
-			
-			// 4) Modificar la propiedad “urls” del segundo plugin “inputs.ping” duplicado (índice = 3) con una lista de valores.
-			final String[] values = {"www.google.com", "www.google.es", "www.google.ie"};
-			parser.changePropertyValues("inputs.ping", 3, "urls", Arrays.asList(values));
-			
-			// 5) Eliminar el plugin “inputs.ping” original (índice = 1).
-			parser.deletePlugin("inputs.ping");
-			
-			// 6) Eliminar el segundo plugin “inputs.ping” duplicado (índice = 3).
-			parser.deletePlugin("inputs.ping", 2);
-			
-			// 7) Mostrar en consola el resultado.
-			FileViewer.viewDocumentConsole(parser.getDocument());
-			
-			// 8) Reescribir el fichero con el objeto “Document” modificado.
-			FileWriter.writeFile(FILE_NAME, parser.getDocument());
-			
-			FileViewer.viewDocumentConsole(parser.getDocument());
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-		
-		System.out.println("\n*****  FIN DEL PROCESO *****");
-	}
+package eu.decideh2020.telegraf.test;
+
+import java.util.Arrays;
+
+import eu.decideh2020.telegraf.file.FileParser;
+import eu.decideh2020.telegraf.file.FileViewer;
+import eu.decideh2020.telegraf.file.FileWriter;
+
+public final class MainTest
+{
+	// ***** Main method ***** //
+	public static void main(String[] args) {
+		System.out.println("*****  INICIO DEL PROCESO *****\n");
+		
+		// Execute process
+		try {
+			final String FILE_NAME = "C:\\D\\telegraf.conf";
+			
+			// Leer fichero
+			FileParser parser = new FileParser(FILE_NAME);
+			
+			// 1) Realizar dos duplicados del plugin “inputs.ping”.
+			parser.duplicatePlugin("inputs.ping");
+			parser.duplicatePlugin("inputs.ping");
+			
+			// 2) Modificar la propiedad “count” del plugin “inputs.ping” original (índice = 1).
+			parser.changePropertyValue("inputs.ping", "count", "3");
+
+			// 3) Modificar la propiedad “timeout” del primer plugin “inputs.ping” duplicado (índice = 2).
+			parser.changePropertyValue("inputs.ping", 2, "timeout", "1.5");
+			
+			// 4) Modificar la propiedad “urls” del segundo plugin “inputs.ping” duplicado (índice = 3) con una lista de valores.
+			final String[] values = {"www.google.com", "www.google.es", "www.google.ie"};
+			parser.changePropertyValues("inputs.ping", 3, "urls", Arrays.asList(values));
+			
+			// 5) Eliminar el plugin “inputs.ping” original (índice = 1).
+			parser.deletePlugin("inputs.ping");
+			
+			// 6) Eliminar el segundo plugin “inputs.ping” duplicado (índice = 3).
+			parser.deletePlugin("inputs.ping", 2);
+			
+			// 7) Mostrar en consola el resultado.
+			FileViewer.viewDocumentConsole(parser.getDocument());
+			
+			// 8) Reescribir el fichero con el objeto “Document” modificado.
+			FileWriter.writeFile(FILE_NAME, parser.getDocument());
+			
+			FileViewer.viewDocumentConsole(parser.getDocument());
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		
+		System.out.println("\n*****  FIN DEL PROCESO *****");
+	}
 }
\ No newline at end of file
diff --git a/ADAPT/Monitoring/DECIDE.json b/ADAPT/Monitoring/DECIDE.json
index 12a264a4ee3fbfe4e073b2ba6a96bfc0be2b2309..58285f8a89abc32d0d7c3c363e03e5edfa36fe30 100644
--- a/ADAPT/Monitoring/DECIDE.json
+++ b/ADAPT/Monitoring/DECIDE.json
@@ -1,7 +1,7 @@
 {
   "id" : "db4630ad-00e0-4d7a-966b-44288416bf21",
   "name" : "Socks-shop",
-  "description" : "A generic microservices application-IEE 28-02-2019",
+  "description" : "A generic microservices application",
   "version" : "0.2.2-alpha",
   "highTechnologicalRisk" : false,
   "nfrs" : [ {
diff --git a/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/pom.OLD.xml b/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/pom.OLD.xml
new file mode 100644
index 0000000000000000000000000000000000000000..290fd6ce550aa89848f753db4d5cf219de4440fe
--- /dev/null
+++ b/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/pom.OLD.xml
@@ -0,0 +1,234 @@
+<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/maven-v4_0_0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<groupId>eu.decideh2020</groupId>
+	<artifactId>eu.decideh2020.adapt.monitoring.server</artifactId>
+	<packaging>jar</packaging>
+	<name>adapt.monitoring.server</name>
+	<version>1.0.0</version>
+	<licenses>
+		<license>
+			<name>Unlicense</name>
+			<url>http://unlicense.org</url>
+			<distribution>repo</distribution>
+		</license>
+	</licenses>
+	<build>
+		<sourceDirectory>src/main/java</sourceDirectory>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-war-plugin</artifactId>
+				<version>3.1.0</version>
+			</plugin>
+			<plugin>
+				<artifactId>maven-failsafe-plugin</artifactId>
+				<version>2.6</version>
+				<executions>
+					<execution>
+						<goals>
+							<goal>integration-test</goal>
+							<goal>verify</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+			<plugin>
+				<groupId>org.eclipse.jetty</groupId>
+				<artifactId>jetty-maven-plugin</artifactId>
+				<version>${jetty-version}</version>
+				<configuration>
+					<webApp>
+						<contextPath>/</contextPath>
+					</webApp>
+					<webAppSourceDirectory>target/${project.artifactId}-${project.version}</webAppSourceDirectory>
+					<stopPort>8079</stopPort>
+					<stopKey>stopit</stopKey>
+					<stopWait>10</stopWait>
+					<httpConnector>
+						<port>8080</port>
+						<idleTimeout>60000</idleTimeout>
+					</httpConnector>
+				</configuration>
+				<executions>
+					<execution>
+						<id>start-jetty</id>
+						<phase>pre-integration-test</phase>
+						<goals>
+							<goal>start</goal>
+						</goals>
+						<configuration>
+							<scanIntervalSeconds>0</scanIntervalSeconds>
+							<daemon>true</daemon>
+						</configuration>
+					</execution>
+					<execution>
+						<id>stop-jetty</id>
+						<phase>post-integration-test</phase>
+						<goals>
+							<goal>stop</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+			<plugin>
+				<groupId>org.codehaus.mojo</groupId>
+				<artifactId>build-helper-maven-plugin</artifactId>
+				<version>1.9.1</version>
+				<executions>
+					<execution>
+						<id>add-source</id>
+						<phase>generate-sources</phase>
+						<goals>
+							<goal>add-source</goal>
+						</goals>
+						<configuration>
+							<sources>
+								<source>src/gen/java</source>
+							</sources>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+		<resources>
+			<resource>
+				<directory>src/main/resources</directory>
+			</resource>
+		</resources>
+	</build>
+	<dependencies>
+		<dependency>
+			<groupId>io.swagger</groupId>
+			<artifactId>swagger-jersey2-jaxrs</artifactId>
+			<scope>compile</scope>
+			<version>${swagger-core-version}</version>
+		</dependency>
+		<dependency>
+			<groupId>ch.qos.logback</groupId>
+			<artifactId>logback-classic</artifactId>
+			<version>${logback-version}</version>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>ch.qos.logback</groupId>
+			<artifactId>logback-core</artifactId>
+			<version>${logback-version}</version>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<version>${junit-version}</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>javax.servlet</groupId>
+			<artifactId>servlet-api</artifactId>
+			<version>${servlet-api-version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.glassfish.jersey.containers</groupId>
+			<artifactId>jersey-container-servlet-core</artifactId>
+			<version>${jersey2-version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.glassfish.jersey.media</groupId>
+			<artifactId>jersey-media-multipart</artifactId>
+			<version>${jersey2-version}</version>
+		</dependency>
+		<dependency>
+			<groupId>com.fasterxml.jackson.datatype</groupId>
+			<artifactId>jackson-datatype-joda</artifactId>
+			<version>${jackson-jaxrs-version}</version>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>com.fasterxml.jackson.jaxrs</groupId>
+			<artifactId>jackson-jaxrs-json-provider</artifactId>
+			<version>${jackson-jaxrs-version}</version>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>eu.decideh2020</groupId>
+			<artifactId>eu.decideh2020.ACSmI.monitoring.client</artifactId>
+			<version>1.0.0</version>
+		</dependency>
+		<dependency>
+			<groupId>eu.decideh2020</groupId>
+			<artifactId>adapt.violationhandler.client</artifactId>
+			<version>1.0.0</version>
+		</dependency>
+		<dependency>
+			<!-- InfluxDB API support -->
+			<groupId>org.influxdb</groupId>
+			<artifactId>influxdb-java</artifactId>
+			<version>2.8</version>
+		</dependency>
+		<dependency>
+			<groupId>eu.decideh2020</groupId>
+			<artifactId>eu.decideh2020.telegraf.configparser</artifactId>
+			<version>0.0.1-SNAPSHOT</version>
+		</dependency>
+		<dependency>
+			<groupId>eu.DECIDEh2020</groupId>
+			<artifactId>mcsla-core</artifactId>
+			<version>0.0.1-SNAPSHOT</version>
+		</dependency>
+		<dependency>
+			<groupId>eu.DECIDEh2020</groupId>
+			<artifactId>app-controller</artifactId>
+			<version>0.0.16-SNAPSHOT</version>
+		</dependency>
+		<!-- Base64 encoding that works in both JVM and Android -->
+		<dependency>
+			<groupId>com.brsanthu</groupId>
+			<artifactId>migbase64</artifactId>
+			<version>2.2</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.cxf</groupId>
+			<artifactId>cxf-rt-rs-client</artifactId>
+			<!--<version>3.3.0</version> -->
+			<!--<version>3.2.1</version> -->
+			<!--<version>3.1.15</version> -->
+			<version>3.2.0</version>
+		</dependency>
+		<!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-common-utilities 
+			<dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-common-utilities</artifactId> 
+			<version>2.5.11</version> </dependency> -->
+
+
+		<!-- Bean Validation API support -->
+		<dependency>
+			<groupId>javax.validation</groupId>
+			<artifactId>validation-api</artifactId>
+			<version>1.1.0.Final</version>
+			<!-- <scope>provided</scope> -->
+		</dependency>
+	</dependencies>
+	<repositories>
+		<repository>
+			<id>sonatype-snapshots</id>
+			<url>https://oss.sonatype.org/content/repositories/snapshots</url>
+			<snapshots>
+				<enabled>true</enabled>
+			</snapshots>
+		</repository>
+	</repositories>
+	<properties>
+		<java.version>1.7</java.version>
+		<maven.compiler.source>${java.version}</maven.compiler.source>
+		<maven.compiler.target>${java.version}</maven.compiler.target>
+		<swagger-core-version>1.5.15</swagger-core-version>
+		<jetty-version>9.2.9.v20150224</jetty-version>
+		<jersey2-version>2.22.2</jersey2-version>
+		<!-- <cxf-version>3.1.11</cxf-version> -->
+		<!-- <jackson-version>2.8.9</jackson-version> -->
+		<jackson-jaxrs-version>2.8.9</jackson-jaxrs-version> <!-- Problema clientes swagger.... -->
+		<junit-version>4.12</junit-version>
+		<logback-version>1.1.7</logback-version>
+		<servlet-api-version>2.5</servlet-api-version>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+	</properties>
+</project>
diff --git a/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/pom.xml b/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/pom.xml
index ce06ad47d9059ec723ce013834cc6a3c2ffc71ef..fca4e243873d76ab829c421ee69f2855eda61e62 100644
--- a/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/pom.xml
+++ b/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/pom.xml
@@ -1,214 +1,242 @@
-<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/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <groupId>eu.decideh2020</groupId>
-  <artifactId>seu.decideh2020.adapt.monitoring.server</artifactId>
-  <packaging>jar</packaging>
-  <name>adapt.monitoring.server</name>
-  <version>1.0.0</version>
-  <licenses>
-    <license>
-      <name>Unlicense</name>
-      <url>http://unlicense.org</url>
-      <distribution>repo</distribution>
-    </license>
-  </licenses>
-  <build>
-    <sourceDirectory>src/main/java</sourceDirectory>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-war-plugin</artifactId>
-        <version>3.1.0</version>
-      </plugin>
-      <plugin>
-        <artifactId>maven-failsafe-plugin</artifactId>
-        <version>2.6</version>
-        <executions>
-          <execution>
-            <goals>
-              <goal>integration-test</goal>
-              <goal>verify</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.eclipse.jetty</groupId>
-        <artifactId>jetty-maven-plugin</artifactId>
-        <version>${jetty-version}</version>
-        <configuration>
-          <webApp>
-            <contextPath>/</contextPath>
-          </webApp>
-          <webAppSourceDirectory>target/${project.artifactId}-${project.version}</webAppSourceDirectory>
-          <stopPort>8079</stopPort>
-          <stopKey>stopit</stopKey>
-          <stopWait>10</stopWait>
-          <httpConnector>
-            <port>8080</port>
-            <idleTimeout>60000</idleTimeout>
-          </httpConnector>
-        </configuration>
-        <executions>
-          <execution>
-            <id>start-jetty</id>
-            <phase>pre-integration-test</phase>
-            <goals>
-              <goal>start</goal>
-            </goals>
-            <configuration>
-              <scanIntervalSeconds>0</scanIntervalSeconds>
-              <daemon>true</daemon>
-            </configuration>
-          </execution>
-          <execution>
-            <id>stop-jetty</id>
-            <phase>post-integration-test</phase>
-            <goals>
-              <goal>stop</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>build-helper-maven-plugin</artifactId>
-        <version>1.9.1</version>
-        <executions>
-          <execution>
-            <id>add-source</id>
-            <phase>generate-sources</phase>
-            <goals>
-              <goal>add-source</goal>
-            </goals>
-            <configuration>
-              <sources>
-                <source>src/gen/java</source>
-              </sources>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-    <resources>
-             <resource>
-                     <directory>src/main/resources</directory>
-             </resource>
-           </resources>
-  </build>
-  <dependencies>
- <!-- <dependency>
+<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/maven-v4_0_0.xsd">
+	<modelVersion>4.0.0</modelVersion>
 	<groupId>eu.decideh2020</groupId>
-	<artifactId>eu.decideh2020.ACSmI.monitoring.client</artifactId>
+	<artifactId>adapt.monitoring.server</artifactId>
+	<packaging>jar</packaging>
+	<name>eu.decideh2020.adapt.monitoring.server</name>
 	<version>1.0.0</version>
-</dependency>-->
- <!-- <dependency>
-	<groupId>eu.decideh2020</groupId>
-	<artifactId>eu.decideh2020.ACSmI.monitoring.client</artifactId>
-	<version>1.0.0</version>
-</dependency>-->
-<dependency>
-	<groupId>eu.decideh2020</groupId>
-	<artifactId>eu.decideh2020.telegraf.configparser</artifactId>
-	<version>0.0.1-SNAPSHOT</version>
-</dependency>
-    <dependency>
-    <groupId>eu.DECIDEh2020</groupId>
-    <artifactId>mcsla-core</artifactId>
-    <version>0.0.1-SNAPSHOT</version>
-</dependency>
-  <dependency>
-    <groupId>eu.DECIDEh2020</groupId>
-    <artifactId>app-controller</artifactId>
-    <version>0.0.15-SNAPSHOT</version>
-      </dependency>
-    <dependency>
-      <groupId>io.swagger</groupId>
-      <artifactId>swagger-jersey2-jaxrs</artifactId>
-      <scope>compile</scope>
-      <version>${swagger-core-version}</version>
-    </dependency>
-    <dependency>
-      <groupId>ch.qos.logback</groupId>
-      <artifactId>logback-classic</artifactId>
-      <version>${logback-version}</version>
-      <scope>compile</scope>
-    </dependency>
-    <dependency>
-      <groupId>ch.qos.logback</groupId>
-      <artifactId>logback-core</artifactId>
-      <version>${logback-version}</version>
-      <scope>compile</scope>
-    </dependency>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <version>${junit-version}</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>javax.servlet</groupId>
-      <artifactId>servlet-api</artifactId>
-      <version>${servlet-api-version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.glassfish.jersey.containers</groupId>
-      <artifactId>jersey-container-servlet-core</artifactId>
-      <version>${jersey2-version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.glassfish.jersey.media</groupId>
-      <artifactId>jersey-media-multipart</artifactId>
-      <version>${jersey2-version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.fasterxml.jackson.datatype</groupId>
-      <artifactId>jackson-datatype-joda</artifactId>
-      <version>${jackson-jaxrs-version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.fasterxml.jackson.jaxrs</groupId>
-      <artifactId>jackson-jaxrs-json-provider</artifactId>
-      <version>${jackson-jaxrs-version}</version>
-    </dependency>
-    <!-- Base64 encoding that works in both JVM and Android -->
-    <dependency>
-      <groupId>com.brsanthu</groupId>
-      <artifactId>migbase64</artifactId>
-      <version>2.2</version>
-    </dependency>
 
-  
-    <!-- Bean Validation API support -->
-    <dependency>
-        <groupId>javax.validation</groupId>
-        <artifactId>validation-api</artifactId>
-        <version>1.1.0.Final</version>
-<!--         <scope>provided</scope> -->
-	</dependency>
-  </dependencies>
-  <repositories>
-    <repository>
-      <id>sonatype-snapshots</id>
-      <url>https://oss.sonatype.org/content/repositories/snapshots</url>
-      <snapshots>
-        <enabled>true</enabled>
-      </snapshots>
-    </repository>
-  </repositories>
-  <properties>
-    <java.version>1.7</java.version>
-    <maven.compiler.source>${java.version}</maven.compiler.source>
-    <maven.compiler.target>${java.version}</maven.compiler.target>
-    <swagger-core-version>1.5.18</swagger-core-version>
-    <jetty-version>9.2.9.v20150224</jetty-version>
-    <jersey2-version>2.22.2</jersey2-version>
-    	<cxf-version>3.1.11</cxf-version>
-  <!--    <jackson-version>2.8.9</jackson-version> -->
-  <jackson-jaxrs-version>2.9.1</jackson-jaxrs-version>
-    <junit-version>4.12</junit-version>
-    <logback-version>1.1.7</logback-version>
-    <servlet-api-version>2.5</servlet-api-version>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-  </properties>
+	<licenses>
+		<license>
+			<name>Unlicense</name>
+			<url>http://unlicense.org</url>
+			<distribution>repo</distribution>
+		</license>
+	</licenses>
+
+	<build>
+		<sourceDirectory>src/main/java</sourceDirectory>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-war-plugin</artifactId>
+				<version>3.1.0</version>
+			</plugin>
+			<plugin>
+				<artifactId>maven-failsafe-plugin</artifactId>
+				<version>2.6</version>
+				<executions>
+					<execution>
+						<goals>
+							<goal>integration-test</goal>
+							<goal>verify</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+			<plugin>
+				<groupId>org.eclipse.jetty</groupId>
+				<artifactId>jetty-maven-plugin</artifactId>
+				<version>${jetty-version}</version>
+				<configuration>
+					<webApp>
+						<contextPath>/</contextPath>
+					</webApp>
+					<webAppSourceDirectory>target/${project.artifactId}-${project.version}</webAppSourceDirectory>
+					<stopPort>8079</stopPort>
+					<stopKey>stopit</stopKey>
+					<stopWait>10</stopWait>
+					<httpConnector>
+						<port>8080</port>
+						<idleTimeout>60000</idleTimeout>
+					</httpConnector>
+				</configuration>
+				<executions>
+					<execution>
+						<id>start-jetty</id>
+						<phase>pre-integration-test</phase>
+						<goals>
+							<goal>start</goal>
+						</goals>
+						<configuration>
+							<scanIntervalSeconds>0</scanIntervalSeconds>
+							<daemon>true</daemon>
+						</configuration>
+					</execution>
+					<execution>
+						<id>stop-jetty</id>
+						<phase>post-integration-test</phase>
+						<goals>
+							<goal>stop</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+			<plugin>
+				<groupId>org.codehaus.mojo</groupId>
+				<artifactId>build-helper-maven-plugin</artifactId>
+				<version>1.9.1</version>
+				<executions>
+					<execution>
+						<id>add-source</id>
+						<phase>generate-sources</phase>
+						<goals>
+							<goal>add-source</goal>
+						</goals>
+						<configuration>
+							<sources>
+								<source>src/gen/java</source>
+							</sources>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+	</build>
+	<dependencies>
+		<dependency>
+			<groupId>io.swagger</groupId>
+			<artifactId>swagger-jersey2-jaxrs</artifactId>
+			<scope>compile</scope>
+			<version>${swagger-core-version}</version>
+		</dependency>
+		<dependency>
+			<groupId>ch.qos.logback</groupId>
+			<artifactId>logback-classic</artifactId>
+			<version>${logback-version}</version>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>ch.qos.logback</groupId>
+			<artifactId>logback-core</artifactId>
+			<version>${logback-version}</version>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<version>${junit-version}</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>javax.servlet</groupId>
+			<artifactId>servlet-api</artifactId>
+			<version>${servlet-api-version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.glassfish.jersey.containers</groupId>
+			<artifactId>jersey-container-servlet-core</artifactId>
+			<version>${jersey2-version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.glassfish.jersey.media</groupId>
+			<artifactId>jersey-media-multipart</artifactId>
+			<version>${jersey2-version}</version>
+		</dependency>
+		<dependency>
+			<groupId>com.fasterxml.jackson.datatype</groupId>
+			<artifactId>jackson-datatype-joda</artifactId>
+			<version>${jackson-jaxrs-version}</version>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>com.fasterxml.jackson.jaxrs</groupId>
+			<artifactId>jackson-jaxrs-json-provider</artifactId>
+			<version>${jackson-jaxrs-version}</version>
+			<scope>compile</scope>
+		</dependency>
+		<!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-rt-rs-client -->
+		<dependency>
+			<groupId>org.apache.cxf</groupId>
+			<artifactId>cxf-rt-rs-client</artifactId>
+			<version>3.0.4</version>
+		</dependency>
+
+		<!-- Base64 encoding that works in both JVM and Android -->
+		<dependency>
+			<groupId>com.brsanthu</groupId>
+			<artifactId>migbase64</artifactId>
+			<version>2.2</version>
+		</dependency>
+
+
+		<!-- Bean Validation API support -->
+		<dependency>
+			<groupId>javax.validation</groupId>
+			<artifactId>validation-api</artifactId>
+			<version>1.1.0.Final</version>
+			<!-- <scope>provided</scope> -->
+		</dependency>
+
+		<!-- APP controller -->
+		<dependency>
+			<groupId>eu.DECIDEh2020</groupId>
+			<artifactId>app-controller</artifactId>
+			<version>0.0.16-SNAPSHOT</version>
+		</dependency>
+
+		<!-- MCSLA Core -->
+		<dependency>
+			<groupId>eu.DECIDEh2020</groupId>
+			<artifactId>mcsla-core</artifactId>
+			<version>0.0.3-SNAPSHOT</version>
+			<!-- <version>0.0.1-SNAPSHOT</version>-->
+		</dependency>
+		<!-- ACSMI Monitoring client -->
+		<dependency>
+			<groupId>eu.decideh2020</groupId>
+			<artifactId>eu.decideh2020.ACSmI.monitoring.client</artifactId>
+			<version>1.0.0</version>
+		</dependency>
+
+		<!-- ADAPT Violationhandler client -->
+		<dependency>
+			<groupId>eu.decideh2020</groupId>
+			<artifactId>violationhandler.client</artifactId>
+			<version>1.0.0</version>
+		</dependency>
+
+		<!-- TELEGRAF configparser -->
+		<dependency>
+			<groupId>eu.decideh2020</groupId>
+			<artifactId>eu.decideh2020.telegraf.configparser</artifactId>
+			<version>0.0.1-SNAPSHOT</version>
+		</dependency>
+		<dependency>
+			<!-- InfluxDB API support -->
+			<groupId>org.influxdb</groupId>
+			<artifactId>influxdb-java</artifactId>
+			<version>2.8</version>
+		</dependency>
+		<!-- GRAFANA API support -->
+		<dependency>
+			<groupId>com.appnexus.grafana-client</groupId>
+			<artifactId>grafana-api-java-client</artifactId>
+			<version>1.0.5</version>
+		</dependency>
+	
+	</dependencies>
+	<repositories>
+		<repository>
+			<id>sonatype-snapshots</id>
+			<url>https://oss.sonatype.org/content/repositories/snapshots</url>
+			<snapshots>
+				<enabled>true</enabled>
+			</snapshots>
+		</repository>
+	</repositories>
+	<properties>
+		<java.version>1.7</java.version>
+		<maven.compiler.source>${java.version}</maven.compiler.source>
+		<maven.compiler.target>${java.version}</maven.compiler.target>
+		<swagger-core-version>1.5.15</swagger-core-version>
+		<jetty-version>9.2.9.v20150224</jetty-version>
+		<jersey2-version>2.22.2</jersey2-version>
+		<jackson-jaxrs-version>2.8.9</jackson-jaxrs-version>
+		<junit-version>4.12</junit-version>
+		<logback-version>1.1.7</logback-version>
+		<servlet-api-version>2.5</servlet-api-version>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+	</properties>
 </project>
diff --git a/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/gen/java/eu/decideh2020/adapt/monitoring/server/model/Application.java b/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/gen/java/eu/decideh2020/adapt/monitoring/server/model/Application.java
index 87ea243cf53c9361bdf1c4c2d23310b6fb49c224..e9f1cd6c5b3792d1002c77e532bb3eca5c6c93c9 100644
--- a/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/gen/java/eu/decideh2020/adapt/monitoring/server/model/Application.java
+++ b/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/gen/java/eu/decideh2020/adapt/monitoring/server/model/Application.java
@@ -26,7 +26,7 @@ import javax.validation.constraints.*;
 @javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2018-03-26T08:06:54.399Z")
 public class Application   {
   @JsonProperty("monid")
-  private String monid = null;
+	  private String monid = null;
 
   @JsonProperty("appdescuri")
   private String appdescuri = null;
diff --git a/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/Acsmi.java b/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/Acsmi.java
new file mode 100644
index 0000000000000000000000000000000000000000..93f16c41d0aaac7b84ff2ab135961026e54137b9
--- /dev/null
+++ b/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/Acsmi.java
@@ -0,0 +1,95 @@
+/****************************************************************
+Copyright (c) 2017 Tecnalia.*Copyright (c) 2017 Tecnalia.
+*Licensed under MIT License (the "License");
+*Permission is hereby granted, free of charge, to any person obtaining a copy 
+of this software and associated documentation files (the "Software"), to deal 
+in the Software without restriction, including without limitation the rights 
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
+copies of the Software, and to permit persons to whom the Software is furnished 
+to do so, subject to the following conditions:
+*The above copyright notice and this permission notice shall be included in all 
+copies or substantial portions of the Software.
+*
+*
+*THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 
+INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 
+CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 
+OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+*Contributors (in alphabetical order):
+*Alberto Molinuevo                              Tecnalia
+*Gorka Benguria                                 Tecnalia
+*Iñaki Etxaniz                                  Tecnalia
+*Juncal Alonso                                  Tecnalia
+*Leire Orue-Echevarria                          Tecnalia
+*Maria Jose Lopez                               Tecnalia
+*Marisa Escalante                               Tecnalia
+*
+*Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+*****************************************************************************/
+package eu.decideh2020.adapt.monitoring.server.api.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.ws.rs.core.MediaType;
+
+import org.apache.cxf.jaxrs.client.ClientConfiguration;
+import org.apache.cxf.jaxrs.client.JAXRSClientFactory;
+//import org.apache.cxf.jaxrs.client.JAXRSClientFactoryBean;
+import org.apache.cxf.jaxrs.client.WebClient;
+
+import eu.decideh2020.ACSmI.monitoring.client.api.ResourcemonitoringApi;
+import eu.decideh2020.ACSmI.monitoring.client.model.Resourcemonitoring;
+import eu.decideh2020.adapt.monitoring.server.api.JacksonJsonProvider;
+import eu.decideh2020.adapt.monitoring.server.model.Application;
+
+
+/**
+ * 
+ * Connects with the Acsmi Monitoring and calls CreateResourceMonitoring in its Api
+ * @author 106246
+ *
+ */
+public class Acsmi {
+
+	Resourcemonitoring resourcemonitroing; //?
+	// ApiAcsmi Url TODO: store & get in properties file?
+	public static String apiAcsmiBaseAddress;// = "http://85.91.40.245:8087/acsmiservices"; //NO ESTA DESPLEGADO!! ->Properties file OK
+	
+	static void call(Application application){
+		// 1.1. Open connection with client
+        JacksonJsonProvider jsProvAcsmi = new JacksonJsonProvider();
+		List<JacksonJsonProvider> listprovAcsmi = new ArrayList<JacksonJsonProvider>();
+		listprovAcsmi.add(jsProvAcsmi);
+
+		//TODO: confirm the PORT & PATH of AscmiMonitoringClient in integration! 
+		apiAcsmiBaseAddress = configuration.prop.getProperty("adaptMonitoring.AcsmiMEndPoint");
+		System.out.println("properties: adaptMonitoring.AcsmiMEndPoint = " + apiAcsmiBaseAddress + "\n");
+
+		ResourcemonitoringApi apiAcsmi = JAXRSClientFactory.create(apiAcsmiBaseAddress, ResourcemonitoringApi.class, listprovAcsmi);
+		org.apache.cxf.jaxrs.client.Client clientAcsmi = WebClient.client(apiAcsmi).type(MediaType.APPLICATION_JSON);  //Not used, but necessary...
+		//org.apache.cxf.jaxrs.client.Client clientAcsmi = WebClient.client(apiAcsmi); //Not used!?
+        ClientConfiguration cConfigAcsmi = WebClient.getConfig(clientAcsmi); //Not used!?
+
+		// 1.2 Data to be passed to ACSmi is the same we received
+		Resourcemonitoring rsMon = new Resourcemonitoring();
+		rsMon.setAppdescuri(application.getAppdescuri());//("appdescuri");
+		rsMon.setUser(application.getUser());			//("User");
+		rsMon.setPassword(application.getPassword());	//"password");
+		rsMon.setResourceid("resourceid"); 				// Not necessary
+		rsMon.setStatus("status");  					// Not necessary
+		
+		// 1.3 Call
+		System.out.println(" *** Calling Acsmi.createResourcemonitoringUsingPOST ***" + rsMon);
+		try {
+			apiAcsmi.createResourcemonitoringUsingPOST(rsMon); //TODO: NOT YET DEPLOYED!
+		} catch (Exception e) {
+			System.out.println("ERROR: Calling Acsmi: " + e.getMessage());
+			//e.printStackTrace();
+		}
+	}
+	
+}
diff --git a/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/ApiApiServiceImpl.java b/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/ApiApiServiceImpl.java
index 139f8cb28ba9c13f12161006a400ee330bb9c2c3..e438d75808dc5bf08ef1a3826a58693e1b047be8 100644
--- a/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/ApiApiServiceImpl.java
+++ b/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/ApiApiServiceImpl.java
@@ -31,86 +31,169 @@ OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 *****************************************************************************/
 package eu.decideh2020.adapt.monitoring.server.api.impl;
 import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
 //import com.appnexus.grafana.client.GrafanaClient;
 import eu.decideh2020.adapt.monitoring.server.api.*;
-import eu.decideh2020.adapt.monitoring.server.model.*;
+import eu.decideh2020.adapt.monitoring.server.model.Alert;
+import eu.decideh2020.adapt.monitoring.server.model.Application;
+
 
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.SecurityContext;
+
+
 @javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2018-03-26T08:06:54.399Z")
 public class ApiApiServiceImpl extends ApiApiService {
-	//Creating a list for the application monitoring objects (check if this list is initialized every time the Post is generated), if so declare it as a static variable
-		ArrayList<Application> AppMonitoringlist = new ArrayList<Application>();
-	//Creating a list for the alerts objects
-		ArrayList<Alert> Alertlist = new ArrayList<Alert>();
+	// ???
+	public static String AppDesUri;
+	
+	//List of applications to monitor 
+	//TODO: check if this list is initialized every time the Post is generated, if so declare it as a static variable
+	//TODO:Note that ArrayList is not synchronized!!
+	ArrayList<Application> MonitoringApplist = new ArrayList<Application>();
+	
+	//List of alerts TODO: what do we need this (growing-only) list for?
+	List<Alert> Alertlist = new ArrayList<>();
+
+	/**
+	 * Adds a new application to the -internal- monitoring list (MonitoringApplist), 
+	 * visualizes the application (opening a web browser) and 
+	 * returns the created object (non-Javadoc)
+	 */
 	@Override
     public Response createApplicationUsingPOST(Application application, SecurityContext securityContext) throws NotFoundException {
-		//Adds a new application to the monitoring list, visualize the application (opening a web browser) and returns the created object
-		AppMonitoringlist.add(application);
+		
+		// Save app in the list
+		MonitoringApplist.add(application);
+
+		//Save AppDescUri (needed later when calling VH...)
+		AppDesUri = application.getAppdescuri();
+
+		// 1.CONFIGURE MONITORING (Telegraf, InfluxDB, Grafana)
+		configuration config = new configuration(application); //At the beginning (reads properties file)
+		config.apply();
+
+		// [Create a monid ??  & ] Read some UNIQUE Id from AppDescription
+		//String monid=Integer.toString((int)(Math.random()*100)+1); //monid=appdescinstance (monid);
+		//monid=config.returnappinstanceId(monid);
+		//application.setMonid(monid);
+		
+	
 		application.setStatus("monitored");
-		int numero = (int) (Math.random() * 100) + 1;
-		String monid=Integer.toString(numero);
-		//monid=appdescinstance (monid);
-		//Call ACSmI monitoring
-		//Call to configure monitoring
-		configuration currentconfiguration=new configuration();
-		currentconfiguration.apply();
-		monid=currentconfiguration.returnappinstanceId(monid);
-		application.setMonid(monid);
-		//Call to monitoring visualization, this will be visualized in the DevOps framework
-		//monitoringvisualization currentvisualization= new monitoringvisualization();
-		//currentvisualization.visualize(application);
+		// 3. CALL ACSmI MONITORING (TODO: better at the end?)
+		Acsmi.call(application); 
+		
+		
 		return Response.ok(application).build();
 	}
+	
+    
+	/**
+	 * NOTE: ADAPT_DO should provide the appinstanceid (1st parameter) instead of appdescuri. Because the AppDescription file
+	 * can be the same, with new/different data inside that doesn't allow us to recover old data (e.g. SafeMethods) to be "deleted"...
+	 * What the function has to do:
+	 *  -Eliminate monitoring from Telegraf (rewrite file, restart)
+	 *  -Change the AppDescription file (the 'monitoring' object)
+	 *  -Eliminate Application from internal list (or change status? )  
+	 * 
+	 * TODO: NEVER an Application is DELETED ??, so the list only grows.....??
+	 */
 	@Override
     public Response deleteApplicationUsingDELETE(String appdescinstanceid, SecurityContext securityContext) throws NotFoundException {
-        //Instead of giving the appdescuri , ADAPT DO should provide the appinstanceid 
-		//Changes the current status of the element of the list to "notmonitored"
-    		for (int i=0;i<AppMonitoringlist.size();i++) {
-    			 if (AppMonitoringlist.get(i).getMonid().equals(appdescinstanceid)) {
-    				 //Stop the monitoring (Stop telegraf) change the App description monitoring url and status (Monitoring object) in the App description)
-    				 Stopmonitoring stopcurrentmonitoring= new Stopmonitoring(appdescinstanceid);
-    				 //Change the status of the App Monitoring list to not monitored
-        			  AppMonitoringlist.get(i).setStatus("notmonitored");
+		//Changes the current status of the element of the list to "not-monitored"
+    		for (int i=0;i<MonitoringApplist.size();i++) {
+    			Application app = MonitoringApplist.get(i);
+    			 if (app.getMonid().equals(appdescinstanceid)) {
+    				 
+    				 //Stop the monitoring (Stop telegraf) change in the App description: monitoring url and status (Monitoring object)
+    				 Stopmonitoring stopcurrentmonitoring= new Stopmonitoring(app);
+    				 
+    				 //Change the status of the App to not monitored ? (why if is going to be deleted?)
+        			  //MonitoringApplist.get(i).setStatus("notmonitored");
+        			  //Delete it TODO: deleting changes the index...but should not be 2 Apps with same Monid
+        			  MonitoringApplist.remove(i);
+        			  
         		  }
     		}
     		 // Returns all the AppMonitoring list
-    	return Response.ok(AppMonitoringlist).build();
+    	return Response.ok(MonitoringApplist).build();
     }
-    @Override
+    
+	//Returns the list with all the applications
+	@Override
     public Response getAllApplicationsUsingGET(SecurityContext securityContext) throws NotFoundException {
-    	//Returns the list with all the applications
-    	return Response.ok(AppMonitoringlist).build();
+
+    	return Response.ok(MonitoringApplist).build();
     }
-    @Override
+    
+    /**
+     * Returns the object of the application selected with the given monitoring id	
+     */
+	@Override
     public Response getApplicationUsingGET(	String appdescuri, SecurityContext securityContext) throws NotFoundException {
-        //Returns the object of the application selected with the given monitoring id
+
     	int i=0;
-    	while (i<AppMonitoringlist.size()) {
-    	    if (AppMonitoringlist.get(i).getAppdescuri().equals(appdescuri)) {
+    	while (i<MonitoringApplist.size()) {
+    	    if (MonitoringApplist.get(i).getAppdescuri().equals(appdescuri)) {
     	        break;
     	    } 
     	    else {i++;}
     	}
-    	return Response.ok(AppMonitoringlist.get(i)).build();    
+    	return Response.ok(MonitoringApplist.get(i)).build();    
     }
-    @Override
+    
+    /**
+     * Changes the status to "status changed" and returns the Aplication object with the status changed
+     * TODO: What is the new STATUS? Always "statuschanged" or a parameter? 
+     * TODO: Who uses this function? This change is internal to the ADAPT MM...
+     *  
+     */
+	@Override
     public Response updateApplicationUsingPUT(String appdescuri, SecurityContext securityContext) throws NotFoundException {
-        //Changes the status to "status changed" and returns the object with the status changed
-    	int i=0;
-    	while (i<AppMonitoringlist.size()) {
-    	    if (AppMonitoringlist.get(i).getAppdescuri().equals(appdescuri)) {
-    	    	AppMonitoringlist.get(i).setStatus("statuschanged");
+
+		Application app=null;
+		
+		Iterator<Application> it = MonitoringApplist.iterator();
+    	while (it.hasNext()) {
+    		app=it.next();
+    		if (app.getAppdescuri().equals(appdescuri)) {
+    			app.setStatus("statuschanged");
+    			break;
+    		}
+    	}
+    	return Response.ok(app).build();
+    	
+    	/*int i;
+    	for (i=0;i<MonitoringApplist.size();i++) {
+    		app = MonitoringApplist.get(i)
+    	    if (app.getAppdescuri().equals(appdescuri)) {
+    	 		app.setStatus("statuschanged");
     	    	break;
     	    } 
-    	    else {i++;}
     	}
-    	return Response.ok(AppMonitoringlist.get(i)).build();  
-}
-    @Override
-    public Response createAlertUsingPOST(Alert alert, SecurityContext securityContext) throws NotFoundException {
-        // Creates an Alert object with information about the alert from the VH and returns the created object
+    	return Response.ok(app).build();
+    	*/  
+	}
+    
+	/**
+	 *  Creates an Alert object with information about the alert from the VH and returns the created object
+	 *  TODO: Who uses this? Is the alert info in the alert received? Why to store in a list?
+	 *  TODO: Alerts are NEVER DELETED...??
+	 *  @return created Alert
+	 */
+	@Override
+	public Response createAlertUsingPOST(Alert alert, SecurityContext securityContext) throws NotFoundException {
+	
+		// Create an object to store (!) 
+/*		Alert a = new Alert();
+		a.setAlid(alert.getAlid());
+		a.setAltype(alert.getAltype());
+		a.setAppdescuri(alert.getAppdescuri());
+*/		
+		// Store it
 		Alertlist.add(alert);
-        return Response.ok(alert).build();
-    }
-    }
+		return Response.ok(alert).build();
+	}
+}
diff --git a/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/AssessTimerTask.java b/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/AssessTimerTask.java
new file mode 100644
index 0000000000000000000000000000000000000000..123059566378723b0f273cb63c1f53a19c201dab
--- /dev/null
+++ b/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/AssessTimerTask.java
@@ -0,0 +1,93 @@
+/****************************************************************
+*Copyright (c) 2017 Tecnalia.
+*Licensed under MIT License (the "License");
+*Permission is hereby granted, free of charge, to any person obtaining a copy 
+of this software and associated documentation files (the "Software"), to deal 
+in the Software without restriction, including without limitation the rights 
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
+copies of the Software, and to permit persons to whom the Software is furnished 
+to do so, subject to the following conditions:
+*The above copyright notice and this permission notice shall be included in all 
+copies or substantial portions of the Software.
+*
+*
+*THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 
+INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 
+CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 
+OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+*Contributors (in alphabetical order):
+*Alberto Molinuevo                              Tecnalia
+*Gorka Benguria                                 Tecnalia
+*Iñaki Etxaniz                                  Tecnalia
+*Juncal Alonso                                  Tecnalia
+*Leire Orue-Echevarria                          Tecnalia
+*Maria Jose Lopez                               Tecnalia
+*Marisa Escalante                               Tecnalia
+*
+*Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+*****************************************************************************/
+package eu.decideh2020.adapt.monitoring.server.api.impl;
+
+import java.text.DateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.TimerTask;
+
+import eu.DECIDEh2020.appManager.models.AppDescription;
+import eu.DECIDEh2020.mcsla.core.metrics.MetricsContext;
+import eu.DECIDEh2020.mcsla.core.metrics.ServiceObjectiveMetrics;
+
+public class AssessTimerTask extends TimerTask {
+	String monstatus="monitored";
+	
+	// TODO: Copy here or access the List in telegrafdata
+	private List <SafeMethod> safeMethodsObj;
+	
+	//Timestamps in milisecond
+	public final int INITIAL = 0;
+	public final int UP = 1;
+	public final int DOWN = 2;		
+
+	long up_time_1;
+	long down_time;
+	long up_time_2;
+	
+	
+	/**
+	 * Constructor of the Timer.
+	 * It stores the information needed for the periodic task (App, safemethods, states, timestamp)
+	 * 
+	 * @param currentAppdesc
+	 */
+	public AssessTimerTask(AppDescription currentAppdesc) {
+
+		//Context for App
+		MetricsContext contextPerf = MetricsContext.create(currentAppdesc);
+		ServiceObjectiveMetrics performanceMetrics = contextPerf.getAppMetrics().get("Performance");
+
+		//Create the metrics context and get the availability objective of the application
+		MetricsContext contextAvblt = MetricsContext.create(currentAppdesc); //Exception if no metric found...
+		ServiceObjectiveMetrics availabilityMetrics = contextAvblt.getAppMetrics().get("Availability");
+	}
+
+
+	/**
+	 * Function called in every timer iteration. It implements the task of the timer
+	 */
+	@Override
+	public void run () {
+		// TODO Auto-generated method stub
+		System.out.print("Date(): " + DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM).format(new Date()));
+		
+		if ( monstatus.equalsIgnoreCase("monitored") ) {
+			
+		} else {
+			System.out.print("Monitoring STOPPED. ");
+			//timer.cancel(); // Not necessary because
+		}
+		System.out.println ("Mon status: "+monstatus);
+	}
+}
diff --git a/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/Assessment.java b/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/Assessment.java
index 3ef77236899746b67af6993c2d8c0c490c8c9393..45dd84b70eb3c76a509b29f541cdf9223fbba5e1 100644
--- a/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/Assessment.java
+++ b/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/Assessment.java
@@ -31,10 +31,22 @@ OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 *****************************************************************************/
 package eu.decideh2020.adapt.monitoring.server.api.impl;
 
+import java.lang.reflect.Array;
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
 import java.util.Timer;
 import java.util.TimerTask;
+
+import org.apache.cxf.jaxrs.client.JAXRSClientFactory;
+import org.apache.cxf.jaxrs.client.ClientConfiguration;
+import org.apache.cxf.jaxrs.client.WebClient;
+import org.eclipse.jgit.api.AddCommand;
+
+import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
+
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -46,98 +58,290 @@ import eu.DECIDEh2020.appManager.models.PerformanceNfr;
 import eu.DECIDEh2020.mcsla.core.metrics.EvaluationResult;
 import eu.DECIDEh2020.mcsla.core.metrics.MetricsContext;
 import eu.DECIDEh2020.mcsla.core.metrics.ServiceObjectiveMetrics;
+import eu.decideh2020.adapt.monitoring.server.api.impl.Assessment.sfmthdState;
+import eu.decideh2020.violationhandler.client.model.Violation;
+//import eu.decideh2020.adapt.monitoring.server.api.impl.ViolationHandler;
+
 
 public class Assessment  {
-	//The assessment needs to be included in a timer (recursive until the stop is requested) 
+	
+	public static final int ST_INITIAL = 0;
+	public static final int ST_UP = 1;
+	public static final int ST_DOWN = 2;	
+	/**
+	 * States of AVAILABILITY for a safe method / microservice
+	 * Depending on the actual state, the event we look for in the DB (last UP or DOWN event) can differ
+	 * 
+	 */
+	public enum sfmthdState {
+	    INITIAL,
+	    UP,
+	    DOWN
+	}
+
+	static Timer assessTimer = null;
+	
+	/**
+	 * 
+	 * @param currentAppdesc: 
+	 * 
+	 * 
+	 */
+	//TODO: The assessment needs to be included in a TIMER (recursive task, until STOP is called in this App) 
+	//TODO: The assessment has to cover EVERY App in the list, not just the passed currentAppdesc App
 	public Assessment (AppDescription currentAppdesc) {
-		 //MCSLA assessment for the current application
-		 	List <Microservice> microservices = currentAppdesc.getMicroservices();
-			List <Nfr> nfrs=currentAppdesc.getNfrs();
-		 for (Nfr nf:nfrs)
-			{
-				if (nf instanceof AvailabilityNfr) {
-					AvailabilityNfr availabilityNfr = (AvailabilityNfr) nf;
-					//System.out.println ("NFR kind "+availabilityNfr.getType());
-					//System.out.println ("NFR value "+availabilityNfr.getValue());
-					//System.out.println ("NFR tag "+availabilityNfr.getTags());
-					//Create the metrics context and get the availability objective of the application
-					MetricsContext context = MetricsContext.create(currentAppdesc);
-					ServiceObjectiveMetrics availabilityMetrics = context.getAppMetrics().get("Availability");
-					//Configure and load dashboard 1 for availability;
-					//Repeat this every X seconds, in this case 4 times
-					//Timer assessmentTimer=new Timer();
-					//The task for the assessment Timer starts now (0) and is being repeated every 1000 ms
-					//assessmentTimer.scheduleAtFixedRate(new Taskassessment(), 0, 1000); 
-					long Monitoreduptimebegin=1;
-					for (int indice=0;indice<4; indice++) {
-					//Declare the hashMap to store the monitored values of the microservices
-					Map<String, List<Long>> microservicesResults = new HashMap<>();
+		 
+		//Create timer (one timer for ALL Apps, so create ONCE, static)
+		// TODO: decision: Or is better a timer per App?)
+		if (assessTimer == null)
+			assessTimer=new Timer(true);
+		// Set timer Task : starts now (0), repeats every 1000 second (1000 = 1sc)
+		assessTimer.scheduleAtFixedRate(new AssessTimerTask(currentAppdesc), 0, 1000*1000); 
+		
+
+
+		// # Start of the timer task
+		// # -----------------------
+		
+		//TODO: loop for every App here, if needed
+		
+		//MCSLA assessment for the current application
+		List <Microservice> microservices = currentAppdesc.getMicroservices();
+		List <Nfr> nfrs=currentAppdesc.getNfrs();
+
+		for (Nfr nf:nfrs) {
+
+			if (nf instanceof AvailabilityNfr) {
+				//AvailabilityNfr avtNfr = (AvailabilityNfr) nf;
+				//Create the metrics context and get the availability objective of the application
+				MetricsContext context = MetricsContext.create(currentAppdesc); //Exception if no metric found...
+				ServiceObjectiveMetrics availabilityMetrics = context.getAppMetrics().get("Availability");
+				
+				long monUPtimeBegin=1;
+				for (int n_times=0;n_times<1; n_times++) {//Simulates a TIMER
+					//Declare the hashMap to store the monitored values of the safemethods of != microservices (one App)
+					Map<String, List<Long>> msValuesMap = new HashMap<>();
+					
 					for (Microservice ms:microservices)
 					{
-						List <Long> MonitoredValuesMs= new ArrayList <Long>();
-						//Read the monitored values from the InfluxDB
-						long Monitoreduptimebeginms=Monitoreduptimebegin + 1;
-						//System.out.println ("Monitoreduptimebeginms"+Monitoreduptimebeginms);
-						long Monitoreddowntimebeginms=Monitoreduptimebeginms+1;
-						//System.out.println ("Monitoreddowntimebeginms"+Monitoreddowntimebeginms);
-						long Monitoredauptimeagainms=Monitoreddowntimebeginms+1;
-						//System.out.println ("Monitoredauptimeagainms"+Monitoredauptimeagainms);
-						MonitoredValuesMs.add(Monitoreduptimebeginms);
-						MonitoredValuesMs.add(Monitoreddowntimebeginms);
-						MonitoredValuesMs.add(Monitoredauptimeagainms);
-						Monitoreduptimebegin=Monitoredauptimeagainms;
-						//Add the monitored values to a Hashmap
-						microservicesResults.put(ms.getId(),MonitoredValuesMs);
-						List<String> endpoints = ms.getEndpoints();
-						//System.out.println ("Microservice name"+ms.getName());
-						//System.out.println("Microservice id"+ms.getId());
-						//System.out.println("Micorservices endpoints"+endpoints);
-						//System.out.println("Microservices tags"+ms.getTags());
-						//System.out.println("Microservices containersid"+ms.getContainerRef());
-						//System.out.println ("Microservice safe methods"+ms.getSafeMethods());	
-					}
-					//Assess the monitored values against the MCSLA and write it in the InfluxDB
-					EvaluationResult<Double> result = availabilityMetrics.evaluate(microservicesResults);
+						//Each App assess (evaluates) all its Ms at once
+						//TODO: Each Ms must obtain its values with a proper query ("server= XXX")
+						//Read the monitored values from the InfluxDB and copy in msMonitoredValues LIST						
+						//List<pointHttp_response> pointListH = null;
+						List <Long> msMonitoredValues = null; 
+//						msMonitoredValues = getAvailabilityValues(ms.getId());
+						// PointList receives the (3?) Points retrieved from InfluxDB
+						if (msMonitoredValues == null)
+							//nothing to report
+							continue;
+						
+						//Add the monitored values of each Ms (Up-Down-Up) to a Hashmap
+						msValuesMap.put(ms.getId(), msMonitoredValues);
+						//List<String> safeMethods = ms.getSafeMethods();
+
+						System.out.print ("Microservice name: "+ms.getName()+" | id: "+ms.getId()+" | tags "+ms.getTags()+" | safe methods:"+ms.getSafeMethods());				
+					} //for microservices
+					
+					//Once we have all Ms measures,  assess the monitored values against the MCSLA and 
+					//TODO: write it in the InfluxDB (?) (If you want to monitor it in Grafana)  
+					EvaluationResult<Double> result = availabilityMetrics.evaluate(msValuesMap);
 					System.out.println ("result Availability"+result.getMeasurementResultValue());
+					// Check SLA violation
 					if (!result.isError() && !result.isConditionMet()) {
-						System.out.println ("Violation occurred");
-						System.out.println("Measured value:" + result.getMeasurementResultValue());
+						// Violation produced: call the VH
+						System.out.println ("VIOLATION (Availability)");
+
+						// 2. Set the info for ViolationHandler
+						Violation v = new Violation();
+						v.setNfr("Availability");
+						v.setAppDescUri(ApiApiServiceImpl.AppDesUri);//Uri of the application description location  
+						v.setType(0);//0=SLA
+						v.setServiceId(currentAppdesc.getName());
+						v.timestamp(new Date().getTime());
+						v.email("inaki.etxaniz@tecnalia.com");
+						//v.setId(long id);
+						//v.setStatus(string status);
+
+						// 3. Call the VH api
+						ViolationHandler.call(v);
 						}
-				}
-				}
-				if (nf instanceof PerformanceNfr) {
-					PerformanceNfr performanceNfr = (PerformanceNfr) nf;
-					//System.out.println ("NFR kind "+performanceNfr.getType());
-					//System.out.println ("NFR value "+performanceNfr.getAbstractValue());
-					//System.out.println ("NFR tag "+performanceNfr.getTags());
-					//Create the metrics context and get the availability objective of the application
-					MetricsContext context = MetricsContext.create(currentAppdesc);
-					ServiceObjectiveMetrics performanceMetrics = context.getAppMetrics().get("Performance");
-					//Configure and load dashboard 2 for performance;
-					//Repeat this every X seconds, in this case 4 times
-					for (int indice=0;indice<4; indice++) {
+
+					}//for indice=0
+				} //if (nf instanceof AvailabilityNfr) 
+			
+			if (nf instanceof PerformanceNfr) {
+				PerformanceNfr pfNfr = (PerformanceNfr) nf;
+				System.out.println ("NFR kind "+pfNfr.getType());
+				System.out.println ("NFR value "+pfNfr.getAbstractValue());
+				System.out.println ("NFR tag "+pfNfr.getTags());
+				//Create the metrics context and get the availability objective of the application
+				MetricsContext context = MetricsContext.create(currentAppdesc);
+				ServiceObjectiveMetrics performanceMetrics = context.getAppMetrics().get("Performance");
+				
+			influxDBMonitor iflxdb = new influxDBMonitor();
+			iflxdb.Test();
+
+				//Configure and load dashboard_2 for performance;
+				for (int nPerf_Times=0; nPerf_Times<1; nPerf_Times++) {//Repeat every X seconds (1 times to simulate)
 					//Declare a List to store the monitored values of the microservices
-						List<Long> measuredValues=new ArrayList <Long>();
+					List<Long> measuredValues=new ArrayList <Long>();
 					for (Microservice ms:microservices)
-					{	//generate a fake measured value for the response time. In the real case this should be read from the influxDB
+					{	//TODO: In the real case this should be read from the influxDB
+						//generate a fake measured value for the response time
 						Long monitoredresponsetime=(long) (Math.random() * 100) + 1;
 						//Add the monitored values to the list
 						measuredValues.add(monitoredresponsetime);
 						//System.out.println ("measuredValues"+measuredValues);
 						//System.out.println ("Microservice name"+ms.getName());
 						//System.out.println("Microservice id"+ms.getId());
-						//System.out.println("Microservices tags"+ms.getTags());	
+						//System.out.println("Microservices tags"+ms.getTags());
+
+						// #--Example of iteration with the result list
+						pointHttp_response PointH = null;
+						List<pointHttp_response> pointListH = null;
+						if (pointListH.size() == 0) {
+							return; 
+						}
+						Iterator<pointHttp_response> itH = pointListH.iterator();
+						while (itH.hasNext()) {
+							PointH = itH.next();
+							System.out.println (PointH.toString());
+							//System.out.println ("Response_time=" + PointH.getResponse_time());
+							//System.out.println ("Result=" + PointH.getResult());
+							//System.out.println ("Server=" + PointH.getServer());
+						}
+
 					}
 					//Assess the monitored values against the MCSLA and write it in the InfluxDB
 					EvaluationResult<Double> result = performanceMetrics.evaluate(measuredValues);
-					System.out.println ("result Performance"+result.getMeasurementResultValue());
+					System.out.println ("result Performance: "+result.getMeasurementResultValue());
 					if (!result.isError() && !result.isConditionMet()) {
-						System.out.println ("Violation occurred");
-						System.out.println("Measured value:" + result.getMeasurementResultValue());
-						
+						// Violation produced: call the VH
+						System.out.println ("Violation (PERFORMANCE)");
+
+						// 2. Set the info for ViolationHandler
+						Violation v = new Violation();
+						v.setNfr("Performance");
+						v.setAppDescUri(ApiApiServiceImpl.AppDesUri);//Uri of the application description location  
+						v.setType(0);//0=SLA
+						v.setServiceId("ServiceId");//ms.getId() or ms.getName()
+						v.timestamp(new Date().getTime());
+						v.email("inaki.etxaniz@tecnalia.com");
+						//v.setId(long id);
+						//v.setStatus(string status);
+
+						// 3. Call the VH api
+						ViolationHandler.call(v);
+
+
+					}
 				}
 			}
-	   }
-}
-	 }
+		} // for Nfrç
+		
+		// # -----------------------
+		// # End of the timer task
+
+		
+	
+	} //Assessment()
+	
+	/**
+	 * 
+	 * @param pointListH: where the Up-Down-Up point are returned
+	 * @return the 3 points in a list/null if we still not have the 3 points collection
+	 * 
+	 * This function has to remember FOR EACH safeMethod OF EACH App:
+	 * -the status (INITIAL/UP/DOWN) 
+	 * -the server (url)
+	 * -the last up & down instants (timestamp)
+	 * in order to issue the corresponding query to look for the appropriate event
+	 *
+	private List<Long> getAvailabilityValues(String sfmthdId ) {
+
+		//Timestamps in milisecond
+		long up_time_1;
+		long down_time;
+		long up_time_2;
+		// Server
+		String server;
+		// the state
+		int state;
+
+		// Query result event
+		pointHttp_response event;
+		
+		
+		// Depending on the state, construct the right query (event, url...) 
+		String query = new String();
+		if (getState(sfmthdId) == ST_INITIAL) {
+			query = "SELECT response_time, result_type, server FROM http_response  WHERE time > "+ 0 +"ORDER BY time DESC LIMIT 1";
+			// Issue the query; if no results return
+			qResult = 
+			if (qResult != null) {
+				//UP detected
+				up_time_1(sfmthdId) = event.getTime(); //timestamp from event
+				setState (sfmthdId) = ST_UP;
+				return null;
+			}
+		}
+		else if (getState(sfmthdId) == ST_UP) {
+			query = "SELECT response_time, result_type, server FROM http_response  WHERE time > "+ up_time_1 +"ORDER BY time DESC LIMIT 1";
+			if qResult != null {
+				//DOWN detected
+				down_time(sfmthdId) = event.getTime();
+				setState (sfmthdId) = ST_DOWN;
+				return null;
+			}
+		}
+		else if (getState(sfmthdId) == ST_DOWN) {
+			query = "SELECT response_time, result_type, server FROM http_response  WHERE time > "+ down_time +"ORDER BY time DESC LIMIT 1";
+			if qResult != null {
+				//UP detected again
+				up_time_2(sfmthdId) = event.getTime();
+				setState (sfmthdId) = ST_UP;
+				up_time_1 = up_time_2; //restart initial time
+				// Return triplet
+				List<Long> pointList = new ArrayList<Long>();
+				pointList.add(0, up_time_1);
+				pointList.add(1, down_time);
+				pointList.add(2, up_time_2);
+				return pointList;
+			}
+		}
+		
+
+	*/	
 }
+
+
+	/**
+	 * EJEMPLO: Llamada a Influxdb
+	 *
+	/* --- InfluDB start --EXAMPLE: CODE TO BE INCLUDED IN THE CALLING PART--- *
+	influxDBMonitor iflxdb = new influxDBMonitor();
+	// 1. CONNECT 
+	if (iflxdb.connect() != 0) {
+		return; // Not connected...
+	}
+	// 2.1. READ -http_responses-
+	pointListH = iflxdb.readHttp_responseS();
+	// Results in the List are ordered the most recent first (index=0)
+
+	// Example of iteration with the result list
+	pointHttp_response PointH = null;
+	if (pointListH.size() == 0) {
+		return; 
+	}
+	Iterator<pointHttp_response> itH = pointListH.iterator();
+	while (itH.hasNext()) {
+		PointH = itH.next();
+		System.out.println (PointH.toString());
+		System.out.println ("Response_time=" + PointH.getResponse_time());
+		System.out.println ("Result=" + PointH.getResult());
+		System.out.println ("Server=" + PointH.getServer());
+	}
+	System.out.println ("-------->influxDBMonitor: " + iflxdb.result);
+	/* --- InfluDB end --- */
+	
+
diff --git a/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/GrafanaHandler.java b/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/GrafanaHandler.java
new file mode 100644
index 0000000000000000000000000000000000000000..4a79b21a184b20687797f769948827b8f3940be4
--- /dev/null
+++ b/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/GrafanaHandler.java
@@ -0,0 +1,160 @@
+/****************************************************************
+*Copyright (c) 2017 Tecnalia.
+*Licensed under MIT License (the "License");
+*Permission is hereby granted, free of charge, to any person obtaining a copy 
+of this software and associated documentation files (the "Software"), to deal 
+in the Software without restriction, including without limitation the rights 
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
+copies of the Software, and to permit persons to whom the Software is furnished 
+to do so, subject to the following conditions:
+*The above copyright notice and this permission notice shall be included in all 
+copies or substantial portions of the Software.
+*
+*
+*THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 
+INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 
+CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 
+OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+*Contributors (in alphabetical order):
+*Alberto Molinuevo                              Tecnalia
+*Gorka Benguria                                 Tecnalia
+*Iñaki Etxaniz                                  Tecnalia
+*Juncal Alonso                                  Tecnalia
+*Leire Orue-Echevarria                          Tecnalia
+*Maria Jose Lopez                               Tecnalia
+*Marisa Escalante                               Tecnalia
+*
+*Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+*****************************************************************************/
+package eu.decideh2020.adapt.monitoring.server.api.impl;
+
+import java.util.List;
+
+import com.appnexus.grafana.client.GrafanaClient;
+import com.appnexus.grafana.client.models.Dashboard;
+import com.appnexus.grafana.client.models.DashboardMeta;
+import com.appnexus.grafana.client.models.GrafanaDashboard;
+import com.appnexus.grafana.configuration.GrafanaConfiguration;
+
+import eu.decideh2020.adapt.monitoring.server.model.Application;
+
+public class GrafanaHandler {
+	
+	// These will be setup in config file
+	final String GRAFANA_HOST_INT = "http://85.91.40.245:8093"; 	 //Grafana server in Integration Env (AIMES)
+	final String GRAFANA_HOST_LOCAL = "http://adapt.monitoring.grafana:3000"; //Grafana server in Local Docker
+	//API Key created for Adapt Monitoring
+	final String GRAFANA_APIKEY_INT = "Bearer eyJrIjoiVDFrQk1NREl5QWJQMGtrWnVnRG5QMUZJNWk1TkdqQk0iLCJuIjoiQWRhcHRNTS1FZGl0b3IiLCJpZCI6MX0=";
+									
+
+	public GrafanaHandler(Application application) {
+		// TODO Auto-generated constructor stub
+		try {
+			String grafanaHost = configuration.prop.getProperty("adaptMonitoring.grafanaHost");
+			System.out.println("properties: grafanaHost = " + grafanaHost);
+			//Setup the client
+			GrafanaConfiguration grafanaConf = new GrafanaConfiguration().host(grafanaHost).apiKey(GRAFANA_APIKEY_INT);
+			String kk = grafanaConf.apiKey();
+			GrafanaClient grafanaClient = new GrafanaClient(grafanaConf);
+
+			//Setup the dashboard
+			DashboardMeta dsbMeta =
+					new DashboardMeta()
+					.type("db")
+					.slug("inaki_test_dashboard")
+					.expires("0001-01-01T00:00:00Z")
+					.created("0001-01-01T00:00:00Z")
+					.updated("0001-01-01T00:00:00Z")
+					.updatedBy("decide")
+					.createdBy("decide")
+					.version(1);		
+
+			Dashboard dashboard = new Dashboard().title("inaki_dashboard_1").schemaVersion(1).version(1);
+
+			GrafanaDashboard grafanaDashboard =
+					new GrafanaDashboard().dashboard(dashboard).meta(dsbMeta);
+
+			DashboardMeta dsbMetaReturned =  grafanaClient.createDashboard(grafanaDashboard);
+			String slug = dsbMetaReturned.slug();
+			String upd = dsbMetaReturned.updated();
+			DashboardMeta updby = dsbMetaReturned.updatedBy("me");
+			//grafanaClient.getDashboard("inaki_dashboard");
+			//grafanaClient.deleteDashboard(DASHBOARD_NAME);
+
+			System.out.println("Fin del proceso");
+
+		} catch (Exception e) {
+			// TODO Auto-generated catch
+			//e.printStackTrace();
+			System.out.println(e.getMessage());
+		}
+	}
+
+	/**
+	 * Constructor
+	 * By now it only creates a new dashboard "inaki_dashboard_1"
+	 * 
+	 * TODO:
+	 * 	0.-Create 2 Dashboards (or, if they are created by default, get the 2 files -dasboard_X.json- to edit) 
+	 * 	1.-Parse the list of safemethods (~TelegrafData or construct a new one?)
+	 * 	2.-Foreach, create a panel inside Availability_Dashboard, other inside Performance_Dashboard
+	 * 	[3.-An extra panel for aggregation of measures?]
+	 * 
+	 */
+	
+	public void GrafanaHandler_OLD() {
+		try {
+			String grafanaHost = configuration.prop.getProperty("adaptMonitoring.grafanaHost");
+			System.out.println("properties: grafanaHost = " + grafanaHost);
+			//Setup the client
+			GrafanaConfiguration grafanaConf = new GrafanaConfiguration().host(grafanaHost).apiKey(GRAFANA_APIKEY_INT);
+			String kk = grafanaConf.apiKey();
+			GrafanaClient grafanaClient = new GrafanaClient(grafanaConf);
+
+			//Setup the dashboard
+			DashboardMeta dsbMeta =
+					new DashboardMeta()
+					.type("db")
+					.slug("inaki_test_dashboard")
+					.expires("0001-01-01T00:00:00Z")
+					.created("0001-01-01T00:00:00Z")
+					.updated("0001-01-01T00:00:00Z")
+					.updatedBy("decide")
+					.createdBy("decide")
+					.version(1);		
+
+			Dashboard dashboard = new Dashboard().title("inaki_dashboard_1").schemaVersion(1).version(1);
+
+			GrafanaDashboard grafanaDashboard =
+					new GrafanaDashboard().dashboard(dashboard).meta(dsbMeta);
+
+			DashboardMeta dsbMetaReturned =  grafanaClient.createDashboard(grafanaDashboard);
+			String slug = dsbMetaReturned.slug();
+			String upd = dsbMetaReturned.updated();
+			DashboardMeta updby = dsbMetaReturned.updatedBy("me");
+			//grafanaClient.getDashboard("inaki_dashboard");
+			//grafanaClient.deleteDashboard(DASHBOARD_NAME);
+
+			System.out.println("Fin del proceso");
+
+		} catch (Exception e) {
+			// TODO Auto-generated catch
+			//e.printStackTrace();
+			System.out.println(e.getMessage());
+		}
+	}
+
+	/**
+	 * 
+	 * @param telegrafPluginList
+	 */
+	public void apply(List<telegrafobject> telegrafPluginList) {
+		// TODO Auto-generated method st
+	}
+}
+
+
+
diff --git a/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/SafeMethod.java b/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/SafeMethod.java
new file mode 100644
index 0000000000000000000000000000000000000000..d27128b27a5cec437be5b70cd27dddc46026e3b1
--- /dev/null
+++ b/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/SafeMethod.java
@@ -0,0 +1,5 @@
+package eu.decideh2020.adapt.monitoring.server.api.impl;
+
+public class SafeMethod {
+
+}
diff --git a/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/Stopmonitoring.java b/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/Stopmonitoring.java
index f231d68701d7ffb1ed59653b730e51d36e7fd4ec..128cd4f9cd533ebb23ef6a012502b667eb4b772b 100644
--- a/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/Stopmonitoring.java
+++ b/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/Stopmonitoring.java
@@ -32,42 +32,134 @@ OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 package eu.decideh2020.adapt.monitoring.server.api.impl;
 
 import java.io.IOException;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.List;
 
+import eu.DECIDEh2020.appManager.AppManager;
+import eu.DECIDEh2020.appManager.exceptions.AppManagerException;
+import eu.DECIDEh2020.appManager.exceptions.DECIDEValidationException;
 import eu.DECIDEh2020.appManager.models.AppDescription;
+import eu.DECIDEh2020.appManager.models.Monitoring;
+import eu.decideh2020.adapt.monitoring.server.model.Application;
 import eu.decideh2020.telegraf.file.FileParser;
 import eu.decideh2020.telegraf.file.FileWriter;
 
+
+
+
 public class Stopmonitoring  {
-	public Stopmonitoring (String stopmonid) {
-		//load the telegraf.conf
-		FileParser parser=null;
+	/**
+	 * Constructor
+	 * @param app is the Aplication -from the Applist- to be deleted
+	 * @return void
+	 * 
+	 * What it does now: (TODO: reorder this)
+	 * 	0-[Deletes application 'monid' from the list of Apps] (done in the caller, afterwards)
+	 * 	1-Deletes the telegraf data for 'monid' safemethod, re-writes telegraf.conf
+	 * 	2-Deletes the visualization part (grafana dashboards?)
+	 * 	3-Changes the Appdescriptor file (`monitoring')
+	 */
+	public Stopmonitoring (Application app) {
+		
+		
+
+		// 3- 'Stop' it in APP_DESCRIPTION 
+		//	3.1 load and read appdescription with the app-controller
+		 AppManager appManager = null;
+		 try { // CLONES the git in an empty dir
+			//TODO: check how to get the info in a real case!!!! (variables: stored in 'Application' object?; fixed: in static fields?)
+			appManager = AppManager.open(app.getAppdescuri(), app.getUser(), app.getPassword(), configuration.localappdescpath); //?????Tmp folder here???
+		 } catch (AppManagerException e) {
+			 // TODO Auto-generated catch block
+			 e.printStackTrace();
+			 System.out.println("AppManager is null");
+			 return;
+		 }
+		 // Get file
+		AppDescription description = null;
 		try {
-			//parser = new FileParser("/etc/telegraf/telegraf.conf");
-			//I use this telegraf location to test
-			try {
-				parser = new FileParser("D:\\2017-Decide\\telegraftemplate\\telegraf.conf");
-			} catch (IOException e) {
-				// TODO Auto-generated catch block
-				e.printStackTrace();
-			}
-		} catch (InstantiationException e1) {
+			// Accessing a subfolder in the git repository
+			//TODO: check how to get descriptor name in a real case!!!! (store in Application?) 
+			appManager.setDescriptor(configuration.prop.getProperty("adaptMonitoring.descriptorname"));
+			description = appManager.getAppDescription();
+		} catch (DECIDEValidationException | IOException e) {
 			// TODO Auto-generated catch block
-			e1.printStackTrace();
-		} catch (IllegalAccessException e1) {
-			// TODO Auto-generated catch block
-			e1.printStackTrace();
-		} catch (ClassNotFoundException e1) {
+			e.printStackTrace();
+		}
+		//Check description != null
+		if (description == null) {
+			System.out.println("AppDescription File is empty");
+			return;
+		}
+		
+		// 3.2 Change the monitoring status to 'false'
+		Monitoring monitoring=new Monitoring();
+		//Fill up monitoring object
+		monitoring.getUrls().clear();
+		monitoring.setStatus(false);
+		//Write down monitoring object in App description file
+		description.setMonitoring(monitoring);
+		//Upload changed file
+		String descriptorName = configuration.prop.getProperty("adaptMonitoring.descriptorname");  // Using = input file in last version
+		appManager.setDescriptor(descriptorName);
+		try {
+			appManager.writeAndSync(description, "ADAPT MM: STOP monitoring App: '" + app.getMonid()+ "'");
+			appManager.close();
+		} catch (AppManagerException | IOException e) {
 			// TODO Auto-generated catch block
-			e1.printStackTrace();
+			System.out.println("Error: when trying to update 'Appdescription' file: " + descriptorName +  e.getMessage());
+		}
+
+		System.out.println("'Appdescription' file updated 'ADAPT MM: STOP monitoring App:" + app + "'");
+
+		// 1-Delete TELEGRAF data for 'monid', re-writes telegraf.conf
+		//FileParser parser = telegraf.getParser(); 	//Load the telegraf.conf (unique for all Apps)
+		
+		//TODO: Decide which 'monid' to use...¿app.getMonid()? 
+		removeTelegrafData_byMonId (description.getApplicationInstanceId());
+		
+		//2. GRAFANA stuff...
+		;;;;;
+
+
+	}
+	
+	private void removeTelegrafData_byMonId(String stopmonid){
+		
+		System.out.println("telegrafData has ["+configuration.TelegrafPluginList.size()+"] elements" );
+		//Go through list of telegrafobjects; When found:
+		// delete the corresponding object
+		for (telegrafobject telegrafelement:configuration.TelegrafPluginList){
+			if (telegrafelement.getMonid().equals(stopmonid)){
+				configuration.TelegrafPluginList.remove(telegrafelement);
+			}
 		}
-		//For each the telegrafobject check if it needs to be stopped (with the monid==stopmonid) and comment the corresponding plugin.
-		for (telegrafobject telegrafelement:configuration.telegrafdata){
+		//Rewrite the telegraf file, based on the modified list
+		System.out.println("telegrafData has ["+configuration.TelegrafPluginList.size()+"] elements" );
+		telegraf.setInputPlugins(configuration.TelegrafPluginList);
+		//Write .conf file
+		telegraf.writeTelegrafFile();
+
+	}
+	
+
+/**
+ * OLD version, comments only specific plugins, attending their index (stored in a previous call to createApplication..)
+ * @param stopmonid
+ */
+	void removeTelegrafData_byIndex (String stopmonid) {
+		//Go through list of telegrafobjects; When found:
+		// 1. delete the comment the corresponding plugin TELEGRAF
+		FileParser parser = telegraf.getParser();
+		for (telegrafobject telegrafelement:configuration.TelegrafPluginList){
 			if (telegrafelement.getMonid().equals(stopmonid)){
 				int pluginindex=telegrafelement.getPluginindex();
 				try {
 					parser.changePluginComment("inputs.http_response", pluginindex, true);
 					try {
-						FileWriter.writeFile("D:\\2017-Decide\\telegraftemplate\\telegraf.conf", parser.getDocument());
+						FileWriter.writeFile("C:\\D\\2017-Decide\\telegraftemplate\\telegraf.conf", parser.getDocument());
 					} catch (IOException e) {
 						// TODO Auto-generated catch block
 						e.printStackTrace();
@@ -77,7 +169,8 @@ public class Stopmonitoring  {
 					e.printStackTrace();
 				}
 			}
-		}
-		
-}
+		}		
+	}
+	
+	
 }
\ No newline at end of file
diff --git a/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/ViolationHandler.java b/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/ViolationHandler.java
new file mode 100644
index 0000000000000000000000000000000000000000..b78a259bbdc3c06d163d10cca1f50254fd1d63df
--- /dev/null
+++ b/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/ViolationHandler.java
@@ -0,0 +1,81 @@
+/****************************************************************
+*Copyright (c) 2017 Tecnalia.
+*Licensed under MIT License (the "License");
+*Permission is hereby granted, free of charge, to any person obtaining a copy 
+of this software and associated documentation files (the "Software"), to deal 
+in the Software without restriction, including without limitation the rights 
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
+copies of the Software, and to permit persons to whom the Software is furnished 
+to do so, subject to the following conditions:
+*The above copyright notice and this permission notice shall be included in all 
+copies or substantial portions of the Software.
+*
+*
+*THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 
+INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 
+CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 
+OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+*Contributors (in alphabetical order):
+*Alberto Molinuevo                              Tecnalia
+*Gorka Benguria                                 Tecnalia
+*Iñaki Etxaniz                                  Tecnalia
+*Juncal Alonso                                  Tecnalia
+*Leire Orue-Echevarria                          Tecnalia
+*Maria Jose Lopez                               Tecnalia
+*Marisa Escalante                               Tecnalia
+*
+*Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+*****************************************************************************/package eu.decideh2020.adapt.monitoring.server.api.impl;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import javax.ws.rs.core.MediaType;
+
+//import org.apache.cxf.common.logging.LogUtils; ///!!!!!!!!!OJO!!!!!
+
+import org.apache.cxf.jaxrs.client.ClientConfiguration;
+import org.apache.cxf.jaxrs.client.JAXRSClientFactory;
+import org.apache.cxf.jaxrs.client.WebClient;
+
+import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
+
+
+import eu.decideh2020.violationhandler.client.api.ViolationsApi;
+import eu.decideh2020.violationhandler.client.model.Violation;
+
+
+/**
+ * 
+ * Connects with the ViolationHandler and calls reportViolation() in its Api
+ * @author 106246
+ *
+ */
+public class ViolationHandler {
+
+	
+	// ApiAcsmi Url TODO: store & get in properties file?
+	static String apiVHBaseAddress = "http://85.91.40.245:8095/violationhandler";
+
+	static void call(Violation v){
+
+		// 1. Open connection with ADAPT VH client
+		ViolationsApi apivh = null;
+		JacksonJsonProvider jsonProv = new JacksonJsonProvider();
+		List<JacksonJsonProvider> providersvh = new ArrayList();
+		providersvh.add(jsonProv);
+		//the integration environment where the Violation handler is deployed
+		apivh = JAXRSClientFactory.create(apiVHBaseAddress, ViolationsApi.class, providersvh);
+		org.apache.cxf.jaxrs.client.Client clientvh = WebClient.client(apivh).type(MediaType.APPLICATION_JSON);  //Not used, but necessary...
+		//ClientConfiguration configvh = WebClient.getConfig(clientvh);
+
+		// 3. Call the VH api
+		System.out.println("\n" + "***** Reporting Violation to VH *****\n");
+		v = apivh.reportViolation(v);
+		System.out.println("\n" + v + "***** Violation reported *****\n"); 
+	}
+}
\ No newline at end of file
diff --git a/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/acsmicall.java b/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/acsmicall.java
deleted file mode 100644
index f6897c9c2d67def732d382fd20b5007505a01cdd..0000000000000000000000000000000000000000
--- a/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/acsmicall.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/****************************************************************
-*Copyright (c) 2017 Tecnalia.
-*Licensed under MIT License (the "License");
-*Permission is hereby granted, free of charge, to any person obtaining a copy 
-of this software and associated documentation files (the "Software"), to deal 
-in the Software without restriction, including without limitation the rights 
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
-copies of the Software, and to permit persons to whom the Software is furnished 
-to do so, subject to the following conditions:
-*The above copyright notice and this permission notice shall be included in all 
-copies or substantial portions of the Software.
-*
-*
-*THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 
-INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 
-PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 
-HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 
-CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 
-OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-*Contributors (in alphabetical order):
-*Alberto Molinuevo                              Tecnalia
-*Gorka Benguria                                 Tecnalia
-*Iñaki Etxaniz                                  Tecnalia
-*Juncal Alonso                                  Tecnalia
-*Leire Orue-Echevarria                          Tecnalia
-*Maria Jose Lopez                               Tecnalia
-*Marisa Escalante                               Tecnalia
-*
-*Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
-*****************************************************************************/
-package eu.decideh2020.adapt.monitoring.server.api.impl;
-//import eu.decideh2020.ACSmI.monitoring.client.model.*;
-public class acsmicall {
- //Resourcemonitoring resourcemonitroing;
-}
diff --git a/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/configuration.java b/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/configuration.java
index 9bfa4d200d205c00a404b571fc948c68e3248909..2c0a2b5116e73c5e95aaa8cfcd7c85430793b198 100644
--- a/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/configuration.java
+++ b/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/configuration.java
@@ -30,167 +30,463 @@ OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 *Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
 *****************************************************************************/
 package eu.decideh2020.adapt.monitoring.server.api.impl;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
+import java.io.Reader;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.text.DateFormat;
 import java.util.ArrayList;
+import java.util.Date;
+import java.util.Iterator;
 import java.util.List;
+import java.util.Properties;
 import java.util.Timer;
+import java.util.concurrent.CopyOnWriteArrayList;
 
 import eu.DECIDEh2020.appManager.*;
 import eu.DECIDEh2020.appManager.exceptions.AppManagerException;
 import eu.DECIDEh2020.appManager.exceptions.DECIDEValidationException;
 import eu.DECIDEh2020.appManager.models.AppDescription;
-import eu.DECIDEh2020.appManager.models.AvailabilityNfr;
+//import eu.DECIDEh2020.appManager.models.AvailabilityNfr;
 import eu.DECIDEh2020.appManager.models.Container;
 import eu.DECIDEh2020.appManager.models.Microservice;
 import eu.DECIDEh2020.appManager.models.Monitoring;
+import eu.DECIDEh2020.appManager.models.PortMapping;
+//import eu.DECIDEh2020.appManager.models.PortMapping;
 import eu.DECIDEh2020.appManager.models.VirtualMachine;
+import eu.decideh2020.adapt.monitoring.server.model.Application;
+import io.swagger.util.Json;
+/**
+ * @author 106246
+ * A new configuration object is created with every CreateApplication() call
+ * TODO: Check if this is correct 
+ * 
+ * A static list (telegrafdata) of Applications (telegrafobjects) is created to manage them. 
+ * When one App has to be 'deleted' (i.e. stop monitoring), this list allows us to identify which is, and to re-configure Telegraf accordingly
+ *  
+ */
 public class configuration {
-	//Create a List of telegraf objects to create the corresponding data for telegraf configuration
-			static List <telegrafobject> telegrafdata = new ArrayList<telegrafobject>();
-	void apply () {
-		//load and read appdescription with the app-controller
-		System.out.println("temp folder is: "+System.getProperty("java.io.tmpdir"));
-		String localAppDesc = "";
-		localAppDesc = System.getProperty("java.io.tmpdir");
-		localAppDesc = localAppDesc+"\\"+System.currentTimeMillis();
-		System.out.println("localAppDescPath is: "+ localAppDesc);
-		Path localappdescpath=Paths.get(localAppDesc);
-		//gitRef to be changed to the common gitlab
-		//String gitRef="https://git.code.tecnalia.com/decide/SockShop_AppDescription.git";
-		//Local DECIDE.json
-		//PUBLIC decide repo
-		//String gitRef="";
-		//String gitusername="";
-		//String gitpassword="";
-		AppManager appManager = null;
-		try {
-			appManager = AppManager.open(gitRef, gitusername, gitpassword, localappdescpath);
-			//accessing a subfolder in the git repository
-			appManager.setDescriptor("Sockshop/DECIDE.json");
-			//accessing a subfolder in the public DECIDE git repository
-			//appManager.setDescriptor("ADAPT/test/DECIDE.json");
-		} catch (AppManagerException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+
+	//git info: credentials, repo, AppDescriptor path
+	private String USER_GIT="inaki.etxaniz@tecnalia.com";
+	private String TOKEN_GIT="Gy_QiXgbFubhR8sxrUNe";
+	//"https://git.code.tecnalia.com/decide/adapt-do-demo.git"; //HPE's DECIDE.json (+"Socks-shop/DECIDE.json");
+	//"https://git.code.tecnalia.com/decide/SockShop_AppDescription.git"; //(a minimal DECIDE.json)
+
+	private String GIT_REF="https://git.code.tecnalia.com/decide/adapt-do-demo.git";
+	private String DESCRIPTOR = "AdaptMM/DECIDE.json";
+	private String DESCRIPTOR_OUT = "AdaptMM/DECIDE-OUT.json";
+	//Properties file location
+	//final static String F_PROPERTIES_WIN = " C:\\D\\2017-Decide\\Properties\\AdaptMon.properties"; Not used, now the user directory is used
+	final static String F_PROPERTIES_LINUX = "/etc/decide/adaptmon.properties";
+	final static String F_PROPERTIES_NAME = "adaptmon.properties";
+
+	// Application received in the API call
+	private Application appInfo;
+	//List of telegraf objects to create the corresponding data for telegraf configuration
+	static List <telegrafobject> TelegrafPluginList = new CopyOnWriteArrayList<telegrafobject>(); //ArrayList was NO thread SAFE!
+	// Properties in .properties file
+	static Properties prop;
+	static Path localappdescpath;
+	AppDescription description;
+	
+	String pathbar;
+	
+	/**
+	 *  
+	 */
+	public configuration(Application application) {
+		
+		// Save needed data into Application for further incoming calls to the API 
+		// TODO: only for tests ?
+		application.setAppdescuri(GIT_REF);
+		//application.setMonid(monid); //Done at the caller
+		application.setUser(USER_GIT);
+		application.setPassword(TOKEN_GIT);
+		appInfo = application; //??
+
+		//Get .properties file. Store it for future references
+		prop = this.getProperties();
+		if (prop != null) {
+			// TODO: this value SHOULD BE received in the API call, NOT read from properties file
+			// GIT_REF = application.getAppdescuri();
+			GIT_REF = prop.getProperty("adaptMonitoring.appDescriptionGitPath");
+			System.out.println("properties: adaptMonitoring.appDescriptionGitPath = " + GIT_REF);
 		}
-		AppDescription description = null;
-		try {
-			description = appManager.getAppDescription();
-		} catch (DECIDEValidationException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		} catch (IOException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+		else // TODO: What if NO properties file ?
+			; // return
+	}
+
+
+	/**
+	 * Finds the properties file in Windows/Linux paths or otherwise in 'resources'
+	 * @return properties or null if not found/malformed
+	 */
+	Properties getProperties() {
+
+		final String osName = System.getProperty("os.name");
+
+		String path = null, pathHome = null;
+		if (osName.matches("Win.*")) {
+			//Get the user directory
+			pathHome= getUserHome();
+			if (pathHome == null) {
+				System.out.println("Error: Unable to access User Home");
+				return null;
+			}
+			path = pathHome +"\\"+ F_PROPERTIES_NAME;	
+			//pathbar = "\\";
+		} 
+		else {
+			path = F_PROPERTIES_LINUX;
+			//pathbar = "/";
 		}
-		List <Microservice> microservices = description.getMicroservices();
-		System.out.println("microservicios"+microservices.size());
-		List <VirtualMachine> virtualmachines=description.getVirtualMachines();
-		List <Container> containers=description.getContainers();
-		Monitoring monitoring=new Monitoring();
-		String monid=description.getApplicationInstanceId();
-		//Get the needed values from the appdescription to configure telegraf
-		for (Microservice ms:microservices)
-		{
-			        Microservice currentms = ms;
-					telegrafobject listobject=new telegrafobject();
-					listobject.setMicroserviceid(currentms.getId());
-					listobject.setSafemethod(currentms.getSafeMethods());
-					listobject.setMonid(monid);
-					listobject.setComponentappdescription(description);
-					//This is null. To be asked to Paolo.String container=currentms.getContainerId();
-					String container="mscontainerID";
-					for (Container cn:containers){
-						 Container currentcontainer = cn;
-						 //This is null. To be asked to Paolo Simon.System.out.println("current container"+currentcontainer.getName());
-						if (currentcontainer.getRestart().equals(container)) {
-							//supposing that we only have one endpoint
-							listobject.setPort(cn.getEndpoints().get(0).getPort());
-							for (VirtualMachine vm:virtualmachines) {
-							if (vm.getDockerHostNodeName().equals(cn.getDockerHostNodeName())) { 
-							listobject.setIp(vm.getDockerHostPublicIp());
-							}
-						}
-						}
-					}
-					//Adding the telegraf object to the list
-					telegrafdata.add(listobject);
+
+		Properties props = new Properties();
+		FileInputStream is;
+		//Look into given path
+		try {			
+			is = new FileInputStream(path);
+		}
+		catch (FileNotFoundException e) {
+			System.out.println("Info: NO properties file in: " + path + e.getMessage());
+			//Not there, Look into resources
+			is = (FileInputStream) getClass().getResourceAsStream(F_PROPERTIES_NAME);
 		}
-		
-		//set up telegraf: configure input and output plugins and data based on the app description info
-				try {
-					configuretelegraf currenttelegrafconfiguration=new configuretelegraf (telegrafdata);
-				} catch (IOException e1) {
-					 //TODO Auto-generated catch block
-					e1.printStackTrace();
-				}
-		//Assess the MCSLA continuously
-		Assessment currentAssessment= new Assessment(description);
-		//Configure grafana and complete the monitoring onject for the App description
-		List<String> urlsMonitoring=new ArrayList<String>();
-		//Get the url for grafana
-		urlsMonitoring.add("http://85.91.40.245:8093");
-		//Write down monitoring url in appdescription
-		monitoring.setUrls(urlsMonitoring);
-		//Write down monitoring status in appdescription
-		monitoring.setStatus(true);
-		//Write down monitoring object status in desription object
-		description.setMonitoring(monitoring);
 		try {
-			appManager.writeAndSync(description, "monitoring status changed");
-			appManager.close();
-		} catch (AppManagerException | IOException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+			props.load(is);
+			is.close();
+		}			
+		catch (IOException | IllegalArgumentException eIO) {
+			System.out.println("Error: Non existing or malformed properties file! (" + path + ") " +  eIO.getMessage());
+			return null;
 		}
+
+		//Return can be null? or invalid
+		return props;
+	}
+	
+	/**
+	 * @return user home path (e.g. C:\Users\UserXX in Windows)
+	 * 
+	 * 
+	 */
+	static String getUserHome() {
+		String path = null;
+		
+		//Get the user directory
+		 try {
+			 // WINDOWS -> C:\Users\106246\...??
+			 path = System.getProperties().getProperty("user.home"); } 
+		 catch (SecurityException e2) {
+			 // TODO Auto-generated catch block
+			 e2.printStackTrace();}	 
+		 //Check path != null
+		 if (path == null) {
+			 System.out.println("Error: User Home Path is NULL");
+		 	}
+		 
+		 return path;
 	}
-	String returnappinstanceId (String appinstanceid) {
-				//load and read appdescription with the app-controller
-				String localAppDesc = "";
-				localAppDesc = System.getProperty("java.io.tmpdir");
-				localAppDesc = localAppDesc+"\\"+System.currentTimeMillis();
-				Path localappdescpath=Paths.get(localAppDesc);
-				//PUBLIC decide repo
-				//String gitRef="";
-				//String gitusername="";
-				//String gitpassword="";
-				AppManager appManager = null;
-				try {
-					appManager = AppManager.open(gitRef, gitusername, gitpassword, localappdescpath);
-					//accessing a subfolder in the git repository
-					appManager.setDescriptor("Sockshop/DECIDE.json");
-					//accessing a subfolder in the public DECIDE git repository
-					//appManager.setDescriptor("ADAPT/test/DECIDE.json");
-				} catch (AppManagerException e) {
-					// TODO Auto-generated catch block
-					e.printStackTrace();
-				}
-				AppDescription description = null;
-				try {
-					description = appManager.getAppDescription();
-				} catch (DECIDEValidationException e) {
-					// TODO Auto-generated catch block
-					e.printStackTrace();
-				} catch (IOException e) {
-					// TODO Auto-generated catch block
-					e.printStackTrace();
-				}
-				//to check that monid is changed to currentappinstanceid. In the demo the setAppInstanceId should be commented
-				//description.setAppInstanceId("appinstanceidtest");
-				String currentappinstanceid = description.getApplicationInstanceId();
-				try {
-					appManager.close();
-				} catch (IOException e) {
-					// TODO Auto-generated catch block
-					e.printStackTrace();
-				}
-		return currentappinstanceid;
+	
+	
+	/**
+	 * Perform the configuration needed
+	 * @throws IOException 
+	 *
+	 */void apply () {
+
+		 // --Set a path for the local git 
+		 System.out.println("java.io.tmpdir is: "+System.getProperties().getProperty("java.io.tmpdir")); // WINDOWS -> C:\Users\106246\AppData\Local\Temp...
+		 System.out.println("Date(): " + DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM).format(new Date()));
+
+		 /*
+		  * 1-LOAD and READ Appdescription through AppManager
+		  */
+	 
+		 //Get the user directory
+		 String localAppDesc = System.getProperty("java.io.tmpdir");
+		 if (localAppDesc == null) {
+			 System.out.println("Error: Unable to access tmpdir");
+			 return;
+		 	}
+		 localAppDesc = localAppDesc + "/" + System.currentTimeMillis(); //A new directory every time...because IT SHOULD BE EMPTY TO CLONE !?		 
+		 System.out.println("localAppDescPath is: " + localAppDesc); // WINDOWS -> C:\Users\106246\AppData\Local\Temp\...
+		 localappdescpath=Paths.get(localAppDesc);
+		 
+		 // --Get the file via AppManager
+		 AppManager appManager = null;
+		 try {
+			 // CLONES the git in an empty dir
+			 appManager = AppManager.open(GIT_REF, USER_GIT, TOKEN_GIT, localappdescpath);
+		 } catch (AppManagerException e) {
+			 // TODO Auto-generated catch block
+			 e.printStackTrace();
+		 }
+		 //Check AppManager != null
+		 if (appManager == null) { 
+			 System.out.println("AppManager is null");
+			 return;
+		 }
+		 // --Read and dump the whole file into 'description' class variable
+		 description = null;
+		 try {
+			 // Accessing a subfolder in the git repository
+			 DESCRIPTOR = prop.getProperty("adaptMonitoring.descriptorname");
+			 System.out.println("properties: adaptMonitoring.descriptorname = " + DESCRIPTOR);
+			 appManager.setDescriptor(DESCRIPTOR);
+			 description = appManager.getAppDescription();
+		 } catch (DECIDEValidationException | IOException  e) {
+			 // TODO Auto-generated catch block
+			 e.printStackTrace();
+		 }
+		 //Check description != null
+		 if (description == null) {
+			 System.out.println("AppDescription File is empty");
+			 return;
+		 }
+
+		 
+		 /*
+		  * 2-PARSE the AppDescription to obtain the (lists of) Safemethods (+ VMs + Containers)
+		  */
+		 if (extractSafeMethods() == false)
+			 return;
+	 
+		 
+		 /*
+		  * 3-TELEGRAF setup: configure input and output plugins based on the info read
+		  */		 
+		 try {
+			 telegraf cTlgf = new telegraf (TelegrafPluginList);
+		 } catch (IOException e1) {
+			 //TODO Auto-generated catch block
+			 e1.printStackTrace();
+		 }
+
+		 /*
+		  * 4-Set up NFR assessment for this Application -must be periodical-
+		  */
+		 Assessment currentAssessment= new Assessment(description);
+
+		 /*
+		  * 5-Configure Grafana Dashboards 
+		  */		 
+		 GrafanaHandler cGrafana = new GrafanaHandler(appInfo);
+		 cGrafana.apply(TelegrafPluginList);
+		 
+		 /*
+		  * 6-Appdescription: Configure the 'monitoring' in AppDescription (for DevOpsFr) and SYNC
+		  */		 
+		 Monitoring monitoring=new Monitoring();
+		 List<String> urlsMonitoring=new ArrayList<String>();
+		 //Set the url(s) for my Grafana Dashboards (Performance, Availability)  
+		 // TODO: set the real grafana IP:port/paths_to_dashboard
+		 String url1, url2;
+		 url1 = prop.getProperty("adaptMonitoring.urlsMonitoring1");
+		 url2 = prop.getProperty("adaptMonitoring.urlsMonitoring2");
+		 System.out.println("\n"+"properties: adaptMonitoring.urlsMonitoring1 = " + url1);
+		 System.out.println("properties: adaptMonitoring.urlsMonitoring1 = " + url2 + "\n");
+		 urlsMonitoring.add(url1); //"http://85.91.40.245:8093/d/HbAMQcWik/performance-metrics-for-multi-cloud-application"
+		 urlsMonitoring.add(url2); //"http://85.91.40.245:8093/d/RV8r6X-mz/multi-cloud-application-availability"
+		 //Fill up monitoring object
+		 monitoring.setUrls(urlsMonitoring);
+		 monitoring.setStatus(true);
+		 //Write down monitoring object in App description file
+		 description.setMonitoring(monitoring);
+		 //Upload changed file (DECIDE_OUT.json only for tests)
+		 try {
+			 DESCRIPTOR_OUT = prop.getProperty("adaptMonitoring.descriptorname");  // Using = input file in last version
+			 appManager.setDescriptor(DESCRIPTOR_OUT);
+			 appManager.writeAndSync(description, "ADAPT MM: monitoring App: " + appInfo.getMonid());
+			 appManager.close();
+		 } catch (AppManagerException | IOException e) {
+			 // TODO Auto-generated catch block
+			 System.out.println("Error: impossible to update 'Appdescription' file" + e.getMessage());
+		 }
+		 System.out.println("'Appdescription' file updated 'ADAPT MM: START monitoring App:" + appInfo + "'");
+	 }
+	 
+	 /**
+	 * @return TRUE if at least one safe methods has been correctly extracted from the Appdescription; FALSE if not 
+	  * 
+	  * A static list (TelegrafPluginList) of safemethods to be monitored (telegrafobjects) is maintained. 
+	  * It could already contain some elements from previous calls
+	  *   
+	  */
+	  boolean extractSafeMethods() {
+		 
+		 List <Microservice> microservices = description.getMicroservices();
+		 List <VirtualMachine> virtualmachines=description.getVirtualMachines();
+		 List <Container> containers=description.getContainers();
+		 // Supposedly was a UNIQUE Id for each	 App Instance (TODO: CHECK Uniqueness!!)
+		// Use the same 'monid' for AppList and PluginList ? (or at least be consistent in create/delete !!!)
+		 String monid=description.getApplicationInstanceId();
+		 //String monid = appInfo.getMonid(); 
+		 boolean bReturn = false;
+
+		 System.out.println("TOTAL MICROSERVICES -> "+microservices.size());
+		 // -------- For Ms -------------
+		 int nms=0;//temporal solution to fill 'ContainerRef' (TODO: remove when msContainerRef != null)	 
+		//Get needed values -from our lists- to configure Telegraf
+		 for (Microservice ms:microservices)		{
+			 String msName=ms.getName(); 
+			 System.out.println("\n Ms. Name: " + msName);
+			 // Check if Safemethod are defined
+			 if (ms.getSafeMethods().size() == 0) {
+				 System.out.println("INFO: No Safemethod defined for Ms "+ msName);
+				 continue;
+			 }
+			 // One Obj per Microservice?
+			 // TODO: Better an Obj per safeMethod (one IP, one port, one path...?)
+			 telegrafobject tObj=new telegrafobject();		
+			 tObj.setMicroserviceid(ms.getId());		  //Microserviceid
+			 tObj.setSafemethods(ms.getSafeMethods());	  //TODO: NULL? -> EDIT json FILE for tests
+			 tObj.setMonid(monid);						  //monid (or whatever UNIQUE Id)
+			 tObj.setComponentappdescription(description);//TODO: The whole appDescrition in each telegrafobject ?!
+
+			 // Relate Ms->Containers->VMs to obtain the Port & Ip of each Ms
+			 // ASSERT BY DEFINITION: Ms.Name == Cont.Containername 
+			 if (msName==null) {		 
+				 System.out.println("\n ERROR: MS.Name NOT DEFINED!!: "+ msName);
+				 continue; // Next Ms
+			 }
+			 System.out.println("\tTOTAL CONTAINERS -> "+containers.size());
+			 // -------- Match Ms->Container------
+			 int nc=0;
+			 System.out.print("\t CONT.ContainerName: ");
+			 for (Container cnt:containers){
+				 String cntContainerName = cnt.getContainerName();
+				 System.out.print(" ["+ nc++ +"]" +  cntContainerName);
+				 //String cntContainerRef = cnt.getContainerRef();
+				 if (cntContainerName == null) {
+					System.out.println("\n\t ERROR: CONT.Containername NOT DEFINED!!: "+ cntContainerName);
+					continue; // Next Cnt
+				 }
+
+				 if (cntContainerName.equals(msName)) {
+					 // Found: Manage PortMapings in the telegraf.setInputPlugins() (n SafeMethods, different ports possible?)
+					 tObj.setPortMappings(cnt.getPortMapping());
+					 if (tObj.getPortMappings().size() > 0) 
+						 System.out.println("\n\t MATCH Ms<=>CONT: Saving PortMapping ->"+ PrintPM(cnt.getPortMapping()));
+				  
+					 System.out.println("\t\t CONT.DockerHostNodeName: "+ cnt.getDockerHostNodeName());
+					 System.out.println("\t\t TOTAL VMs -> "+ virtualmachines.size());
+					 
+					 // -------- Match Container->VM ------
+					 System.out.print("\t\t\t VM.DockerHostNodeName: ");
+					 int nvm=0;
+					 for (VirtualMachine vm:virtualmachines) {
+						 System.out.print(" ["+ nvm++ +"]" +  vm.getDockerHostNodeName());
+						 // Found: get the definitive IP of the safeMethod
+						 if (vm.getDockerHostNodeName().equals(cnt.getDockerHostNodeName())) {
+							 System.out.println("\n\t\t\t MATCH Cont<=>VM: Saving IP ->"+ vm.getDockerHostPublicIp());
+							 tObj.setIp(vm.getDockerHostPublicIp());	//Ip: TODO NULL
+							 //Port & IP OK: Add telegraf object to the list
+							 TelegrafPluginList.add(tObj);
+							 bReturn = true;
+							 break; //Found vm: Discard rest of vm
+						 }
+					 }// for wm
+					 break; //Found cnt: Discard rest of cnt 
+				 }// if 
+			 }// for cnt
+		 }
+		 // TRUE if at least one safemethod
+		 return bReturn;
+	  }
+	 
+	  
+	  /**
+	   * Utility function (for tests only) 
+	   * @return a string to be printed with Port Mapping list
+	   */
+	  private String PrintPM(List<PortMapping> portMap) {
+		String str = "";
+		
+		for (final Iterator i = portMap.iterator(); i.hasNext();) {
+			PortMapping pm = (PortMapping) i.next();
+			str += " [H:"+pm.getHostPort() + " C:"+pm.getContainerPort() + "]";
+		}
+			
+		return str;
 	}
 
+
+	void extractSafeMethods_oldVersion() {
+			 
+		 List <Microservice> microservices = description.getMicroservices();
+		 List <VirtualMachine> virtualmachines=description.getVirtualMachines();
+		 List <Container> containers=description.getContainers();
+		 System.out.println("TOTAL MICROSERVICES -> "+microservices.size());
+		 // Supposedly was a UNIQUE Id for each	 App Instance (TODO: CHECK Uniqueness!!)
+		 String monid=description.getApplicationInstanceId();
+
+		 int nms=0;//temporal solution to fill 'ContainerRef' (TODO: remove when msContainerRef != null)
+		 //Get needed values -from our lists- to configure Telegraf
+		 for (Microservice ms:microservices)		{
+			 // One Obj per Microservice? 
+			 // TODO: Better an Obj per safeMethod: one IP, one port, one path...?
+			 telegrafobject tObj=new telegrafobject();		
+			 tObj.setMicroserviceid(ms.getId());		  //Microserviceid
+			 tObj.setSafemethods(ms.getSafeMethods());	  //TODO: NULL? -> EDITED json FILE
+			 tObj.setMonid(monid);						  //monid (or whatever UNIQUE Id)
+			 tObj.setComponentappdescription(description);//TODO: The whole appDescrition in each telegrafobject ?!
+
+			 //Relate Ms->Containers->VMs to obtain the Port & Ip of each Ms
+			 String msContainerRef=ms.getContainerRef(); //TODO: NULL?. (Ask Paolo, Simon)
+			 if (msContainerRef==null) {
+				 msContainerRef= "ContainerRef_" + nms++; // temporal solution...				 
+				 System.out.println(" MS.ContainerRef NOT DEFINED!!: (HardCoded solution->)"+ msContainerRef); 
+			 }
+			 System.out.println("\tTOTAL CONTAINERS -> "+containers.size());
+			 // Find Ms->Container
+			 int nc=0;
+			 for (Container cnt:containers){
+				 System.out.println("\t\t Cont. HostName: "+ cnt.getHostname());
+				 String cntContainerRef = cnt.getContainerRef();
+				 if (cntContainerRef == null) {
+					 // TODO: always NULL!?
+					 cntContainerRef =   "ContainerRef_" + nc++;
+					 System.out.println("\t\t Cnt.ContainerRef NOT DEFINED!!: (HardCoded solution->)"+ cntContainerRef);
+				 }
+
+				 if (cntContainerRef.equals(msContainerRef)) {
+					 // Manage PortMapings in the telegraf.setInputPlugins() (n SafeMethods, different ports possible?)
+					 tObj.setPortMappings(cnt.getPortMapping());
+					 System.out.println("\t\t MATCH Ms<--->Cont: Saving Ports Mapping ->"+ cnt.getPortMapping().toString());
+				 }
+				 //TODO:only while testing!!! This is done only inside previous if {}
+				 tObj.setPortMappings(cnt.getPortMapping());
+				 
+				 System.out.println("\t\t\t TOTAL VMs -> "+ virtualmachines.size());
+				 // Find Container->VM
+				 for (VirtualMachine vm:virtualmachines) {
+					 if (vm.getDockerHostNodeName().equals(cnt.getDockerHostNodeName()))
+						 System.out.println("\t\t\t MATCH Cont<--->VM (DockerHostNodeName="+cnt.getDockerHostNodeName() +"): Saving IP ->"+ vm.getDockerHostPublicIp());
+						 tObj.setIp(vm.getDockerHostPublicIp());	//Ip: TODO NULL
+				 }
+			 }
+			 //Adding the telegraf object to the list
+			 TelegrafPluginList.add(tObj);
+		 }
+		 
+	 }
+
+	  /**
+	 * String returnappinstanceId (String appinstanceid)
+	 * TODO: parameter appinstanceid NOT USED...!!?? 
+	 * Called from createApplicationUsingPOST() before to store the Application...??
+	 */
+	 String returnappinstanceId (String appinstanceid) {
+
+		 //TODO: Check that appinstanceid value is present in AppDesription!! 
+		 return description.getApplicationInstanceId();
+
+	 }
+
 }
 
 
diff --git a/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/configuretelegraf.java b/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/configuretelegraf.java
deleted file mode 100644
index 2fef86a477e35f29a553f6ff4a8261d1df6eb619..0000000000000000000000000000000000000000
--- a/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/configuretelegraf.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/****************************************************************
-*Copyright (c) 2017 Tecnalia.
-*Licensed under MIT License (the "License");
-*Permission is hereby granted, free of charge, to any person obtaining a copy 
-of this software and associated documentation files (the "Software"), to deal 
-in the Software without restriction, including without limitation the rights 
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
-copies of the Software, and to permit persons to whom the Software is furnished 
-to do so, subject to the following conditions:
-*The above copyright notice and this permission notice shall be included in all 
-copies or substantial portions of the Software.
-*
-*
-*THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 
-INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 
-PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 
-HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 
-CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 
-OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-*Contributors (in alphabetical order):
-*Alberto Molinuevo                              Tecnalia
-*Gorka Benguria                                 Tecnalia
-*Iñaki Etxaniz                                  Tecnalia
-*Juncal Alonso                                  Tecnalia
-*Leire Orue-Echevarria                          Tecnalia
-*Maria Jose Lopez                               Tecnalia
-*Marisa Escalante                               Tecnalia
-*
-*Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
-*****************************************************************************/
-package eu.decideh2020.adapt.monitoring.server.api.impl;
-
-import java.io.IOException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.List;
-
-import eu.decideh2020.telegraf.file.FileParser;
-import eu.decideh2020.telegraf.file.FileViewer;
-import eu.decideh2020.telegraf.file.FileWriter;
-public class configuretelegraf {
-	 public configuretelegraf (List<telegrafobject> telegrafdata) throws IOException {
-			 FileParser parser=null;
-			try {
-				//parser = new FileParser("/etc/telegraf/telegraf.conf");
-				//I use this telegraf location to test
-				parser = new FileParser("D:\\2017-Decide\\telegraftemplate\\telegraf.conf");
-			} catch (InstantiationException e1) {
-				// TODO Auto-generated catch block
-				e1.printStackTrace();
-			} catch (IllegalAccessException e1) {
-				// TODO Auto-generated catch block
-				e1.printStackTrace();
-			} catch (ClassNotFoundException e1) {
-				// TODO Auto-generated catch block
-				e1.printStackTrace();
-			}
-			
-			//Here the values introduced are the ones corresponding to the Sock shop application deployed in Tecnalia.The correct code to be included 
-			//when the  integration with ADAPTDO is completed so that the parameters in the telegraf are the ones of the real applicaiton deployed by ADAPTDO is commented
-			List <String> urls= new ArrayList<String>();
-			   urls.add("http://sockshop:18082/customers");
-			   urls.add("http://sockshop:18081/health");
-			   urls.add("http://sockshop:18083/catalogue");
-			   urls.add("http://sockshop:8079");
-			   int index=0;
-			for (telegrafobject telegrafobject:telegrafdata)
-				{
-				try {
-					//We only insert the 4 adressess currently in the shockshop, this will change with the real data from the AppDescription
-					if (index<4) {
-				//Comments the "template plugins"
-				parser.changePluginComment("inputs.ping",1, true);
-				parser.changePluginComment("inputs.http_response",1, true);
-				int pluginsnumber;
-				pluginsnumber=parser.countPluginsByName("inputs.http_response");
-				parser.duplicatePlugin("inputs.http_response");
-					//URL microserviceport = new URL("http",td.getIp(),Integer.toString(telegrafobject.getPort()));
-					//URL microserviceurl=new URL(microserviceport+telegrafobject.getSafemethod().get(0));
-					//url=microserviceurl.toString();
-					//These values are harcoded because the current application description hasn't got the corresponding values
-				   String url=urls.get(index);
-					//Changes the values of the needed properties in the duplicated plugin
-					parser.changePropertyValue("inputs.http_response",pluginsnumber+1, "address", url);
-					//Uncomments the duplicated plugin
-					parser.changePluginComment("inputs.http_response",pluginsnumber+1,false);
-					telegrafobject.setPluginindex(pluginsnumber+1);
-					index=index+1;		
-				} else {
-					telegrafobject.setPluginindex(index);
-					index=index+1;
-				}
-					} catch (CloneNotSupportedException e) {
-					// TODO Auto-generated catch block
-					e.printStackTrace();
-				}}
-		//  Writedown the new telegraf.conf file	
-		    try {
-				FileWriter.writeFile("D:\\2017-Decide\\telegraftemplate\\telegraf.conf", parser.getDocument());
-			} catch (CloneNotSupportedException e) {
-				// TODO Auto-generated catch block
-				e.printStackTrace();
-			}
-		}
-			//set up influxDB output plugin when needed
-}
diff --git a/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/dashboard.java b/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/dashboard.java
deleted file mode 100644
index bff2fde83eb7ff565b6be0cdcc010de12b743817..0000000000000000000000000000000000000000
--- a/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/dashboard.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/****************************************************************
-*Copyright (c) 2017 Tecnalia.
-*Licensed under MIT License (the "License");
-*Permission is hereby granted, free of charge, to any person obtaining a copy 
-of this software and associated documentation files (the "Software"), to deal 
-in the Software without restriction, including without limitation the rights 
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
-copies of the Software, and to permit persons to whom the Software is furnished 
-to do so, subject to the following conditions:
-*The above copyright notice and this permission notice shall be included in all 
-copies or substantial portions of the Software.
-*
-*
-*THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 
-INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 
-PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 
-HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 
-CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 
-OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-*Contributors (in alphabetical order):
-*Gorka Benguria                                 Tecnalia
-*Iñaki Etxaniz                                  Tecnalia
-*Juncal Alonso                                  Tecnalia
-*Leire Orue-Echevarria                          Tecnalia
-*Maria Jose Lopez                               Tecnalia
-*Marisa Escalante                               Tecnalia
-*
-*Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
-*****************************************************************************/
-//package eu.decideh2020.adapt.monitoring.server.api.impl;
-//import com.appnexus.grafana.client.GrafanaClient;
-//import com.appnexus.grafana.client.models.Dashboard;
-//import com.appnexus.grafana.client.models.GrafanaDashboard;
-//import com.appnexus.grafana.configuration.GrafanaConfiguration;
-//public class dashboard {
-	//Setup the client
-	//String myhost="grafanahost";
-	//GrafanaConfiguration myconfiguration =new GrafanaConfiguration();	
-	//GrafanaClient grafanaClient = new GrafanaClient(myconfiguration);
-
-	//Setup the dashboard
-	//String DASHBOARD_NAME = "new_dashboard";
-
-	//Dashboard dashboard = new Dashboard().title(DASHBOARD_NAME).version(0);
-
-	//GrafanaDashboard grafanaDashboard = new GrafanaDashboard().dashboard(dashboard);
-
-	//Make API calls
-	//grafanaClient.createDashboard(grafanaDashboard);
-
-	//grafanaClient.getDashboard(DASHBOARD_NAME);
-
-	//grafanaClient.deleteDashboard(DASHBOARD_NAME);
-//}
diff --git a/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/influxDBMonitor.java b/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/influxDBMonitor.java
new file mode 100644
index 0000000000000000000000000000000000000000..c5e41ea9c13f8d835caaac8d6a38140eda71637d
--- /dev/null
+++ b/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/influxDBMonitor.java
@@ -0,0 +1,257 @@
+/****************************************************************
+ *Copyright (c) 2017 Tecnalia.
+ *Licensed under MIT License (the "License");
+ *Permission is hereby granted, free of charge, to any person obtaining a copy 
+of this software and associated documentation files (the "Software"), to deal 
+in the Software without restriction, including without limitation the rights 
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
+copies of the Software, and to permit persons to whom the Software is furnished 
+to do so, subject to the following conditions:
+ *The above copyright notice and this permission notice shall be included in all 
+copies or substantial portions of the Software.
+ *
+ *
+ *THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 
+INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 
+CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 
+OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ *Contributors (in alphabetical order):
+ *Gorka Benguria                                 Tecnalia
+ *Iñaki Etxaniz                                  Tecnalia
+ *Juncal Alonso                                  Tecnalia
+ *Leire Orue-Echevarria                          Tecnalia
+ *Maria Jose Lopez                               Tecnalia
+ *Marisa Escalante                               Tecnalia
+ *
+ *Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+ *****************************************************************************/
+package eu.decideh2020.adapt.monitoring.server.api.impl;
+
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.concurrent.TimeUnit;
+import java.util.logging.Logger;
+
+import org.influxdb.InfluxDB;
+import org.influxdb.InfluxDBFactory;
+import org.influxdb.dto.Point;
+import org.influxdb.dto.Pong;
+import org.influxdb.dto.Query;
+import org.influxdb.dto.QueryResult;
+import org.influxdb.impl.InfluxDBResultMapper;
+
+
+
+public class influxDBMonitor {
+
+	//TODO: store these InfuxDB data in a properties file (?) 
+	String dbURL = "http://localhost:8086"; 
+	String dbUserName = "root";
+	String dbPassword = "root";
+	String dbName = "decideh2020adapt";
+	
+	InfluxDB influxDB;
+
+	String result = null;
+
+	/** 
+	 * Test function:
+	 * -connects to the InfluxDB
+	 * -reads from the InfluxDB
+	 * -writes to the InfluxDB 
+	 */
+	public void Test() {
+		result = "InfluxDBMonitor.Test() Result: \n";
+
+		/* --- IEE start --EXAMPLE: CODE TO BE INCLUDED IN THE CALLING PART--- */
+		// PointList will receive the Points retrieved from InfluxDB
+		List<pointHttp_response> pointListH = null;
+		influxDBMonitor iflxdb = new influxDBMonitor();
+		// 1. CONNECT 
+		if (iflxdb.connect() == 0) {
+			// Connected to the DB server
+
+			// 2.1. READ -http_responses-
+			pointListH = iflxdb.readHttp_responseS();
+			// Results in the List are ordered the most recent first (index=0)
+
+			// Example of iteration with the result list
+			pointHttp_response PointH = null;
+			if (pointListH.size() > 1) {
+				System.out.println ("Query HTTP returned (n) ELEMENTS: (" + pointListH.size() + ") " + dbName);
+				//return;
+			}
+			Iterator<pointHttp_response> itH = pointListH.iterator();
+			while (itH.hasNext()) {
+				PointH = itH.next();
+				System.out.println (PointH.toString());
+				//System.out.println ("Response_time=" + PointH.getResponse_time());
+				//System.out.println ("Result=" + PointH.getResult());
+				//System.out.println ("Server=" + PointH.getServer());
+			}
+
+			System.out.println ("-------->influxDBMonitor: " + iflxdb.result);
+		}
+		/* --- IEE end --- */		 
+
+		// 2.2. READ -ping-
+		List<pointPing> pointList2 = null;
+		pointList2 = iflxdb.readPingS();
+		// Results in the List are ordered the most recent first (index=0)
+
+		// Example of iteration with the result list
+		pointPing PointP = null;
+		if (pointList2.size() > 1) {
+			System.out.println ("Query PING returned (n) ELEMENTS: (" + pointList2.size() + ") " + dbName);
+			//return;
+		}
+		Iterator<pointPing> itP = pointList2.iterator();
+		while (itP.hasNext()) {
+			PointP = itP.next();
+			System.out.println (PointP.toString());
+		}
+
+		System.out.println ("-------->influxDBMonitor: " + iflxdb.result);			  
+
+		// WRITE 
+		
+		/*
+		// ### Create DataBase ### (??) -Not needed, we have one-
+		influxDB.createDatabase("baeldung");
+		influxDB.createRetentionPolicy("defaultPolicy", "baeldung", "30d", 1, true);
+		//influxDB.createRetentionPolicy(rpName, dbName, "30d", "30m", 2, true); // 6 param version
+		influxDB.setRetentionPolicy("defaultPolicy");
+		influxDB.setDatabase("baeldung");
+		 */
+		
+		//The basic unit of information in InfluxDB is a Point, which is essentially a timestamp and a key-value map.
+		Point point = Point.measurement("Testmeasurement")
+				.time(System.currentTimeMillis(), TimeUnit.MILLISECONDS)
+				.addField("name", "server1")
+				.addField("free", 4743656L)
+				.addField("used", 1015096L)
+				.addField("buffer", 1010467L)
+				.build();
+
+		iflxdb.writePoint(point);			
+
+
+	}
+	/** 
+	 * CONNECTS to the InfluxDB 
+	 * @return 0 if OK / -1 if KO
+	 */
+	public int connect () { 
+		influxDB = InfluxDBFactory.connect(dbURL, dbUserName, dbPassword);
+	
+		Logger log = Logger.getGlobal();
+		// Set login level (BASIC, FULL, HEADERS, or NONE)
+		influxDB.setLogLevel(InfluxDB.LogLevel.FULL);
+	
+		// PING to test (???? which port?)
+		Pong response = influxDB.ping();
+		if (response.getVersion().equalsIgnoreCase("unknown")) {
+			System.out.println ("Error pinging InfluxDB server "+ dbName);
+			log.info("Error pinging InfluxDB server "+ dbName);
+			result += "ERROR: Not connected \n";
+			return -1;
+		}
+		System.out.println ("OK pinging InfluxDB server: "+ dbName);
+		log.info("OK pinging InfluxDB server: "+ dbName);
+		result += "OK: Connected \n";
+		return 0; 
+	
+	}
+	/** 
+	 * WRITES a Point p to the InfluxDB database. 
+	 * The DB details are not passed as parameters (DB should be created in advance, e.g. calling Connect()) 
+	 *  
+	 * @param p Point to be written. 
+	 * @return 
+	 */
+	public void writePoint (Point point ) {
+		
+		/*// Do this in the calling side
+		  point = Point.measurement("measurementName")		 
+				.time(System.currentTimeMillis(), TimeUnit.MILLISECONDS)
+				.addField("name", "server1")
+				.addField("free", 4743656L)
+				.addField("used", 1015096L)
+				.addField("buffer", 1010467L)
+				.build();
+		*/
+		
+		//we can still write one at a time, with some additional setup
+		influxDB.createRetentionPolicy("defaultPolicy", dbName, "30d", 1, true);//needed?
+		//influxDB.setRetentionPolicy("defaultPolicy");//needed?
+		//influxDB.setDatabase(dbName);//needed?
+		//influxDB.write(point);
+		influxDB.write(dbName, "defaultPolicy", point);
+		
+	}
+
+
+
+	/**
+	 * 
+	 * @return List of Http_response points
+	 */
+	public List<pointHttp_response> readHttp_responseS () {
+
+		//influxDB.setDatabase("dbName"); //Not needed, dbName included in query
+
+		// Get last 10 measurements (assumption: 4 servers, we will have one measurement for each...improve this)  
+		Query query = new Query("SELECT response_time, result_type, server FROM http_response  WHERE time > now() - 1m ORDER BY time DESC LIMIT 10", dbName);
+		QueryResult queryResult = influxDB.query(query);			 
+
+		InfluxDBResultMapper resultMapper = new InfluxDBResultMapper();
+		List<pointHttp_response> PointList = resultMapper.toPOJO(queryResult, pointHttp_response.class);
+
+		if (PointList.size() == 0) {
+			System.out.println ("INFO: Query returned NOTHING " + "-measurements: " + PointList.size() + "- " + dbName);
+			//return;
+		}
+		else {
+			System.out.println ("OK: Read from InfluxDB" + "-HTTP measurements: " + PointList.size() + "- " + dbName);
+			result += "OK: Read from InfluxDB" + "-measurements: " + PointList.size() + "- " + dbName;
+		}
+
+		return PointList;
+	}
+
+
+	/**
+	 * 
+	 * @return List of ping points
+	 */
+	public List<pointPing> readPingS () {
+
+		//influxDB.setDatabase("dbName"); //Not needed, dbName included in query
+
+		// Get last 4 measurements (assumption: 4 servers, we will have one measurement for each...improve this)  
+		Query query = new Query("SELECT * FROM ping WHERE time > now() - 1m ORDER BY time DESC LIMIT 4", dbName);
+		QueryResult queryResult = influxDB.query(query);			 
+
+		InfluxDBResultMapper resultMapper = new InfluxDBResultMapper();
+		List<pointPing> PointList = resultMapper.toPOJO(queryResult, pointPing.class);
+
+		if (PointList.size() == 0) {
+			System.out.println ("INFO: Query returned NOTHING " + "-measurements: " + PointList.size() + "- " + dbName);
+			//return;
+		}
+		else {
+			System.out.println ("OK: Read from InfluxDB" + "-PING measurements: " + PointList.size() + "- " + dbName);
+			result += "OK: Read from InfluxDB" + "-measurements: " + PointList.size() + "- " + dbName;
+		}
+
+
+		return PointList;
+	}
+
+}
+
+
diff --git a/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/Taskassessment.java b/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/pointHttp_response.java
similarity index 57%
rename from ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/Taskassessment.java
rename to ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/pointHttp_response.java
index 17dfd5d33be23c569dff0f669ab7dfe4e10bc0bc..8ccd68ef969e8cabf7722ba86ecafab117a86e93 100644
--- a/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/Taskassessment.java
+++ b/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/pointHttp_response.java
@@ -19,7 +19,6 @@ CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFT
 OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 *Contributors (in alphabetical order):
-*Alberto Molinuevo                              Tecnalia
 *Gorka Benguria                                 Tecnalia
 *Iñaki Etxaniz                                  Tecnalia
 *Juncal Alonso                                  Tecnalia
@@ -31,20 +30,56 @@ OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 *****************************************************************************/
 package eu.decideh2020.adapt.monitoring.server.api.impl;
 
-import java.util.TimerTask;
+import java.time.Instant;
 
-public class Taskassessment extends TimerTask {
-	String monstatus="monitored";
-	@Override
-	public void run () {
-		// TODO Auto-generated method stub
-		if ( monstatus.equalsIgnoreCase("monitored") ) {
-			System.out.println ("Mon status"+monstatus);
-        } else {
-            System.out.println("Monitoring stopped");
-            //timer.cancel(); // Not necessary because
-		System.out.println ("Mon status"+monstatus);
+import org.influxdb.annotation.Column;
+import org.influxdb.annotation.Measurement;
+
+/* 
+ * class to receive the query result points
+ * Measurement: http_response
+ */
+@Measurement(name = "http_response")
+public class pointHttp_response {
+
+	@Column(name = "time")
+    private Instant time;  
+    @Column(name = "response_time")
+    private double response_time;
+    @Column(name = "result_type")
+    private String result;	  
+    @Column(name = "server", tag=true)
+    private String server;
+
+    public double getResponse_time() {
+		return response_time;
+	}
+	public void setResponse_time(double response_time) {
+		this.response_time = response_time;
+	}
+	public String getResult() {
+		return result;
+	}
+	public void setResult(String result) {
+		this.result = result;
+	}
+	public String getServer() {
+		return server;
+	}
+	public void setServer(String server) {
+		this.server = server;
+	}
+    public Instant gettime () {
+    	return time;	
+    }
+	public void settime(Instant time) {
+		this.time = time;
 	}
 
-}
-}
+    @Override
+    public String toString() {
+		return "Point_http_response [time=" + time + ", response_time=" + response_time + ", result=" + result
+				+ ", server=" + server + "]";
+	}
+    
+}
\ No newline at end of file
diff --git a/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/pointPing.java b/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/pointPing.java
new file mode 100644
index 0000000000000000000000000000000000000000..7c3bca7b8d718ee075504a2fdd8ce8a53a33dbfa
--- /dev/null
+++ b/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/pointPing.java
@@ -0,0 +1,131 @@
+/****************************************************************
+*Copyright (c) 2017 Tecnalia.
+*Licensed under MIT License (the "License");
+*Permission is hereby granted, free of charge, to any person obtaining a copy 
+of this software and associated documentation files (the "Software"), to deal 
+in the Software without restriction, including without limitation the rights 
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
+copies of the Software, and to permit persons to whom the Software is furnished 
+to do so, subject to the following conditions:
+*The above copyright notice and this permission notice shall be included in all 
+copies or substantial portions of the Software.
+*
+*
+*THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 
+INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 
+CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 
+OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+*Contributors (in alphabetical order):
+*Gorka Benguria                                 Tecnalia
+*Iñaki Etxaniz                                  Tecnalia
+*Juncal Alonso                                  Tecnalia
+*Leire Orue-Echevarria                          Tecnalia
+*Maria Jose Lopez                               Tecnalia
+*Marisa Escalante                               Tecnalia
+*
+*Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+*****************************************************************************/
+package eu.decideh2020.adapt.monitoring.server.api.impl;
+
+import java.time.Instant;
+
+import org.influxdb.annotation.Column;
+import org.influxdb.annotation.Measurement;
+
+/* 
+ * class to receive the query result points
+ * Measurement: ping
+ */
+@Measurement(name = "ping")
+public class pointPing {
+	
+	@Column(name = "time")
+    private Instant time;  
+    
+	@Column(name = "host", tag=true)
+    private String host;
+    @Column(name = "url", tag=true)
+    private String url;
+    
+    @Column(name = "average_response_ms")
+    private double average_response_ms;
+    @Column(name = "maximum_response_ms")
+    private double maximum_response_ms;
+    @Column(name = "minimum_response_ms")
+    private double minimum_response_ms;
+    @Column(name = "packets_received")
+    private double packets_received;
+	@Column(name = "packets_transmitted")
+    private double packets_transmitted;
+    @Column(name = "percent_packet_loss")
+    private double percent_packet_loss;
+    
+    @Override
+	public String toString() {
+		return "Point_ping [time=" + time + ", host=" + host + ", url=" + url + ", average_response_ms="
+				+ average_response_ms + ", maximum_response_ms=" + maximum_response_ms + ", minimum_response_ms="
+				+ minimum_response_ms + ", packets_received=" + packets_received + ", packets_transmitted="
+				+ packets_transmitted + ", percent_packet_loss=" + percent_packet_loss + "]";
+	}
+	public Instant getTime() {
+		return time;
+	}
+	public void setTime(Instant time) {
+		this.time = time;
+	}
+	public String getHost() {
+		return host;
+	}
+	public void setHost(String host) {
+		this.host = host;
+	}
+	public String getUrl() {
+		return url;
+	}
+	public void setUrl(String url) {
+		this.url = url;
+	}
+	public double getAverage_response_ms() {
+		return average_response_ms;
+	}
+	public void setAverage_response_ms(double average_response_ms) {
+		this.average_response_ms = average_response_ms;
+	}
+	public double getMaximum_response_ms() {
+		return maximum_response_ms;
+	}
+	public void setMaximum_response_ms(double maximum_response_ms) {
+		this.maximum_response_ms = maximum_response_ms;
+	}
+	public double getMinimum_response_ms() {
+		return minimum_response_ms;
+	}
+	public void setMinimum_response_ms(double minimum_response_ms) {
+		this.minimum_response_ms = minimum_response_ms;
+	}
+	public double getPackets_received() {
+		return packets_received;
+	}
+	public void setPackets_received(double packets_received) {
+		this.packets_received = packets_received;
+	}
+	public double getPackets_transmitted() {
+		return packets_transmitted;
+	}
+	public void setPackets_transmitted(double packets_transmitted) {
+		this.packets_transmitted = packets_transmitted;
+	}
+	public double getPercent_packet_loss() {
+		return percent_packet_loss;
+	}
+	public void setPercent_packet_loss(double percent_packet_loss) {
+		this.percent_packet_loss = percent_packet_loss;
+	}
+
+    
+    
+
+}
diff --git a/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/telegraf.java b/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/telegraf.java
new file mode 100644
index 0000000000000000000000000000000000000000..e298f251c70bc84b8c79e15efedd053201749d01
--- /dev/null
+++ b/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/telegraf.java
@@ -0,0 +1,335 @@
+/****************************************************************
+*Copyright (c) 2017 Tecnalia.
+*Licensed under MIT License (the "License");
+*Permission is hereby granted, free of charge, to any person obtaining a copy 
+of this software and associated documentation files (the "Software"), to deal 
+in the Software without restriction, including without limitation the rights 
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
+copies of the Software, and to permit persons to whom the Software is furnished 
+to do so, subject to the following conditions:
+*The above copyright notice and this permission notice shall be included in all 
+copies or substantial portions of the Software.
+*
+*
+*THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 
+INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 
+CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 
+OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+*Contributors (in alphabetical order):
+*Alberto Molinuevo                              Tecnalia
+*Gorka Benguria                                 Tecnalia
+*Iñaki Etxaniz                                  Tecnalia
+*Juncal Alonso                                  Tecnalia
+*Leire Orue-Echevarria                          Tecnalia
+*Maria Jose Lopez                               Tecnalia
+*Marisa Escalante                               Tecnalia
+*
+*Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+*****************************************************************************/
+package eu.decideh2020.adapt.monitoring.server.api.impl;
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+import java.util.Timer;
+
+import eu.DECIDEh2020.appManager.models.AppDescription;
+import eu.DECIDEh2020.appManager.models.PortMapping;
+import eu.DECIDEh2020.appManager.models.VirtualMachine;
+//import eu.decideh2020.acsmi.monitoring.server.api.impl.CsSlaAssessment;
+//import eu.decideh2020.acsmi.monitoring.server.api.impl.MonitoredVm;
+import eu.decideh2020.telegraf.file.FileParser;
+import eu.decideh2020.telegraf.file.FileViewer;
+import eu.decideh2020.telegraf.file.FileWriter;
+
+
+/**
+ * 	 Performs the configuration needed for TELEGRAF:
+ * 	 	-List of Ms (TODO: HARDCODED -> read from AppManager)
+ * 	 	-The parser Writes/Reads from telegraf.conf file (TODO: HARDCODED -> DOCKER?)
+ * 	 	-Does sth (???) with the list of 'telegrafobject' received
+ */
+public class telegraf {
+	//TODO: put this (and read from) in .properties file 
+	// LOCAL file (only to test locally)
+	static final String TELEGRAF_FILENAME = "telegraf.conf"; // "antes \\telegraftemplate\\telegraf.conf";
+	// UNIX path
+	static final String TELEGRAF_CONF_PATH_UNIX = "/etc/telegraf/";
+	static final String TELEGRAF_SCRIPT_PATH_UNIX = "/";
+	static final String TELEGRAF_SCRIPT_NAME = "telegrafrestart.sh"; //RestartTelegraf.bat
+	static final String INPUT_PLUGING_HTTP =  "inputs.http_response";
+	static final String OUTPUT_PLUGIN_INFLUXDB = "outputs.influxdb";
+	
+	// Telegraf parser, and Telegraf config file
+	static FileParser parser = null;
+	static String telegrafConfFile = null;
+	
+	//Path where telegraf.conf is located, finished with adequate slash (\ or /) Needed to open AND write config. file
+	String pathTelegraf = null;
+	static String pathTelegrafScript = null;
+	
+	/**
+	 * @return the parser or NULL if not set
+	 */
+	public static FileParser getParser() {
+		return parser;
+	}
+	
+	/**
+	 * Constructor
+	 * Called by configuration.apply()
+	 *  -Sets the parser with the filepath
+	 *  -Modifies the parser file (inserts a plugin for every safemethod)
+	 *  -Writes the file to disk 
+	 * 
+	 * @throws IOException
+	 */
+	public telegraf (List<telegrafobject> telegrafdata) throws IOException {
+		
+		//Set parser, only once 
+		// TODO: Check 'once'...OJO!!!! parser es static -> hacer telegrafConfFile static (se usa luego al escribir, y puede estar a NULL !!!??)
+		if (parser == null) {
+			parser = setParser();
+			if (parser == null)
+				return;
+			}
+		
+		//Data
+		System.out.println("telegrafData has ["+telegrafdata.size()+"] elements" );
+		if (setInputPlugins(telegrafdata) == false)
+			return;
+		if (setOutputPlugin() == false)
+			return;
+		
+		//Write .conf file
+		writeTelegrafFile();
+
+	}
+	
+	/**
+	 * 
+	 * @return FileParser, to manage the existing telegraf.conf file // NULL if not found
+	 * Sets the 'parser', and stores it for future calls in a static variable.
+	 * The same for the 'fileTelegraf', needed to write the configuration file in future calls!
+	 * @throws IOException
+	 */
+	public FileParser setParser() throws IOException {
+
+		final String osName = System.getProperty("os.name");
+		
+		// Linux: fixed path
+		if (osName.matches("Win.*") == false) {
+			pathTelegraf = TELEGRAF_CONF_PATH_UNIX + "/"; // /etc/telegraf/ (telegraf.conf)
+			pathTelegrafScript = TELEGRAF_SCRIPT_PATH_UNIX; 
+			} 
+		// Windows: User_Home\filename
+		else {
+			String pathHome = configuration.getUserHome();
+			if (pathHome == null) {
+				System.out.println("Error: Unable to access User Home");
+				return null;
+				}
+
+			pathTelegraf = pathHome + "\\"; //C:\Users\106246\AppData\Local\Temp\...
+			pathTelegrafScript = pathTelegraf; 
+			}
+		// Full Telegraf file, adding filename
+		telegrafConfFile = pathTelegraf + TELEGRAF_FILENAME;
+		System.out.println("Telegraf.conf file: "+ telegrafConfFile);
+		
+		//Create telegraf file parser
+		try {
+			parser = new FileParser(telegrafConfFile);
+		} 
+		catch (InstantiationException | IllegalAccessException | ClassNotFoundException | IOException e) {
+			System.out.println("No Telegraf.conf file! "+ e.getMessage());
+			return null;
+		}
+		
+		return parser;
+	}
+
+	/**
+	 *  Defines an input "http_response" plug-in for EVERY safemethod in EVERY telegrafObject
+	 *  @return	
+	 *  @throws IOException
+	 */
+	public static boolean setInputPlugins(List<telegrafobject> telegrafdata) {
+
+		// For testing. Comment and use the URLs of the real application deployed by ADAPT_DO 
+		/* 
+		 * //URLs corresponding to the Sock shop application deployed in Tecnalia.
+		 * //List <String> urls= new ArrayList<String>();
+		 * urls.add("http://integration.decideh2020.lan.esilab.org:18082/customers");
+		 * urls.add("http://integration.decideh2020.lan.esilab.org:18081/health");
+		 * urls.add("http://integration.decideh2020.lan.esilab.org:18083/catalogue");
+		 * urls.add("http://integration.decideh2020.lan.esilab.org:8079");
+		 */
+		System.out.println("Editing plugins for telegraf---------------");
+		
+		// First, empty the existing plugins (except the template, nº 1)
+		int numberHttpPlgs=parser.countPluginsByName(INPUT_PLUGING_HTTP);
+		System.out.println("parser: Deleting existing ["+numberHttpPlgs+"] Http plugins" );
+		while (numberHttpPlgs>1) {
+			parser.deletePlugin(INPUT_PLUGING_HTTP, numberHttpPlgs);
+			numberHttpPlgs--;
+		}
+		
+		//System.out.println("telegrafData has ["+telegrafdata.size()+"] elements" );
+		// For every telegrafobject: get info (Data in 'telegrafdata' was read from the AppDescription)
+		for (telegrafobject tlgObj:telegrafdata) {
+
+			// TODO: safeMethods is a list! Create plug-in for each safemethod, not only the first [0]
+			List<String> smList = tlgObj.getSafemethods();
+			String safeMethod="";
+			if (smList.size() > 0)
+				safeMethod = smList.get(0);
+			else
+				continue;
+			
+			// IMPORTANT: URLs of SafeMethods MUST CONTAIN protocol part (i.e. *http://*)
+			URL url=null;
+			try {
+				url = new URL(safeMethod);
+			} catch (MalformedURLException e1) {
+				//TODO:check MalformedURLException - if no protocol is specified, or an unknown protocol is found, or spec is null.
+				e1.printStackTrace();
+			}
+						
+			// IP or Domain
+			String smIP = tlgObj.getIp();
+			// Path
+			String smPath = "";
+			smPath = url.getPath(); //????CHEK!!!
+
+			// Port
+			String smPort = "80"; //Default port (can be missing)
+			int smiPort = url.getDefaultPort();  // ??
+			smiPort = url.getPort();			//Initial Port, int
+			smPort = String.valueOf(smiPort); 	//Initial Port, string
+
+			
+			//Find if SafeMethod port (smPort) is mapped in the container
+			List<PortMapping> pmList = tlgObj.getPortMappings();
+			for (PortMapping pm:pmList) {
+				 if (smPort.equals(pm.getContainerPort())) {
+					 tlgObj.setPort(pm.getHostPort()); 	//Port, string (Not used!?)
+				 }
+			 }
+			if (tlgObj.getPort() == null) {
+				System.out.println("Info: 'Port' of safemethod not mapped in container!");
+			}
+			else {
+				try {smiPort = Integer.parseInt(tlgObj.getPort());}	//Final Port, int
+				catch (NumberFormatException e){
+					System.out.println("Info: 'Port' of safemethod not an integer!: (using default '80') " + e.getMessage());
+				}
+			}
+
+			// Create final-URL-for-SafeMethod-inside-container
+			URL smURL = null;
+			try {smURL = new URL("http", smIP, smiPort, smPath);}
+				catch (MalformedURLException e) {
+					System.out.println("Error: wrong URL for Safemethod: " + e.getMessage());
+					continue; //Next 
+					}
+			System.out.println("--->SAFEMETHOD: " + smURL.toExternalForm());
+			
+			//Duplicate the "template" input plugin for "http_response" 
+			try {
+				// Insert a new plugin, edit, uncomment
+				int pluginsnumber=parser.countPluginsByName(INPUT_PLUGING_HTTP);
+				parser.duplicatePlugin(INPUT_PLUGING_HTTP);
+				parser.changePropertyValue(INPUT_PLUGING_HTTP, pluginsnumber+1, "address", "\""+smURL.toString()+"\"");
+				parser.changePluginComment(INPUT_PLUGING_HTTP, pluginsnumber+1, false);
+
+				//Store the index (needed afterwards to delete the SAME plugin!?)
+				tlgObj.setPluginindex(pluginsnumber+1); 
+				}
+			catch (CloneNotSupportedException e) {
+				System.out.println("ERROR: Unable to edit Telegraf.conf file!"+ e.getMessage());
+				return false;
+				}
+			
+		} //for EVERY telegrafobject
+		
+		return true;
+	}
+	/**
+	 *  Defines an output  "Infludb" 
+	 *  (Actually, only uncomments the output already configured in the template) 
+	 *  @return	
+	 *  @throws IOException
+	 */
+	public static boolean setOutputPlugin() {
+		
+		// Activate output Influxdb (in our new telegraf.conf template ALL is commented by default)
+		try {
+			parser.changePluginComment(OUTPUT_PLUGIN_INFLUXDB, 1, false);
+			// Set Influxdb url (e.g. http://localhost:8086)
+			String influxUrl = configuration.prop.getProperty("adaptMonitoring.InfluxdbURL");
+			System.out.println("properties: adaptMonitoring.InfluxdbURL = " + influxUrl + "\n");
+			parser.changePropertyValue(OUTPUT_PLUGIN_INFLUXDB, "urls", influxUrl);
+			return true;
+			} 
+		catch (CloneNotSupportedException e) {
+			System.out.println("ERROR: Unable to add InfluxDB plugin in Telegraf.conf file!"+ e.getMessage());
+			return false;
+			}
+		}
+	
+	/**
+	 *  Writes the (edited) config file
+	 *  Restarts Telegraf
+	 */
+	public static boolean writeTelegrafFile() {
+		//  Write down the new telegraf.conf file	
+		try {FileWriter.writeFile(telegrafConfFile, parser.getDocument());} 
+			catch (IOException | CloneNotSupportedException e) {
+			System.out.println("ERROR: Unable to write Telegraf.conf file!"+ e.getMessage());
+			return false;
+			}
+		
+		//Restart TELEGRAF to read changes in the .conf file
+		//TODO: Check if correct
+		System.out.println("Restarting telegraf......................................................"+ pathTelegrafScript + TELEGRAF_SCRIPT_NAME);
+		//Suposing restart script in user home
+		try {Runtime.getRuntime().exec(pathTelegrafScript +  TELEGRAF_SCRIPT_NAME);     } //"/etc/init.d/RestartTelegraf.sh" ??
+			catch (SecurityException  | NullPointerException | IOException | IllegalArgumentException e) {
+				System.out.println("ERROR: Unable to restart Telegraf!"+ e.getMessage());
+				return false;
+				}
+		
+		
+		return true;
+	}
+
+	
+	/* // More complicated way of extract the 'path', eliminating (possible) protocol & domain_or_IP & port
+	 try {smPath = safeMethod.substring(safeMethod.indexOf('/'));}
+		catch (IndexOutOfBoundsException e) {
+		System.out.println("Error: Bad path in SafeMethod (NumberFormatException): " + e.getMessage());
+		//Try next safeMethod
+		continue;
+		} 
+	*/
+	
+	/* // More complicated way of extracting 'Port' -doesn't work if protocol is present!!-
+	try {smPort = safeMethod.substring(1+safeMethod.indexOf(':'), safeMethod.indexOf('/'));}
+		catch (IndexOutOfBoundsException e){
+			System.out.println("Info: 'Port' of safemethod not specified (default '80' used): " + e.getMessage());
+			}
+	try {smiPort = Integer.parseInt(smPort);}	//Port, int
+		catch (NumberFormatException e){
+			System.out.println("Error: 'Port' of safemethod not a number!: (default '80' used) " + e.getMessage());
+			}
+	*/
+	
+}
+
diff --git a/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/telegrafobject.java b/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/telegrafobject.java
index d68d9f6757c39ce363d7220dcccfb51723d90eb3..c40dc364c29c41ec8f94a2bc866e3c41606b6f4e 100644
--- a/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/telegrafobject.java
+++ b/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/java/eu/decideh2020/adapt/monitoring/server/api/impl/telegrafobject.java
@@ -1,78 +1,90 @@
 /****************************************************************
-*Copyright (c) 2017 Tecnalia.
-*Licensed under MIT License (the "License");
-*Permission is hereby granted, free of charge, to any person obtaining a copy 
+ *Copyright (c) 2017 Tecnalia.
+ *Licensed under MIT License (the "License");
+ *Permission is hereby granted, free of charge, to any person obtaining a copy 
 of this software and associated documentation files (the "Software"), to deal 
 in the Software without restriction, including without limitation the rights 
 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
 copies of the Software, and to permit persons to whom the Software is furnished 
 to do so, subject to the following conditions:
-*The above copyright notice and this permission notice shall be included in all 
+ *The above copyright notice and this permission notice shall be included in all 
 copies or substantial portions of the Software.
-*
-*
-*THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 
+ *
+ *
+ *THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 
 INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 
 PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 
 HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 
 CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 
 OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-*Contributors (in alphabetical order):
-*Alberto Molinuevo                              Tecnalia
-*Gorka Benguria                                 Tecnalia
-*Iñaki Etxaniz                                  Tecnalia
-*Juncal Alonso                                  Tecnalia
-*Leire Orue-Echevarria                          Tecnalia
-*Maria Jose Lopez                               Tecnalia
-*Marisa Escalante                               Tecnalia
-*
-*Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
-*****************************************************************************/
+ *Contributors (in alphabetical order):
+ *Alberto Molinuevo                              Tecnalia
+ *Gorka Benguria                                 Tecnalia
+ *Iñaki Etxaniz                                  Tecnalia
+ *Juncal Alonso                                  Tecnalia
+ *Leire Orue-Echevarria                          Tecnalia
+ *Maria Jose Lopez                               Tecnalia
+ *Marisa Escalante                               Tecnalia
+ *
+ *Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+ *****************************************************************************/
 package eu.decideh2020.adapt.monitoring.server.api.impl;
 
 import java.util.List;
 
 import eu.DECIDEh2020.appManager.models.AppDescription;
+import eu.DECIDEh2020.appManager.models.PortMapping;
 
 
 public class telegrafobject {
 	private String Microserviceid;
-    private String Ip;
-    private Integer Port;
-    private List <String> Safemethod;
-    private String monid;
-    private AppDescription componentappdescription;
-    private Integer pluginindex;
-
-    public String getMicroserviceid() {
-        return Microserviceid;
-    }
-
-    public void setMicroserviceid(String Microserviceid) {
-        this.Microserviceid = Microserviceid;
-    }
- 
-    public String getIp() {
-        return Ip;
-    }
-
-    public void setIp(String Ip) {
-        this.Ip = Ip;
-    }
-    public Integer getPort() {
-        return Port;
-    }
-
-    public void setPort(Integer Port) {
-        this.Port = Port;
-    }
-    public List <String> getSafemethod() {
-        return Safemethod;
-    }
-    public void setSafemethod(List<String> Safemethod) {
-        this.Safemethod = Safemethod;
-    }
+	private String Ip;
+	private String Port;
+	private List <String> Safemethods; //TODO: Make this a list of objects {Path, Port, State [Up/Down]} instead of Strings
+	private List <SafeMethod> safeMethodsObj;
+	private List<PortMapping> PortMappings;
+	private String monid;
+	private AppDescription componentappdescription;
+	private Integer pluginindex;
+	
+
+	public String getMicroserviceid() {
+		return Microserviceid;
+	}
+
+	public void setMicroserviceid(String Microserviceid) {
+		this.Microserviceid = Microserviceid;
+	}
+
+	public String getIp() {
+		return Ip;
+	}
+
+	public void setIp(String Ip) {
+		this.Ip = Ip;
+	}
+	public String getPort() {
+		return Port;
+	}
+	public void setPort(String Port) {
+		this.Port = Port;
+	}
+
+	public List <String> getSafemethods() {
+		return Safemethods;
+	}
+	public void setSafemethods(List<String> Safemethod) {
+		this.Safemethods = Safemethod;
+	}
+
+	public List<PortMapping> getPortMappings() {
+		return PortMappings;
+	}
+
+	public void setPortMappings(List<PortMapping> list) {
+		PortMappings = list;
+	}
 
 	public String getMonid() {
 		return monid;
@@ -97,4 +109,7 @@ public class telegrafobject {
 	public void setPluginindex(Integer pluginindex) {
 		this.pluginindex = pluginindex;
 	}
+
+
 }
+
diff --git a/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/resources/adaptmon.properties b/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/resources/adaptmon.properties
index c5f7af1c702deb1c727ad7d25557e498c3b53a1c..285ae2e286139eeadfdb64169720424d481a3503 100644
--- a/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/resources/adaptmon.properties
+++ b/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/resources/adaptmon.properties
@@ -1 +1,2 @@
 adaptMonitoring.appDescriptionLocalPath=D:\\2017-Decide\\appdescfolder
+adaptMonitoring.DESCRIPTOR =AdaptMM/DECIDE.json
\ No newline at end of file
diff --git a/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/resources/swagger/swagger - copia.json b/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/resources/swagger/swagger - copia.json
new file mode 100644
index 0000000000000000000000000000000000000000..724ec1e30d9a10414b7177448209333ae83d0f46
--- /dev/null
+++ b/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/resources/swagger/swagger - copia.json	
@@ -0,0 +1,297 @@
+{
+  "swagger": "2.0",
+  "info": {
+    "description": "adapt monitoring API documentation.This API describes the methods to access the ADAPT monitoring functionalities. This version updates de methods that need monid. In this version these methods include the appdescuri in their body.",
+    "version": "0.0.1",
+    "title": "adapt monitoring API"
+  },
+  "host": "85.91.40.245:8088",
+  "basePath": "/monitoringmanager",
+  "schemes": [
+    "http"
+  ],
+  "tags": [
+    {
+      "name": "application",
+      "description": "adapt application tag"
+    }
+  ],
+  "paths": {
+    "/api/applications": {
+      "get": {
+        "description": "Gets the list of all the applications in ADAPT monitoring, including their id and the status",
+        "tags": [
+          "application"
+        ],
+        "summary": "getAllApplications",
+        "operationId": "getAllApplicationsUsingGET",
+        "consumes": [
+          "application/json"
+        ],
+        "produces": [
+          "*/*"
+        ],
+        "responses": {
+          "200": {
+            "description": "The list of all the monitoring elements in ADAPT monitoring is being returned",
+            "schema": {
+              "type": "array",
+              "items": {
+                "$ref": "#/definitions/Application"
+              }
+            }
+          },
+          "401": {
+            "description": "Unauthorized"
+          },
+          "403": {
+            "description": "Forbidden"
+          },
+          "404": {
+            "description": "Not Found"
+          }
+        }
+      },
+      "post": {
+        "description": "Creates an application to be included in ADAPT monitoring",
+        "tags": [
+          "application"
+        ],
+        "summary": "createApplication",
+        "operationId": "createApplicationUsingPOST",
+        "consumes": [
+          "application/json"
+        ],
+        "produces": [
+          "*/*"
+        ],
+        "parameters": [
+          {
+            "in": "body",
+            "name": "application",
+            "required": true,
+            "schema": {
+              "$ref": "#/definitions/Application"
+            }
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "Application monitoring Created",
+            "schema": {
+              "$ref": "#/definitions/Application"
+            }
+          },
+          "401": {
+            "description": "Unauthorized"
+          },
+          "403": {
+            "description": "Forbidden"
+          },
+          "404": {
+            "description": "Not Found"
+          }
+        }
+      }
+    },
+    "/api/applications/{appdescuri}": {
+      "get": {
+        "description": "Gets the status wrt monitoring of a given application",
+        "tags": [
+          "application"
+        ],
+        "summary": "getApplicationstatus",
+        "operationId": "getApplicationUsingGET",
+        "consumes": [
+          "application/json"
+        ],
+        "produces": [
+          "*/*"
+        ],
+        "parameters": [
+          {
+            "name": "appdescuri",
+            "in": "path",
+            "description": "application description uri",
+            "required": true,
+            "type": "string"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "Specific app monitoring is returned",
+            "schema": {
+              "$ref": "#/definitions/Application"
+            }
+          },
+          "401": {
+            "description": "Unauthorized"
+          },
+          "403": {
+            "description": "Forbidden"
+          },
+          "404": {
+            "description": "Not Found"
+          }
+        }
+      },
+      "delete": {
+        "tags": [
+          "application"
+        ],
+        "summary": "deleteApplication",
+        "operationId": "deleteApplicationUsingDELETE",
+        "consumes": [
+          "application/json"
+        ],
+        "produces": [
+          "*/*"
+        ],
+        "parameters": [
+          {
+            "name": "appdescuri",
+            "in": "path",
+            "description": "application description uri",
+            "required": true,
+            "type": "string"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "App deleted form the monitoring list"
+          },
+          "204": {
+            "description": "No Content"
+          },
+          "401": {
+            "description": "Unauthorized"
+          },
+          "403": {
+            "description": "Forbidden"
+          }
+        }
+      },
+      "put": {
+        "description": "Updates the monitoring status of a given application",
+        "tags": [
+          "application"
+        ],
+        "summary": "updateApplication",
+        "operationId": "updateApplicationUsingPUT",
+        "consumes": [
+          "application/json"
+        ],
+        "produces": [
+          "*/*"
+        ],
+        "parameters": [
+          {
+            "in": "path",
+            "name": "appdescuri",
+            "description": "application description uri",
+            "required": true,
+            "type": "string"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "Status updated",
+            "schema": {
+              "$ref": "#/definitions/Application"
+            }
+          },
+          "401": {
+            "description": "Unauthorized"
+          },
+          "403": {
+            "description": "Forbidden"
+          },
+          "404": {
+            "description": "Not Found"
+          }
+        }
+      }
+    },
+    "/api/alert": {
+      "post": {
+        "description": "Creates an alert to be included in ADAPT monitoring",
+        "tags": [
+          "alert"
+        ],
+        "summary": "createAlert",
+        "operationId": "createAlertUsingPOST",
+        "consumes": [
+          "alert/json"
+        ],
+        "produces": [
+          "*/*"
+        ],
+        "parameters": [
+          {
+            "in": "body",
+            "name": "Alert",
+            "required": true,
+            "schema": {
+              "$ref": "#/definitions/Alert"
+            }
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "Alert Created",
+            "schema": {
+              "$ref": "#/definitions/Alert"
+            }
+          },
+          "401": {
+            "description": "Unauthorized"
+          }
+        }
+      }
+    }
+  },
+  "definitions": {
+    "Application": {
+      "type": "object",
+      "required": [
+        "appdescuri"
+      ],
+      "properties": {
+        "monid": {
+          "type": "string"
+        },
+        "appdescuri": {
+          "type": "string"
+        },
+        "status": {
+          "type": "string"
+        },
+        "user": {
+          "type": "string"
+        },
+        "password": {
+          "type": "string"
+        }
+      }
+    },
+    "Alert": {
+      "type": "object",
+      "required": [
+        "alid",
+        "altype",
+        "appdescuri"
+      ],
+      "properties": {
+        "alid": {
+          "type": "string"
+        },
+        "altype": {
+          "type": "string"
+        },
+        "appdescuri": {
+          "type": "string"
+        }
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/resources/telegraf.conf b/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/resources/telegraf.conf
new file mode 100644
index 0000000000000000000000000000000000000000..d33dde934e200835a5fa39c99fe32555b2247c77
--- /dev/null
+++ b/ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server/src/main/resources/telegraf.conf
@@ -0,0 +1,94 @@
+# Read metrics about cpu usage
+[[inputs.cpu]]
+  ## Whether to report per-cpu stats or not
+  percpu = true
+  ## Whether to report total system cpu stats or not
+  totalcpu = true
+  ## If true, collect raw CPU time metrics.
+  collect_cpu_time = false
+  ## If true, compute and report the sum of all non-idle CPU states.
+  report_active = false
+
+
+# Read metrics about disk usage by mount point
+[[inputs.disk]]
+  ## By default stats will be gathered for all mount points.
+  ## Set mount_points will restrict the stats to only the specified mount points.
+  # mount_points = ["/"]
+
+  ## Ignore mount points by filesystem type.
+  ignore_fs = ["tmpfs", "devtmpfs", "devfs", "overlay", "aufs", "squashfs"]
+
+
+# Read metrics about memory usage
+[[inputs.mem]]
+  # no configuration
+
+
+# # HTTP/HTTPS request given an address a method and a timeout
+# [[inputs.http_response]]
+#   ## Server address (default http://localhost)
+#   # address = "http://localhost"
+#
+#   ## Set http_proxy (telegraf uses the system wide proxy settings if it's is not set)
+#   # http_proxy = "http://localhost:8888"
+#
+#   ## Set response_timeout (default 5 seconds)
+#   # response_timeout = "5s"
+#
+#   ## HTTP Request Method
+#   # method = "GET"
+#
+#   ## Whether to follow redirects from the server (defaults to false)
+#   # follow_redirects = false
+#
+#   ## Optional HTTP Request Body
+#   # body = '''
+#   # {'fake':'data'}
+#   # '''
+#
+#   ## Optional substring or regex match in body of the response
+#   # response_string_match = "\"service_status\": \"up\""
+#   # response_string_match = "ok"
+#   # response_string_match = "\".*_status\".?:.?\"up\""
+#
+#   ## Optional TLS Config
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#   ## Use TLS but skip chain & host verification
+#   # insecure_skip_verify = false
+#
+#   ## HTTP Request Headers (all values must be strings)
+#   # [inputs.http_response.headers]
+#   #   Host = "github.com"
+
+
+# # Ping given url(s) and return statistics
+# [[inputs.ping]]
+#   ## List of urls to ping
+#   urls = ["example.org"]
+#
+#   ## Number of pings to send per collection (ping -c <COUNT>)
+#   # count = 1
+#
+#   ## Interval, in s, at which to ping. 0 == default (ping -i <PING_INTERVAL>)
+#   ## Not available in Windows.
+#   # ping_interval = 1.0
+#
+#   ## Per-ping timeout, in s. 0 == no timeout (ping -W <TIMEOUT>)
+#   # timeout = 1.0
+#
+#   ## Total-ping deadline, in s. 0 == no deadline (ping -w <DEADLINE>)
+#   # deadline = 10
+#
+#   ## Interface or source address to send ping from (ping -I <INTERFACE/SRC_ADDR>)
+#   ## on Darwin and Freebsd only source address possible: (ping -S <SRC_ADDR>)
+#   # interface = ""
+#
+#   ## Specify the ping executable binary, default is "ping"
+#   # binary = "ping"
+#
+#   ## Arguments for ping command
+#   ## when arguments is not empty, other options (ping_interval, timeout, etc) will be ignored
+#   # arguments = ["-c", "3"]
\ No newline at end of file
diff --git a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.grafana.server.src.dvp/src/main/docker/config/dashboards/MultiCloudApplicationavailability27112018.json b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.grafana.server.src.dvp/src/main/docker/config/dashboards/MultiCloudApplicationavailability.json
similarity index 100%
rename from ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.grafana.server.src.dvp/src/main/docker/config/dashboards/MultiCloudApplicationavailability27112018.json
rename to ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.grafana.server.src.dvp/src/main/docker/config/dashboards/MultiCloudApplicationavailability.json
diff --git a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.grafana.server.src.dvp/src/main/docker/config/dashboards/Performance metrics for multi-cloud application20180705.json b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.grafana.server.src.dvp/src/main/docker/config/dashboards/Performance metrics for multi-cloud application.json
similarity index 100%
rename from ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.grafana.server.src.dvp/src/main/docker/config/dashboards/Performance metrics for multi-cloud application20180705.json
rename to ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.grafana.server.src.dvp/src/main/docker/config/dashboards/Performance metrics for multi-cloud application.json
diff --git a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/.dockerignore b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/.dockerignore
new file mode 100644
index 0000000000000000000000000000000000000000..d3064226ba3aa9312002c53467a04ecccec42ef5
--- /dev/null
+++ b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/.dockerignore
@@ -0,0 +1,3 @@
+node_modules/
+node/
+bower_components/
\ No newline at end of file
diff --git a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/.gitignore b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..59a4e66eaea0a4fdb51672d97673ad79089ec530
--- /dev/null
+++ b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/.gitignore
@@ -0,0 +1 @@
+/sources
\ No newline at end of file
diff --git a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/Dockerfile b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/Dockerfile
index f47ab8f376d2425cb16b662ed40cc955cb1c9821..a96eaa1209026fc09af86c7035e49b3cf9191f46 100644
--- a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/Dockerfile
+++ b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/Dockerfile
@@ -1,22 +1,47 @@
-FROM maven:3.5.3-jdk-8 as builder
+FROM maven:3.5.4 as builder
 
-#COPY sources /sources
-#COPY sources-appmanager /sources-appmanager
-#COPY .m2 /root/.m2
-#
 ARG GIT_CREDENTIALS
-ARG APPMANAGER_VERSION=53dd49053bd12c83c27e1258a94de4d0ac2d7400
-ARG MCSLA_CORE_VERSION=5bf5d112d4e5c8b09e401cd757f123386b6db53d
-ARG  TELEGRAF_CONFIGPARSER_VERSION=159ab4b500263be55dfa719815a68c3a20edb2fa
+ARG ARTIFACTORY_USE
+ARG ARTIFACTORY_USER
+ARG ARTIFACTORY_PASSWORD
+ARG ARTIFACTORY_MAVEN_REPO
+ARG APP_MANAGER_GIT_REF=5fd5ecc9bd539c2f8f950cb3b54d5e1713c6c740
+ARG MCSLA_CORE_GIT_REF=2dc9c3019106e59cb537bdaaf294646c67671081
+ARG ACSMI_MONITORING_CLIENT_GIT_REF=26d8c807d6647e7429fa4a7b6aed47f8bfae23be
+ARG TELEGRAF_CONFIG_GIT_REF=26d8c807d6647e7429fa4a7b6aed47f8bfae23be
+ARG VIOLATION_HANDLER_GIT_REF=e04b482d870be50e8b74c0adf592f3f1b999a131
+ARG ADAPT_MONITORING_GIT_REF=e04b482d870be50e8b74c0adf592f3f1b999a131
 
+ARG VERSION
 
-COPY downloadsources.sh /downloadsources.sh
-COPY maveninstall.sh /maveninstall.sh
-RUN chmod +x /downloadsources.sh && \
-    sh ./downloadsources.sh && \
-    chmod +x /maveninstall.sh && \
-    sh ./maveninstall.sh 
+COPY . /
+
+RUN \
+	chmod 750 /*.sh && \
+	. /configartifactorymaven.sh && \
+	python /processSourcesJson.py && \
+	rm -rf /sources
+
+FROM jetty:9.3.24-alpine
+
+ENV USER_GIT=user
+ENV TOKEN_GIT=password
+
+COPY --from=builder /app.war /var/lib/jetty/webapps/ROOT.war
+COPY /installtelegrafalpine.sh /installtelegrafalpine.sh 
+COPY /docker-entrypoint.sh /docker-entrypoint.sh
+COPY /telegrafrestart.sh /telegrafrestart.sh
+
+USER root
+RUN chmod u+s /bin/ping && \
+    chmod 750 /*.sh && \
+    /installtelegrafalpine.sh && \
+    chown jetty:jetty /var/lib/jetty/webapps/ROOT.war && \
+	chown jetty:jetty /docker-entrypoint.sh && \
+	chown jetty:jetty /telegrafrestart.sh
+
+USER jetty
+
+COPY /etc/telegraf /etc/telegraf
+COPY /etc/decide /etc/decide
 
-WORKDIR /ADAPT/monitoring/eu.decideh2020.adapt.monitoring.server
-CMD ["mvn","jetty:run","-Dmaven.test.skip=true"]
-#cd target/*.war /ROOT.war
\ No newline at end of file
diff --git a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/config.sh b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/config.sh
new file mode 100644
index 0000000000000000000000000000000000000000..165fe3ec35541ad40ecf279c15b152acfc95432b
--- /dev/null
+++ b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/config.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+sourcespath=$1
+project=$2
+echo "sourcespath $sourcespath"
+echo "project $project"
+
+#no config needed
+#rm -rf ${xpref}
\ No newline at end of file
diff --git a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/configartifactorymaven.sh b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/configartifactorymaven.sh
new file mode 100644
index 0000000000000000000000000000000000000000..1fe2d19e9e517411406ad9d1d44766503a1bec7d
--- /dev/null
+++ b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/configartifactorymaven.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+if [ "$ARTIFACTORY_USE" != "Y" ]
+then
+  echo "Without Artifactory"
+else
+
+  echo "With Artifactory"
+  cp /settings.xml /usr/share/maven/conf/.
+  mkdir /root/.m2
+  cp /settings-security.xml /root/.m2/.
+  export MAVEN_USER="$ARTIFACTORY_USER"
+  export MASTER_PASSWORD="$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1)"
+  export MAVEN_MASTER_PASSWORD="$(mvn --encrypt-master-password $MASTER_PASSWORD)"
+
+  sed -i "s@\${.*}@$MAVEN_MASTER_PASSWORD@g" /root/.m2/settings-security.xml
+  export MAVEN_PASSWORD="$(mvn --encrypt-password $ARTIFACTORY_PASSWORD)"
+
+fi
+
+#rm -rf /root/.m2/repository/ #to test that it works
diff --git a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/docker-entrypoint.sh b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/docker-entrypoint.sh
new file mode 100644
index 0000000000000000000000000000000000000000..9084acfc3d2f516a6ec6684be7530f081671c4c7
--- /dev/null
+++ b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/docker-entrypoint.sh
@@ -0,0 +1,112 @@
+#!/bin/sh
+
+
+set -e
+
+/usr/bin/telegraf &
+
+if [ "$1" = jetty.sh ]; then
+	if ! command -v bash >/dev/null 2>&1 ; then
+		cat >&2 <<- 'EOWARN'
+			********************************************************************
+			ERROR: bash not found. Use of jetty.sh requires bash.
+			********************************************************************
+		EOWARN
+		exit 1
+	fi
+	cat >&2 <<- 'EOWARN'
+		********************************************************************
+		WARNING: Use of jetty.sh from this image is deprecated and may
+			 be removed at some point in the future.
+
+			 See the documentation for guidance on extending this image:
+			 https://github.com/docker-library/docs/tree/master/jetty
+		********************************************************************
+	EOWARN
+fi
+
+if ! command -v -- "$1" >/dev/null 2>&1 ; then
+	set -- java -jar "$JETTY_HOME/start.jar" "$@"
+fi
+
+: ${TMPDIR:=/tmp/jetty}
+[ -d "$TMPDIR" ] || mkdir -p $TMPDIR 2>/dev/null
+
+: ${JETTY_START:=$JETTY_BASE/jetty.start}
+
+case "$JAVA_OPTIONS" in
+	*-Djava.io.tmpdir=*) ;;
+	*) JAVA_OPTIONS="-Djava.io.tmpdir=$TMPDIR $JAVA_OPTIONS" ;;
+esac
+
+if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
+	# this is a command to run jetty
+
+	# check if it is a terminating command
+	for A in "$@" ; do
+		case $A in
+			--add-to-start* |\
+			--create-files |\
+			--create-startd |\
+			--download |\
+			--dry-run |\
+			--exec-print |\
+			--help |\
+			--info |\
+			--list-all-modules |\
+			--list-classpath |\
+			--list-config |\
+			--list-modules* |\
+			--stop |\
+			--update-ini |\
+			--version |\
+			-v )\
+			# It is a terminating command, so exec directly
+			exec "$@"
+		esac
+	done
+
+	if [ $(whoami) != "jetty" ]; then
+		cat >&2 <<- EOWARN
+			********************************************************************
+			WARNING: User is $(whoami)
+			         The user should be (re)set to 'jetty' in the Dockerfile
+			********************************************************************
+		EOWARN
+	fi
+
+	if [ -f $JETTY_START ] ; then
+		if [ $JETTY_BASE/start.d -nt $JETTY_START ] ; then
+			cat >&2 <<- EOWARN
+			********************************************************************
+			WARNING: The $JETTY_BASE/start.d directory has been modified since
+			         the $JETTY_START files was generated. Either delete 
+			         the $JETTY_START file or re-run 
+			             /generate-jetty.start.sh 
+			         from a Dockerfile
+			********************************************************************
+			EOWARN
+		fi
+		echo $(date +'%Y-%m-%d %H:%M:%S.000'):INFO:docker-entrypoint:jetty start from $JETTY_START
+		set -- $(cat $JETTY_START)
+	else
+		# Do a jetty dry run to set the final command
+		"$@" --dry-run > $JETTY_START
+		if [ $(egrep -v '\\$' $JETTY_START | wc -l ) -gt 1 ] ; then
+			# command was more than a dry-run
+			cat $JETTY_START \
+			| awk '/\\$/ { printf "%s", substr($0, 1, length($0)-1); next } 1' \
+			| egrep -v '[^ ]*java .* org\.eclipse\.jetty\.xml\.XmlConfiguration '
+			exit
+		fi
+		set -- $(sed 's/\\$//' $JETTY_START)
+	fi
+fi
+
+if [ "${1##*/}" = java -a -n "$JAVA_OPTIONS" ] ; then
+	java="$1"
+	shift
+	set -- "$java" $JAVA_OPTIONS "$@"
+fi
+
+exec "$@"
diff --git a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/downloadsources.sh b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/downloadsources.sh
deleted file mode 100644
index 8789488c2834685f5269520957441fad9db67aa0..0000000000000000000000000000000000000000
--- a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/downloadsources.sh
+++ /dev/null
@@ -1,16 +0,0 @@
-cd /
-git clone https://$GIT_CREDENTIALS@git.code.tecnalia.com/DECIDE_Public/DECIDE_Components.git AppController 
-cd /AppController
-git checkout $APPMANAGER_VERSION
-cd /
-git clone https://$GIT_CREDENTIALS@git.code.tecnalia.com/DECIDE_Public/DECIDE_Components.git mcsla-core
-cd /mcsla-core
-git checkout $MCSLA_CORE_VERSION
-cd /
-git clone https://$GIT_CREDENTIALS@git.code.tecnalia.com/DECIDE_Public/DECIDE_Components.git WP5
-cd /WP5
-git checkout $TELEGRAF_CONFIGPARSER_VERSION
-cd /
-git clone https://$GIT_CREDENTIALS@git.code.tecnalia.com/DECIDE_Public/DECIDE_Components.git WP4
-cd /WP4
-git checkout $WP4_VERSION
diff --git a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/etc/decide/adaptmon.properties b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/etc/decide/adaptmon.properties
new file mode 100644
index 0000000000000000000000000000000000000000..d5766d934897f2d48de16acffa077fbd133f9df7
--- /dev/null
+++ b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/etc/decide/adaptmon.properties
@@ -0,0 +1,26 @@
+#-----------------------------
+# Adapt Monitoring Config file
+# Properties file location in Linux: "/etc/decide/adaptmon.properties" (F_PROPERTIES_LINUX) 
+#-----------------------------
+
+# Appdescription in GIT (for local tests only / integration tests)
+adaptMonitoring.appDescriptionGitPath=https://git.code.tecnalia.com/decide/adapt-do-demo.git
+adaptMonitoring.descriptorname = AdaptMM/DECIDE.json
+#adaptMonitoring.appDescriptionGitPath=https://git.code.tecnalia.com/decide/SockShop_AppDescription.git
+#adaptMonitoring.descriptorname = DECIDE.json
+
+#AcsmiMonitoring endpoint (NOT DEPLOYED YET!!)
+#adaptMonitoring.AcsmiMEndPoint = http://acsmi.monitoring.management:8080/monitoringmanager/api/resourcemonitoring
+adaptMonitoring.AcsmiMEndPoint = http://localhost:14080/monitoringmanager/api/resourcemonitoring
+
+# InfluxDB url (local/integration tests)
+adaptMonitoring.InfluxdbURL = ["http://adapt.influxdb:8086"]
+
+# Grafana server in: (a)Integration env. -AIMES- (for local tests) // (b) Local Docker
+#adaptMonitoring.grafanaHost = "http://85.91.40.245:8093"
+adaptMonitoring.grafanaHost = http://adapt.monitoring.grafana:3000
+
+# urlsMonitoring for GRAFANA (for test only)
+adaptMonitoring.urlsMonitoring1 = http://85.91.40.245:8093/d/HbAMQcWik/performance-metrics-for-multi-cloud-application
+adaptMonitoring.urlsMonitoring2 = http://85.91.40.245:8093/d/RV8r6X-mz/multi-cloud-application-availability
+
diff --git a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/etc/telegraf/telegraf.conf b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/etc/telegraf/telegraf.conf
new file mode 100644
index 0000000000000000000000000000000000000000..0cefb437a8898e36335a31b289dc9564d1206025
--- /dev/null
+++ b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/etc/telegraf/telegraf.conf
@@ -0,0 +1,161 @@
+# # Configuration for sending metrics to InfluxDB
+# [[outputs.influxdb]]
+#   ## The full HTTP or UDP URL for your InfluxDB instance.
+#   ##
+#   ## Multiple URLs can be specified for a single cluster, only ONE of the
+#   ## urls will be written to each interval.
+#   urls = ["http://adapt.influxdb:8086"] # required
+# 
+#   ## The target database for metrics; will be created as needed.
+#   ## For UDP url endpoint database needs to be configured on server side.
+#   database = "decideh2020adapt" # required
+# 
+#   ## The value of this tag will be used to determine the database. If this
+#   ## tag is not set the 'database' option is used as the default.
+#   # database_tag = ""
+# 
+#   ## If true, no CREATE DATABASE queries will be sent.  Set to true when using
+#   ## Telegraf with a user without permissions to create databases or when the
+#   ## database already exists.
+#   # skip_database_creation = false
+# 
+#   ## Name of existing retention policy to write to.  Empty string writes to
+#   ## the default retention policy.  Only takes effect when using HTTP.
+#   retention_policy = ""
+# 
+#   ## Write consistency (clusters only), can be: "any", "one", "quorum", "all".
+#   ## Only takes effect when using HTTP.
+#   write_consistency = "any"
+# 
+#   ## Timeout for HTTP messages.
+#   timeout = "5s"
+# 
+#   ## HTTP Basic Auth
+#   # username = "telegraf"
+#   # password = "metricsmetricsmetricsmetrics"
+# 
+#   ## HTTP User-Agent
+#   # user_agent = "telegraf"
+# 
+#   ## UDP payload size is the maximum packet size to send.
+#   # udp_payload = "512B"
+# 
+#   ## Optional TLS Config for use on HTTP connections.
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#   ## Use TLS but skip chain & host verification
+#   # insecure_skip_verify = false
+# 
+#   ## HTTP Proxy override, if unset values the standard proxy environment
+#   ## variables are consulted to determine which proxy, if any, should be used.
+#   # http_proxy = "http://corporate.proxy:3128"
+# 
+#   ## Additional HTTP headers
+#   # http_headers = {"X-Special-Header" = "Special-Value"}
+# 
+#   ## HTTP Content-Encoding for write request body, can be set to "gzip" to
+#   ## compress body or "identity" to apply no encoding.
+#   # content_encoding = "identity"
+# 
+#   ## When true, Telegraf will output unsigned integers as unsigned values,
+#   ## i.e.: "42u".  You will need a version of InfluxDB supporting unsigned
+#   ## integer values.  Enabling this option will result in field type errors if
+#   ## existing data has been written.
+#   # influx_uint_support = false
+
+
+# # Read metrics about cpu usage
+# [[inputs.cpu]]
+#   ## Whether to report per-cpu stats or not
+#   # percpu = true
+#   ## Whether to report total system cpu stats or not
+#   # totalcpu = true
+#   ## If true, collect raw CPU time metrics.
+#   # collect_cpu_time = false
+#   ## If true, compute and report the sum of all non-idle CPU states.
+#   # report_active = false
+
+
+# Read metrics about disk usage by mount point
+# [[inputs.disk]]
+#   ## By default stats will be gathered for all mount points.
+#   ## Set mount_points will restrict the stats to only the specified mount points.
+#   # mount_points = ["/"]
+# 
+#   ## Ignore mount points by filesystem type.
+#   # ignore_fs = ["tmpfs", "devtmpfs", "devfs", "overlay", "aufs", "squashfs"]
+
+
+# Read metrics about memory usage
+# [[inputs.mem]]
+#   # no configuration
+
+
+# # HTTP/HTTPS request given an address a method and a timeout
+# [[inputs.http_response]]
+#   ## Server address (default http://localhost)
+#   address = "http://localhost"
+#
+#   ## Set http_proxy (telegraf uses the system wide proxy settings if it's is not set)
+#   # http_proxy = "http://localhost:8888"
+#
+#   ## Set response_timeout (default 5 seconds)
+#   response_timeout = "5s"
+#
+#   ## HTTP Request Method
+#   method = "GET"
+#
+#   ## Whether to follow redirects from the server (defaults to false)
+#   follow_redirects = false
+#
+#   ## Optional HTTP Request Body
+#   # body = '''
+#   # {'fake':'data'}
+#   # '''
+#
+#   ## Optional substring or regex match in body of the response
+#   # response_string_match = "\"service_status\": \"up\""
+#   # response_string_match = "ok"
+#   # response_string_match = "\".*_status\".?:.?\"up\""
+#
+#   ## Optional TLS Config
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#   ## Use TLS but skip chain & host verification
+#   # insecure_skip_verify = false
+#
+#   ## HTTP Request Headers (all values must be strings)
+#   # [inputs.http_response.headers]
+#   #   Host = "github.com"
+
+
+# # Ping given url(s) and return statistics
+# [[inputs.ping]]
+#   ## List of urls to ping
+#   # urls = ["example.org"]
+#
+#   ## Number of pings to send per collection (ping -c <COUNT>)
+#   # count = 1
+#
+#   ## Interval, in s, at which to ping. 0 == default (ping -i <PING_INTERVAL>)
+#   ## Not available in Windows.
+#   # ping_interval = 1.0
+#
+#   ## Per-ping timeout, in s. 0 == no timeout (ping -W <TIMEOUT>)
+#   # timeout = 1.0
+#
+#   ## Total-ping deadline, in s. 0 == no deadline (ping -w <DEADLINE>)
+#   # deadline = 10
+#
+#   ## Interface or source address to send ping from (ping -I <INTERFACE/SRC_ADDR>)
+#   ## on Darwin and Freebsd only source address possible: (ping -S <SRC_ADDR>)
+#   # interface = ""
+#
+#   ## Specify the ping executable binary, default is "ping"
+#   # binary = "ping"
+#
+#   ## Arguments for ping command
+#   ## when arguments is not empty, other options (ping_interval, timeout, etc) will be ignored
+#   # arguments = ["-c", "3"]
\ No newline at end of file
diff --git a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/installtelegrafalpine.sh b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/installtelegrafalpine.sh
new file mode 100644
index 0000000000000000000000000000000000000000..beacb56a94903e6a1cd4c077c2cabb3d61117086
--- /dev/null
+++ b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/installtelegrafalpine.sh
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+#https://github.com/Docker-example/alpine-telegraf/blob/master/Dockerfile
+TIMEZONE=Europe/Paris
+TELEGRAF_VERSION=1.10.0
+
+# Work path
+mkdir -p /sources > /dev/null 2>&1 || true
+
+# Downloading Telegraf
+wget https://dl.influxdata.com/telegraf/releases/telegraf-${TELEGRAF_VERSION}-static_linux_amd64.tar.gz -P /sources > /dev/null 2>&1 || true
+
+# Installing packages
+tar -C /sources -xzf /sources/telegraf-${TELEGRAF_VERSION}-static_linux_amd64.tar.gz > /dev/null 2>&1 || true
+chmod +x /sources/telegraf/*  > /dev/null 2>&1 || true
+cp /sources/telegraf/telegraf /usr/bin/  > /dev/null 2>&1 || true
+mkdir /etc/telegraf  > /dev/null 2>&1 || true
+cp /sources/telegraf/telegraf.conf /etc/telegraf/  > /dev/null 2>&1 || true
+rm -rf /sources
diff --git a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/maveninstall.sh b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/maveninstall.sh
deleted file mode 100644
index 66f4b7b3df72c79fe536ad450ce7d09450c7eb17..0000000000000000000000000000000000000000
--- a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/maveninstall.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-cd /AppController
-mvn install -Dmaven.test.skip=true
-cd /mcsla-core
-mvn install -Dmaven.test.skip=true
-cd /WP5/Telegraf_ConfigParser
-mvn install -Dmaven.test.skip=true
-cd /WP4/Adapt_monitoring/eu.decideh2020.adapt.monitoring.server
-mvn install -Dmaven.test.skip=true
diff --git a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/moveappwar.sh b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/moveappwar.sh
new file mode 100644
index 0000000000000000000000000000000000000000..07ef1909223c63502219db61c47130b3e7ddfc75
--- /dev/null
+++ b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/moveappwar.sh
@@ -0,0 +1,6 @@
+#!/bin/bash
+sourcespath=$1
+project=$2
+echo "sourcespath $sourcespath"
+echo "project $project"
+cp $sourcespath/$project/target/*.war /app.war || true
diff --git a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/processSource.sh b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/processSource.sh
new file mode 100644
index 0000000000000000000000000000000000000000..433cea8f24c7f9d95a91514de85b3e2bd93a71fa
--- /dev/null
+++ b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/processSource.sh
@@ -0,0 +1,50 @@
+#!/bin/bash -e
+
+if [ $# -lt 5 ]; then
+    echo "Arguments required: dockerRepoUrl projectPath gitRef mavenParams"
+fi
+
+dockerRepoUrl=$1
+projectPath=$2
+gitRef=$3
+gitCredentials=$4
+mavenParams=$5
+repofix=$dockerRepoUrl
+
+[ -d /sources ] || mkdir -p /sources
+
+#phase 1 clone repo if necesary
+repo_dir=`echo $dockerRepoUrl | sed 's%^.*/\([^/]*\)\.git$%\1%g'`
+echo "Git repository: $dockerRepoUrl"
+echo "repository dir: $repo_dir"
+if [ "$VERSION" != "local" ] && [ ! -d /sources/$repo_dir/.git ]; then
+	echo "Enter to clone repo..."
+	rm -rf /sources/$repo_dir/* > /dev/null 2>&1 || true
+	if [[ ! -z "$gitCredentials" ]]; then
+		repofix=${repofix/https:\/\//https:\/\/$gitCredentials@}
+	fi
+	git clone "$repofix" /sources/$repo_dir
+	echo "repository cloned"
+else
+	echo "repository found in local folder: $repo_dir"
+fi
+
+#phase 2 checkout right version
+if [ "$VERSION" != "local" ] && [ ! -z "$gitRef" ]; then
+	echo "checking out: $gitRef"
+	git -C /sources/$repo_dir checkout $gitRef --force
+fi
+
+#phase 3 config 
+/config.sh /sources/$repo_dir $projectPath
+
+#phase 4 mvn 
+#NOTE jhipster bower instalation requires a file /root/.bowerrc to be run as root
+if [[ ! -z "$mavenParams" ]]; then
+	echo "maven execution: -f sources/$repo_dir/$projectPath/pom.xml  $mavenParams"
+	mvn  -f /sources/$repo_dir/$projectPath/pom.xml $mavenParams || true
+	#because jhister
+fi
+
+#phase 5 move app war 
+/moveappwar.sh /sources/$repo_dir $projectPath
diff --git a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/processSourcesJson.py b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/processSourcesJson.py
new file mode 100644
index 0000000000000000000000000000000000000000..674930941ff948eaf85a0ec23dec4d79686f6f3c
--- /dev/null
+++ b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/processSourcesJson.py
@@ -0,0 +1,9 @@
+import json
+import subprocess
+import os
+
+with open('/sources.json', 'r') as handle:
+    parsed = json.load(handle)
+    for source in parsed['sources']:
+        subprocess.check_call(['/processSource.sh',source['source']['repo'],source['source']['path'],os.getenv(source['source']['git_ref'],''),os.getenv(source['source']['git_credentials'],''),source['source']['maven']])
+
diff --git a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/root/.m2/settings-security.xml b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/root/.m2/settings-security.xml
new file mode 100644
index 0000000000000000000000000000000000000000..663d9c91ac87740dfecdba5f1da1c113d9379c6f
--- /dev/null
+++ b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/root/.m2/settings-security.xml
@@ -0,0 +1,3 @@
+<settingsSecurity>
+<master>${env.MAVEN_MASTER_PASSWORD}</master>
+</settingsSecurity>
\ No newline at end of file
diff --git a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/settings-security.xml b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/settings-security.xml
new file mode 100644
index 0000000000000000000000000000000000000000..663d9c91ac87740dfecdba5f1da1c113d9379c6f
--- /dev/null
+++ b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/settings-security.xml
@@ -0,0 +1,3 @@
+<settingsSecurity>
+<master>${env.MAVEN_MASTER_PASSWORD}</master>
+</settingsSecurity>
\ No newline at end of file
diff --git a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/settings.xml b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/settings.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0a4df6f659d664ce3eb0e4c6cfdfb8c5ccef3ee7
--- /dev/null
+++ b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/settings.xml
@@ -0,0 +1,306 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+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.
+-->
+
+<!--
+ | This is the configuration file for Maven. It can be specified at two levels:
+ |
+ |  1. User Level. This settings.xml file provides configuration for a single user,
+ |                 and is normally provided in ${user.home}/.m2/settings.xml.
+ |
+ |                 NOTE: This location can be overridden with the CLI option:
+ |
+ |                 -s /path/to/user/settings.xml
+ |
+ |  2. Global Level. This settings.xml file provides configuration for all Maven
+ |                 users on a machine (assuming they're all using the same Maven
+ |                 installation). It's normally provided in
+ |                 ${maven.conf}/settings.xml.
+ |
+ |                 NOTE: This location can be overridden with the CLI option:
+ |
+ |                 -gs /path/to/global/settings.xml
+ |
+ | The sections in this sample file are intended to give you a running start at
+ | getting the most out of your Maven installation. Where appropriate, the default
+ | values (values used when the setting is not specified) are provided.
+ |
+ |-->
+<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
+          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
+  <!-- localRepository
+   | The path to the local repository maven will use to store artifacts.
+   |
+   | Default: ${user.home}/.m2/repository
+  <localRepository>/path/to/local/repo</localRepository>
+  -->
+
+  <!-- interactiveMode
+   | This will determine whether maven prompts you when it needs input. If set to false,
+   | maven will use a sensible default value, perhaps based on some other setting, for
+   | the parameter in question.
+   |
+   | Default: true
+  <interactiveMode>true</interactiveMode>
+  -->
+
+  <!-- offline
+   | Determines whether maven should attempt to connect to the network when executing a build.
+   | This will have an effect on artifact downloads, artifact deployment, and others.
+   |
+   | Default: false
+  <offline>false</offline>
+  -->
+
+  <!-- pluginGroups
+   | This is a list of additional group identifiers that will be searched when resolving plugins by their prefix, i.e.
+   | when invoking a command line like "mvn prefix:goal". Maven will automatically add the group identifiers
+   | "org.apache.maven.plugins" and "org.codehaus.mojo" if these are not already contained in the list.
+   |-->
+  <pluginGroups>
+    <!-- pluginGroup
+     | Specifies a further group identifier to use for plugin lookup.
+    <pluginGroup>com.your.plugins</pluginGroup>
+    -->
+  </pluginGroups>
+
+  <!-- proxies
+   | This is a list of proxies which can be used on this machine to connect to the network.
+   | Unless otherwise specified (by system property or command-line switch), the first proxy
+   | specification in this list marked as active will be used.
+   |-->
+  <proxies>
+    <!-- proxy
+     | Specification for one proxy, to be used in connecting to the network.
+     |
+    <proxy>
+      <id>optional</id>
+      <active>true</active>
+      <protocol>http</protocol>
+      <username>proxyuser</username>
+      <password>proxypass</password>
+      <host>proxy.host.net</host>
+      <port>80</port>
+      <nonProxyHosts>local.net|some.host.com</nonProxyHosts>
+    </proxy>
+    -->
+  </proxies>
+
+  <!-- servers
+   | This is a list of authentication profiles, keyed by the server-id used within the system.
+   | Authentication profiles can be used whenever maven must make a connection to a remote server.
+   |-->
+  <servers>
+    <server>
+      <username>${env.MAVEN_USER}</username>
+      <password>${env.MAVEN_PASSWORD}</password>
+      <id>central</id>
+    </server>
+    <server>
+      <username>${env.MAVEN_USER}</username>
+      <password>${env.MAVEN_PASSWORD}</password>
+      <id>snapshots</id>
+    </server>
+  
+    <!-- server
+     | Specifies the authentication information to use when connecting to a particular server, identified by
+     | a unique name within the system (referred to by the 'id' attribute below).
+     |
+     | NOTE: You should either specify username/password OR privateKey/passphrase, since these pairings are
+     |       used together.
+     |
+    <server>
+      <id>deploymentRepo</id>
+      <username>repouser</username>
+      <password>repopwd</password>
+    </server>
+    -->
+
+    <!-- Another sample, using keys to authenticate.
+    <server>
+      <id>siteServer</id>
+      <privateKey>/path/to/private/key</privateKey>
+      <passphrase>optional; leave empty if not used.</passphrase>
+    </server>
+    -->
+  </servers>
+
+  <!-- mirrors
+   | This is a list of mirrors to be used in downloading artifacts from remote repositories.
+   |
+   | It works like this: a POM may declare a repository to use in resolving certain artifacts.
+   | However, this repository may have problems with heavy traffic at times, so people have mirrored
+   | it to several places.
+   |
+   | That repository definition will have a unique id, so we can create a mirror reference for that
+   | repository, to be used as an alternate download site. The mirror site will be the preferred
+   | server for that repository.
+   |-->
+  <mirrors>
+    <!-- mirror
+     | Specifies a repository mirror site to use instead of a given repository. The repository that
+     | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
+     | for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
+     |
+    <mirror>
+      <id>mirrorId</id>
+      <mirrorOf>repositoryId</mirrorOf>
+      <name>Human Readable Name for this Mirror.</name>
+      <url>http://my.repository.com/repo/path</url>
+    </mirror>
+     -->
+  </mirrors>
+
+  <!-- profiles
+   | This is a list of profiles which can be activated in a variety of ways, and which can modify
+   | the build process. Profiles provided in the settings.xml are intended to provide local machine-
+   | specific paths and repository locations which allow the build to work in the local environment.
+   |
+   | For example, if you have an integration testing plugin - like cactus - that needs to know where
+   | your Tomcat instance is installed, you can provide a variable here such that the variable is
+   | dereferenced during the build process to configure the cactus plugin.
+   |
+   | As noted above, profiles can be activated in a variety of ways. One way - the activeProfiles
+   | section of this document (settings.xml) - will be discussed later. Another way essentially
+   | relies on the detection of a system property, either matching a particular value for the property,
+   | or merely testing its existence. Profiles can also be activated by JDK version prefix, where a
+   | value of '1.4' might activate a profile when the build is executed on a JDK version of '1.4.2_07'.
+   | Finally, the list of active profiles can be specified directly from the command line.
+   |
+   | NOTE: For profiles defined in the settings.xml, you are restricted to specifying only artifact
+   |       repositories, plugin repositories, and free-form properties to be used as configuration
+   |       variables for plugins in the POM.
+   |
+   |-->
+  <profiles>
+    <profile>
+      <repositories>
+        <repository>
+          <snapshots>
+            <enabled>false</enabled>
+          </snapshots>
+          <id>central</id>
+          <name>${env.ARTIFACTORY_MAVEN_REPO}</name>
+          <url>https://artifact.tecnalia.com:443/${env.ARTIFACTORY_MAVEN_REPO}</url>
+        </repository>
+        <repository>
+          <snapshots />
+          <id>snapshots</id>
+          <name>${env.ARTIFACTORY_MAVEN_REPO}</name>
+          <url>https://artifact.tecnalia.com:443/${env.ARTIFACTORY_MAVEN_REPO}</url>
+        </repository>
+      </repositories>
+      <pluginRepositories>
+        <pluginRepository>
+          <snapshots>
+            <enabled>false</enabled>
+          </snapshots>
+          <id>central</id>
+          <name>${env.ARTIFACTORY_MAVEN_REPO}</name>
+          <url>https://artifact.tecnalia.com:443/${env.ARTIFACTORY_MAVEN_REPO}</url>
+        </pluginRepository>
+        <pluginRepository>
+          <snapshots />
+          <id>snapshots</id>
+          <name>${env.ARTIFACTORY_MAVEN_REPO}</name>
+          <url>https://artifact.tecnalia.com:443/${env.ARTIFACTORY_MAVEN_REPO}</url>
+        </pluginRepository>
+      </pluginRepositories>
+      <id>artifactory</id>
+    </profile>
+    <!-- profile
+     | Specifies a set of introductions to the build process, to be activated using one or more of the
+     | mechanisms described above. For inheritance purposes, and to activate profiles via <activatedProfiles/>
+     | or the command line, profiles have to have an ID that is unique.
+     |
+     | An encouraged best practice for profile identification is to use a consistent naming convention
+     | for profiles, such as 'env-dev', 'env-test', 'env-production', 'user-jdcasey', 'user-brett', etc.
+     | This will make it more intuitive to understand what the set of introduced profiles is attempting
+     | to accomplish, particularly when you only have a list of profile id's for debug.
+     |
+     | This profile example uses the JDK version to trigger activation, and provides a JDK-specific repo.
+    <profile>
+      <id>jdk-1.4</id>
+
+      <activation>
+        <jdk>1.4</jdk>
+      </activation>
+
+      <repositories>
+        <repository>
+          <id>jdk14</id>
+          <name>Repository for JDK 1.4 builds</name>
+          <url>http://www.myhost.com/maven/jdk14</url>
+          <layout>default</layout>
+          <snapshotPolicy>always</snapshotPolicy>
+        </repository>
+      </repositories>
+    </profile>
+    -->
+
+    <!--
+     | Here is another profile, activated by the system property 'target-env' with a value of 'dev',
+     | which provides a specific path to the Tomcat instance. To use this, your plugin configuration
+     | might hypothetically look like:
+     |
+     | ...
+     | <plugin>
+     |   <groupId>org.myco.myplugins</groupId>
+     |   <artifactId>myplugin</artifactId>
+     |
+     |   <configuration>
+     |     <tomcatLocation>${tomcatPath}</tomcatLocation>
+     |   </configuration>
+     | </plugin>
+     | ...
+     |
+     | NOTE: If you just wanted to inject this configuration whenever someone set 'target-env' to
+     |       anything, you could just leave off the <value/> inside the activation-property.
+     |
+    <profile>
+      <id>env-dev</id>
+
+      <activation>
+        <property>
+          <name>target-env</name>
+          <value>dev</value>
+        </property>
+      </activation>
+
+      <properties>
+        <tomcatPath>/path/to/tomcat/instance</tomcatPath>
+      </properties>
+    </profile>
+    -->
+  </profiles>
+
+  <activeProfiles>
+    <activeProfile>artifactory</activeProfile>
+  </activeProfiles>
+  <!-- activeProfiles
+   | List of profiles that are active for all builds.
+   |
+  <activeProfiles>
+    <activeProfile>alwaysActiveProfile</activeProfile>
+    <activeProfile>anotherAlwaysActiveProfile</activeProfile>
+  </activeProfiles>
+  -->
+</settings>
diff --git a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/sources.json b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/sources.json
new file mode 100644
index 0000000000000000000000000000000000000000..94e621b6325b349500b7648ed09f1a6c287a2dd0
--- /dev/null
+++ b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/sources.json
@@ -0,0 +1,58 @@
+{
+	"sources": [
+		{
+			"source": {
+				"repo": "https://git.code.tecnalia.com/DECIDE_Public/DECIDE_Components.git",
+				"path": "AppController",
+				"git_ref": "APP_MANAGER_GIT_REF",
+				"git_credentials": "GIT_CREDENTIALS",
+				"maven": "install -Dmaven.test.skip=true -DskipTests"
+			}
+		},
+		{
+			"source": {
+				"repo": "https://git.code.tecnalia.com/DECIDE_Public/DECIDE_Components.git",
+				"path": "MCSLA/mcsla_core",
+				"git_ref": "MCSLA_CORE_GIT_REF",
+				"git_credentials": "GIT_CREDENTIALS",
+				"maven": "install -Dmaven.test.skip=true -DskipTests"
+			}
+		},
+		{
+			"source": {
+				"repo": "https://git.code.tecnalia.com/DECIDE_Public/DECIDE_Components.git",
+				"path": "ACSmI/Monitoring/eu.decideh2020.acsmi.monitoring.client",
+				"git_ref": "ACSMI_MONITORING_CLIENT_GIT_REF",
+				"git_credentials": "GIT_CREDENTIALS",
+				"maven": "install -Dmaven.test.skip=true -DskipTests"
+			}
+		},
+		{
+			"source": {
+				"repo": "https://git.code.tecnalia.com/DECIDE_Public/DECIDE_Components.git",
+				"path": "ACSmI/Telegraf_ConfigParser",
+				"git_ref": "TELEGRAF_CONFIG_GIT_REF",
+				"git_credentials": "GIT_CREDENTIALS",
+				"maven": "install -Dmaven.test.skip=true -DskipTests"
+			}
+		},
+		{
+			"source": {
+				"repo": "https://git.code.tecnalia.com/DECIDE_Public/DECIDE_Components.git",
+				"path": "ADAPT/Monitoring/eu.decideh2020.violationhandler.client",
+				"git_ref": "VIOLATION_HANDLER_GIT_REF",
+				"git_credentials": "GIT_CREDENTIALS",
+				"maven": "install -Dmaven.test.skip=true -DskipTests"
+			}
+		},
+		{
+			"source": {
+				"repo": "https://git.code.tecnalia.com/DECIDE_Public/DECIDE_Components.git",
+				"path": "ADAPT/Monitoring/eu.decideh2020.adapt.monitoring.server",
+				"git_ref": "ADAPT_MONITORING_GIT_REF",
+				"git_credentials": "GIT_CREDENTIALS",
+				"maven": "package war:war -Dmaven.test.skip=true -DskipTests"
+			}
+		}
+	]
+} 
\ No newline at end of file
diff --git a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/telegrafrestart.sh b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/telegrafrestart.sh
new file mode 100644
index 0000000000000000000000000000000000000000..39ae68d61ccd4ee14105ad334874a6dea7739d63
--- /dev/null
+++ b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker/telegrafrestart.sh
@@ -0,0 +1,5 @@
+
+#!/bin/sh
+pkill -f "/usr/bin/telegraf"
+/usr/bin/telegraf
+echo echo "...and Telegraf was restarted"
\ No newline at end of file
diff --git a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.telegraf.server.src.dvp/.gitignore b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.telegraf.server.src.dvp/.gitignore
deleted file mode 100644
index edefd5d6e371cebf1edec9d266ba9f9dc22dbab0..0000000000000000000000000000000000000000
--- a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.telegraf.server.src.dvp/.gitignore
+++ /dev/null
@@ -1,12 +0,0 @@
-**/bin/
-**/sources/
-**/target/
-**/generated/
-**/.classpath
-**/.settings/
-**/node_modules/
-**/*.log
-**/.vagrant/
-**/output-virtualbox-iso/
-**/packer_cache/
-**/*.box
\ No newline at end of file
diff --git a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.telegraf.server.src.dvp/.project b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.telegraf.server.src.dvp/.project
deleted file mode 100644
index e7eb32cb508ebecc727f2d55c2c07a35689581ad..0000000000000000000000000000000000000000
--- a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.telegraf.server.src.dvp/.project
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>eu.decideh2020.int.adapt.monitoring.grafana.server.src.dvp</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.m2e.core.maven2Builder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.eclipse.m2e.core.maven2Nature</nature>
-	</natures>
-</projectDescription>
diff --git a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.telegraf.server.src.dvp/AdaptMonitoringLicense.txt b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.telegraf.server.src.dvp/AdaptMonitoringLicense.txt
deleted file mode 100644
index 1989cbbc9fc2c8eadf080ac3d700f7eac3be2cce..0000000000000000000000000000000000000000
--- a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.telegraf.server.src.dvp/AdaptMonitoringLicense.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-/****************************************************************
-*Copyright (c) 2017 Tecnalia.
-*Licensed under MIT License (the "License");
-*Permission is hereby granted, free of charge, to any person obtaining a copy 
-of this software and associated documentation files (the "Software"), to deal 
-in the Software without restriction, including without limitation the rights 
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
-copies of the Software, and to permit persons to whom the Software is furnished 
-to do so, subject to the following conditions:
-*The above copyright notice and this permission notice shall be included in all 
-copies or substantial portions of the Software.
-*
-*
-*THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 
-INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 
-PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 
-HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 
-CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 
-OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-*Contributors (in alphabetical order):
-*Gorka Benguria                                 Tecnalia
-*I�aki Etxaniz                                  Tecnalia
-*Juncal Alonso                                  Tecnalia
-*Leire Orue-Echevarria                          Tecnalia
-*Maria Jose Lopez                               Tecnalia
-*Marisa Escalante                               Tecnalia
-*
-*Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
-*****************************************************************************/
diff --git a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.telegraf.server.src.dvp/JenkinsfileDockerBuild b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.telegraf.server.src.dvp/JenkinsfileDockerBuild
deleted file mode 100644
index 515875437203a2e910c7e0575a606b96f802251e..0000000000000000000000000000000000000000
--- a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.telegraf.server.src.dvp/JenkinsfileDockerBuild
+++ /dev/null
@@ -1,407 +0,0 @@
-#!groovy
-//http://groovy-lang.org/semantics.html
-
-node {	
-	//Required constants
-    currentBuild.result = "SUCCESS"
-	//Provided vars
-	def devopsSourcesRelativePath = 'Adapt_monitoring/eu.decideh2020.int.adapt.monitoring.grafana.server.src.dvp'
-	def devopsSourcesRepo = 'https://git.code.tecnalia.com/decide/WP4.git'
-	def sourcesRelativePath=null
-	def sourcesRepo=null
-	def dependingTasks=[
-	"",
-	""
-	]
-	//Params defaults
-	Boolean currentVerbose=false
-	Boolean hasCredentials=false
-	Boolean currentContinueTasks=true
-	Boolean currentForceBuild=false
-	Boolean currentStopContainer=true
-	Boolean currentForceClear=false
-	Boolean currentClearOnFail=false
-	Boolean currentForcePush=false
-				
-	try	{	
-		Boolean hasSources = (sourcesRelativePath!=null)&&(sourcesRepo!=null)
-		
-		//Computed vars
-		def devopsSourcesPath
-		def devopsSourcesGitRepoPath
-		def devopsSourcesGitPath
-		def sourcesPath
-		def sourcesGitRepoPath
-		def sourcesGitPath
-		def workspace
-		def jenkinsWorkspace
-		
-		Boolean hasEmptyWorkspace=false
-		String workspaceContent=""
-
-		Boolean hasNewDevopsSources=false
-		Boolean hasNewSources=false
-		Boolean requiresBuild=false
-		Boolean requiresPackage=false
-
-		Boolean hasDevopsPomPackaging=false
-		String devopsPomPackaging=""
-		Boolean hasPomPackaging=false
-		String pomPackaging=""
-		Boolean hasPomFile=false
-		String pomFile=""
-				
-		String devopsSourcesLastCommitFile
-        String devopsSourcesLastChangedCommitFile
-		String sourcesLastCommitFile
-        String sourcesLastChangedCommitFile
-
-		String devopsSourcesLastCommit
-        String devopsSourcesLastChangedCommit
-		String devopsSourcesCurrentCommit
-		String sourcesLastCommit
-        String sourcesLastChangedCommit
-		String sourcesCurrentCommit
-		
-		String devopsSourcesDiffPreviousCommit
-		String sourcesLastDiffPreviousCommit
-		
-		String devopsImageLastSha256File
-		String devopsImageBuildResult
-		String devopsImageLastSha256=""
-		String devopsImageCurrentSha256=""
-
-		String mvnHome;
-		
-		stage ('Params Processing'){
-			//def verbose -> defaults to "false"
-			//def scmCredentials -> defaults to undefined
-			//def continueTasks -> defaults to "true"
-			//def ForceBuild -> defaults to "false"
-			//def stopContainer -> defaults to "true"
-			//def forceClear -> defaults to "false"
-			//def clearOnFail -> defaults to "false"
-			//def forcePush -> defaults to "false"
-			//WARNING JENKINS SEND BOOLEANS AS STRING
-			try{
-			    currentVerbose=((verbose=="true")||(verbose==true))
-			} catch (err){
-			    println ("verbosity not provided defaults to false")
-			}
-			if (currentVerbose) println ("verbose = " + currentVerbose)
-			try{
-			    currentClearOnFail=((clearOnFail=="true")||(clearOnFail==true))
-			} catch (err){
-			    println ("clearOnFail not provided defaults to false")
-			}
-			if (currentVerbose) println ("currentClearOnFail = " + currentClearOnFail)											
-			if (hasSources) {
-				try{
-				    if (scmCredentials==null){ error "scm credentials empty"}
-				    hasCredentials=true;
-				} catch (err){
-				    println ("No scm credentials param")
-				}			
-				if (!hasCredentials){ error "No scm credentials to retrieve the source code" }				
-				if (currentVerbose) println ("scmCredentials = " + scmCredentials)
-			}
-			try{
-			    currentContinueTasks=((continueTasks=="true")||(continueTasks==true))
-			} catch (err){
-			    println ("continueTasks not provided defaults to true")
-			}
-			if (currentVerbose) println ("continueTasks = " + currentContinueTasks)							
-			try{
-			    currentForceBuild=((forceBuild=="true")||(forceBuild==true))
-			} catch (err){
-			    println ("forceBuild not provided defaults to false")
-			}
-			if (currentVerbose) println ("currentForceBuild = " + currentForceBuild)							
-			try{
-			    currentStopContainer=((stopContainer=="true")||(stopContainer==true))
-			} catch (err){
-			    println ("stopContainer not provided defaults to true")
-			}
-			if (currentVerbose) println ("currentStopContainer = " + currentStopContainer)				
-			try{
-			    currentForceClear=((forceClear=="true")||(forceClear==true))
-			} catch (err){
-			    println ("forceClear not provided defaults to false")
-			}
-			if (currentVerbose) println ("currentForceClear = " + currentForceClear)								
-			try{
-			    currentForcePush=((forcePush=="true")||(forcePush==true))
-			} catch (err){
-			    println ("forcePush not provided defaults to false")
-			}
-			if (currentVerbose) println ("currentForcePush = " + currentForcePush)				
-		}
-		if (currentForceClear){
-			stage ('Forced Clear'){
-            	sh "rm -rf ${WORKSPACE}/src"	   			
-			}
-		}
-		stage ('Calculate Variables'){
-		    workspace=WORKSPACE
-			if (currentVerbose) println ("workspace = " + workspace)						    
-		    jenkinsWorkspace=WORKSPACE+"/../workspace\\@script"
-			if (currentVerbose) println ("jenkinsWorkspace = " + jenkinsWorkspace)				
-		    devopsSourcesPath=workspace
-			if (currentVerbose) println ("devopsSourcesPath = " + devopsSourcesPath)			
-		    devopsSourcesGitRepoPath=jenkinsWorkspace
-			if (currentVerbose) println ("devopsSourcesGitRepoPath = " + devopsSourcesGitRepoPath)
-		    devopsSourcesGitPath=devopsSourcesGitRepoPath + "/" + devopsSourcesRelativePath
-			if (currentVerbose) println ("devopsSourcesGitPath = " + devopsSourcesGitPath)
-		    devopsSourcesLastCommitFile=devopsSourcesPath+"/src.dvp.last.commit"
-			if (currentVerbose) println ("devopsSourcesLastCommitFile = " + devopsSourcesLastCommitFile)
-            devopsSourcesLastChangedCommitFile=devopsSourcesPath+"/src.dvp.last.changed.commit"
-			if (currentVerbose) println ("devopsSourcesLastChangedCommitFile = " + devopsSourcesLastChangedCommitFile)
-		    devopsImageLastSha256File=devopsSourcesPath+"/dkr.img.last.sha256"
-			if (currentVerbose) println ("devopsImageLastSha256File = " + devopsImageLastSha256File)
-			if (hasSources){
-    		    sourcesPath=workspace+"/sources"
-	    		if (currentVerbose) println ("sourcesPath = " + sourcesPath)				
-			    sourcesGitRepoPath=workspace+"/sourcesRepo"
-				if (currentVerbose) println ("sourcesGitRepoPath = " + sourcesGitRepoPath)	
-			    sourcesGitPath=sourcesGitRepoPath + "/" + sourcesRelativePath
-				if (currentVerbose) println ("sourcesGitPath = " + sourcesGitPath)
-        		sourcesLastCommitFile=devopsSourcesPath+"/src.last.commit"
-	    		if (currentVerbose) println ("sourcesLastCommitFile = " + sourcesLastCommitFile)
-                sourcesLastChangedCommitFile=devopsSourcesPath+"/src.last.changed.commit"
-	    		if (currentVerbose) println ("sourcesLastChangedCommitFile = " + sourcesLastChangedCommitFile)
-			}
-		}		
-		try {
-            workspaceContent=sh(returnStdout: true, script: "ls ${workspace} 2>/dev/null").trim()
-        } catch (err){
-        }
-        
-        if (currentVerbose) println ("workspaceContent = " + workspaceContent)
-		hasEmptyWorkspace=(""==workspaceContent)
-        if (currentVerbose) println ("hasEmptyWorkspace = " + hasEmptyWorkspace)
-		if(hasSources){
-		    stage ('Gather Sources'){
-		        checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: sourcesGitRepoPath], [$class: 'SparseCheckoutPaths', sparseCheckoutPaths: [[path: sourcesRelativePath]]]], submoduleCfg: [], userRemoteConfigs: [[credentialsId: scmCredentials, url: sourcesRepo]]])
-    		    if (currentVerbose) println ("Sources checkout to " + sourcesPath)
-		    }
-		}		
-		if(currentForceBuild||hasEmptyWorkspace){
-			hasNewDevopsSources=true
-			try{
-				devopsSourcesCurrentCommit = sh(returnStdout: true, script: "git -C ${devopsSourcesGitRepoPath} rev-parse HEAD").trim()
-			} catch (err){
-			}
-			sh "echo \"${devopsSourcesCurrentCommit}\" > ${devopsSourcesLastChangedCommitFile}"
-			if (hasSources) {
-				hasNewSources=true
-				try{
-					sourcesCurrentCommit = sh(returnStdout: true, script: "git -C ${sourcesGitRepoPath} rev-parse HEAD").trim()
-				} catch (err){
-				}
-				sh "echo \"${sourcesCurrentCommit}\" > ${sourcesLastChangedCommitFile}"
-			}
-	        requiresBuild=true
-		}
-		else{
-    		stage ('Assess Built Need'){
-    		    sh "touch ${devopsSourcesLastCommitFile}" 
-    		    devopsSourcesLastCommit = sh(returnStdout: true, script: "cat ${devopsSourcesLastCommitFile}").trim()
-    		    if (currentVerbose) println ("devopsSourcesLastCommit = " + devopsSourcesLastCommit)
-		        try{
-		            devopsSourcesCurrentCommit = sh(returnStdout: true, script: "git -C ${devopsSourcesGitRepoPath} rev-parse HEAD").trim()
-    			} catch (err){
-    			}
-			    if (currentVerbose) println ("devopsSourcesCurrentCommit = " + devopsSourcesCurrentCommit)
-    			if (devopsSourcesCurrentCommit!=''){
-    				sh "echo \"${devopsSourcesCurrentCommit}\" > ${devopsSourcesLastCommitFile}"
-    			}
-    		    if (devopsSourcesCurrentCommit!=devopsSourcesLastCommit) {
-                    sh "touch ${devopsSourcesLastChangedCommitFile}" 
-                    devopsSourcesLastChangedCommit = sh(returnStdout: true, script: "cat ${devopsSourcesLastChangedCommitFile}").trim()
-                    if (currentVerbose) println ("devopsSourcesLastChangedCommit = " + devopsSourcesLastChangedCommit)
-                    if (devopsSourcesLastChangedCommit=="")  {
-	    	    		devopsSourcesDiffPreviousCommit="force"
-	    	    	}
-	    	    	else {
-	    	    		try{
-	    	    			devopsSourcesDiffPreviousCommit=sh(returnStdout: true, script: "git -C ${devopsSourcesGitRepoPath} diff HEAD:${devopsSourcesRelativePath} ${devopsSourcesLastChangedCommit}:${devopsSourcesRelativePath}").trim()
-	    	    		} catch(err) {
-	    	    		}
-	    	    	}
-    		    	try{
-    		    		devopsSourcesDiffPreviousCommit=sh(returnStdout: true, script: "git -C ${devopsSourcesGitRepoPath} diff HEAD:${devopsSourcesRelativePath} ${devopsSourcesLastChangedCommit}:${devopsSourcesRelativePath}").trim()
-    		    	} catch(err) {
-    		    	}
- 			    	if (currentVerbose) println ("devopsSourcesDiffPreviousCommit = " + devopsSourcesDiffPreviousCommit)
- 			    	if (devopsSourcesDiffPreviousCommit!=""){
-                        sh "echo \"${devopsSourcesCurrentCommit}\" > ${devopsSourcesLastChangedCommitFile}"
- 		  				hasNewDevopsSources=true
-    		        	requiresBuild=true
- 			    	}
-			    }
-		        if (hasSources)
-		        {
-        		    sh "touch ${sourcesLastCommitFile}" 
-        		    sourcesLastCommit = sh(returnStdout: true, script: "cat ${sourcesLastCommitFile}").trim()
-        		    if (currentVerbose) println ("sourcesLastCommit = " + sourcesLastCommit)
-    		        try{
-    		            sourcesCurrentCommit = sh(returnStdout: true, script: "git -C ${sourcesGitRepoPath} rev-parse HEAD").trim()
-        			} catch (err){
-        			}
-       			    if (currentVerbose) println ("sourcesCurrentCommit = " + sourcesCurrentCommit)
-        			if (devopsSourcesCurrentCommit!=''){
-        				sh "echo \"${sourcesCurrentCommit}\" > ${sourcesLastCommitFile}"
-        			}
-        		    if (sourcesCurrentCommit!=sourcesLastCommit) {
-                        sh "touch ${sourcesLastChangedCommitFile}" 
-                        sourcesLastChangedCommit = sh(returnStdout: true, script: "cat ${sourcesLastChangedCommitFile}").trim()
-                        if (currentVerbose) println ("sourcesLastChangedCommit = " + sourcesLastChangedCommit)
-                        if (sourcesLastChangedCommit=="")  {
-	    		    		sourcesDiffPreviousCommit="force"
-	    		    	}
-	    		    	else {
-	    		    		try{
-	    		    			sourcesDiffPreviousCommit=sh(returnStdout: true, script: "git -C ${sourcesGitRepoPath} diff HEAD:${sourcesRelativePath} ${sourcesLastChangedCommit}:${sourcesRelativePath}").trim()
-	    		    		} catch(err) {
-	    		    		}
-	    		    	}
-	 			    	if (currentVerbose) println ("sourcesDiffPreviousCommit = " + sourcesDiffPreviousCommit)
-	 			    	if (sourcesDiffPreviousCommit!=""){
-                            sh "echo \"${sourcesCurrentCommit}\" > ${sourcesLastChangedCommitFile}"
- 		  				    hasNewSources=true
-	    		        	requiresBuild=true
-	 			    	}
-        		    }
-		        }
-    		}
-		}
-       	if (currentVerbose) println ("hasNewDevopsSources = " + hasNewDevopsSources)
-       	if (currentVerbose) println ("hasNewSources = " + hasNewSources)
-       	if (currentVerbose) println ("requiresBuild = " + requiresBuild)
-		
-        if(requiresBuild){
-            stage ('Prepare Build Variables'){
-                // Get the Maven tool.
-                // ** NOTE: This 'M3' Maven tool must be configured
-                // **       in the global configuration.
-                mvnHome = tool 'Maven 3.3.9 colocated'
-            }
-             if(hasNewDevopsSources){
-	            stage ('Devops Source Move'){
-	                  sh "rm -rf ${devopsSourcesPath}/src"	   
-	                  sh "mv ${devopsSourcesGitPath}/src ${devopsSourcesPath}"	   
-	                  sh "rm -rf ${devopsSourcesPath}/pom.xml"	   
-	                  sh "mv ${devopsSourcesGitPath}/pom.xml ${devopsSourcesPath}/pom.xml"
-	            }
-            }
-            if(hasNewSources){
-	            stage ('Source Move'){
-                  sh "rm -rf ${sourcesPath}"	   
-                  sh "mkdir ${sourcesPath}"	   
-	              sh "mv ${sourcesGitPath}/* ${sourcesPath}"
-	            }
-            	stage ('Assess Sources Install Need'){          	
-					try {
-					    pomFile=sh(returnStdout: true, script: "ls ${sourcesPath}/pom.xml 2>/dev/null").trim()
-					} catch (err){
-					}
-	            	hasPomFile=(""!=pomFile)
- 					if (currentVerbose) println ("hasPomFile = " + hasPomFile)
-                }	            
-                if (hasPomFile){
-	                stage ('Source Maven Install'){
-	                 	try {
-	                 		pomPackaging=sh(returnStdout: true, script: "grep '<packaging>.*pom.*</packaging>' ${sourcesPath}/pom.xm").trim()
-	                 	} catch (err){
-	                 	}
-	 					if (currentVerbose) println ("pomPackaging = " + pomPackaging)				
-	                 	hasPomPackaging=(""!=pomPackaging)
-	 					if (currentVerbose) println ("hasPomPackaging = " + hasPomPackaging)
-	 					if 	(hasPomPackaging){
-	                    	sh "'${mvnHome}/bin/mvn' install:install --non-recursive -Dmaven.test.skip=true -f ${sourcesPath}/pom.xml"
-	 					} else {
-		                    sh "'${mvnHome}/bin/mvn' clean package install:install --non-recursive -Dmaven.test.skip=true -f ${sourcesPath}/pom.xml"				
-	 					}
-	                }
-                }
-            }
-            if(currentVerbose){
-                stage ('Variables Echo'){
-                	sh "'${mvnHome}/bin/mvn' antrun:run@echobase -f ${devopsSourcesPath}/pom.xml"
-                    sh "'${mvnHome}/bin/mvn' antrun:run@echo -f ${devopsSourcesPath}/pom.xml"
-                }
-            }
-            stage ('Assess Package/Install Need'){          	
-             	try {
-                	devopsPomPackaging=sh(returnStdout: true, script: "grep '<packaging>.*pom.*</packaging>' ${devopsSourcesPath}/pom.xml").trim()
-             	} catch (err){
-             	}
-	 			if (currentVerbose) println ("devopsPomPackaging = " + devopsPomPackaging)				
-                hasDevopsPomPackaging=(""!=devopsPomPackaging)
- 				if (currentVerbose) println ("hasDevopsPomPackaging = " + hasDevopsPomPackaging)				
-            }           
-            if (hasDevopsPomPackaging){
-                stage ('Maven Devops Install'){
-                    sh "'${mvnHome}/bin/mvn' clean package install:install --non-recursive -Dmaven.test.skip=true -f ${devopsSourcesPath}/pom.xml"
-                }
-            } else {
-                stage ('Maven Devops Package'){
-                    sh "'${mvnHome}/bin/mvn' clean package --non-recursive -Dmaven.test.skip=true -f ${devopsSourcesPath}/pom.xml"
-                }            
-            }
-            if (currentStopContainer){
-	            stage ('Docker Stop'){
-	                sh "'${mvnHome}/bin/mvn' docker:stop --non-recursive -Dmaven.test.skip=true -f ${devopsSourcesPath}/pom.xml"
-	            }
-            }
-            stage ('Docker Build Image'){
-                devopsImageBuildResult = sh(returnStdout: true, script: "'${mvnHome}/bin/mvn' docker:build --non-recursive -Dmaven.test.skip=true -f ${devopsSourcesPath}/pom.xml").trim()                
-            }
-        	if (!currentForcePush){
-			    if (currentVerbose) println ("devopsImageBuildResult = " + devopsImageBuildResult)
-			    sh "touch ${devopsImageLastSha256File}" 
-			    devopsImageLastSha256 = sh(returnStdout: true, script: "cat ${devopsImageLastSha256File}").trim()
-			    if (currentVerbose) println ("devopsImageLastSha256 = " + devopsImageLastSha256)
-		        try{
-		            devopsImageCurrentSha256 = (devopsImageBuildResult =~ /Built image sha256:(.*)\n/)[0][1]
-				} catch (err){
-				}			
-			    if (currentVerbose) println ("devopsImageCurrentSha256 = " + devopsImageCurrentSha256)
-				if (devopsImageCurrentSha256!=''){
-					sh "echo \"${devopsImageCurrentSha256}\" > ${devopsImageLastSha256File}"			
-				}
-			}
-			if (currentForcePush||(devopsImageLastSha256!=devopsImageCurrentSha256)){            	   	   	   
-	            stage ('Docker Push'){
-					sh "'${mvnHome}/bin/mvn' docker:push --non-recursive -Dmaven.test.skip=true -f ${devopsSourcesPath}/pom.xml"
-	            }
-            }				
-			if (currentContinueTasks) {
-				stage('Launch Depending Tasks') {
-					int i=0;
-					for (i=0;i<dependingTasks.size();i++){
-						if (dependingTasks[i]!=""){
-			    			//build job: 'eu.decideh2020.int.adapt.monitoring.jnk.tsk.build.images', wait: false
-			    			if (currentVerbose) println ("starting job " + dependingTasks[i])
-			    			build job: dependingTasks[i], wait: false, parameters: [booleanParam(name: 'stopContainer', value: false)]
-						}
-					}
-			    }
-			}            
-        }
-	} catch (err) {
-	    currentBuild.result = "FAILURE"
-		emailext (
-			subject: "FAILED: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]'",
-			body: """<p>FAILED: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]':</p>
-			<p>Check console output at &QUOT;<a href='${env.BUILD_URL}'>${env.JOB_NAME} [${env.BUILD_NUMBER}]</a>&QUOT;</p>""",
-			recipientProviders: [[$class: 'DevelopersRecipientProvider']]
-		)
-		if (currentClearOnFail){
-			stage ('Clear on Fail'){
-            	sh "rm -rf ${WORKSPACE}/src"	   			
-			}
-		}		
-	    throw err
-	}
-}
\ No newline at end of file
diff --git a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.telegraf.server.src.dvp/JenkinsfileDockerRunService b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.telegraf.server.src.dvp/JenkinsfileDockerRunService
deleted file mode 100644
index cdf85b33412d13e042cb63f2d82eef7edb6d9e0b..0000000000000000000000000000000000000000
--- a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.telegraf.server.src.dvp/JenkinsfileDockerRunService
+++ /dev/null
@@ -1,209 +0,0 @@
-#!groovy
-//http://groovy-lang.org/semantics.html
-
-node {	
-	//Required constants
-    currentBuild.result = "SUCCESS"
-	//Provided vars
-	def devopsSourcesRelativePath = 'Adapt_monitoring/eu.decideh2020.int.adapt.monitoring.grafana.server.src.dvp'
-	def devopsSourcesRepo = 'https://git.code.tecnalia.com/decide/WP4.git'
-	def dependingTasks=[
-	"",
-	""
-	]
-	//Params defaults
-	Boolean currentVerbose=false
-	Boolean hasCredentials=false
-	Boolean currentContinueTasks=true
-	Boolean currentStopContainer=true
-	Boolean currentForceClear=false
-	Boolean currentClearOnFail=false
-				
-	try	{		
-		//Computed vars
-		def devopsSourcesPath
-		def devopsSourcesGitRepoPath
-		def devopsSourcesGitPath
-		def workspace
-		def jenkinsWorkspace
-		
-		Boolean hasEmptyWorkspace=false
-		String workspaceContent=""
-
-		Boolean hasNewDevopsSources=false
-
-		String devopsSourcesLastCommitFile
-        String devopsSourcesLastChangedCommitFile
-
-		String devopsSourcesDiffPreviousCommit
-		String devopsSourcesCurrentCommit
-        String devopsSourcesLastCommit
-        String devopsSourcesLastChangedCommit
-
-		String mvnHome;
-		
-		stage ('Params Processing'){
-			//def verbose -> defaults to "false"
-			//def scmCredentials -> defaults to undefined
-			//def continueTasks -> defaults to "true"
-			//def stopContainer -> defaults to "true"
-			//def forceClear -> defaults to "false"
-			//def clearOnFail -> defaults to "false"
-			//WARNING JENKINS SEND BOOLEANS AS STRING
-			try{
-			    currentVerbose=((verbose=="true")||(verbose==true))
-			} catch (err){
-			    println ("verbosity not provided defaults to false")
-			}
-			if (currentVerbose) println ("verbose = " + currentVerbose)
-			try{
-			    currentClearOnFail=((clearOnFail=="true")||(clearOnFail==true))
-			} catch (err){
-			    println ("clearOnFail not provided defaults to false")
-			}
-			if (currentVerbose) println ("currentClearOnFail = " + currentClearOnFail)											
-			try{
-			    currentContinueTasks=((continueTasks=="true")||(continueTasks==true))
-			} catch (err){
-			    println ("continueTasks not provided defaults to true")
-			}
-			if (currentVerbose) println ("continueTasks = " + currentContinueTasks)							
-			try{
-			    currentStopContainer=((stopContainer=="true")||(stopContainer==true))
-			} catch (err){
-			    println ("stopContainer not provided defaults to true")
-			}
-			if (currentVerbose) println ("currentStopContainer = " + currentStopContainer)				
-			try{
-			    currentForceClear=((forceClear=="true")||(forceClear==true))
-			} catch (err){
-			    println ("forceClear not provided defaults to false")
-			}
-			if (currentVerbose) println ("currentForceClear = " + currentForceClear)											
-		}
-		if (currentForceClear){
-			stage ('Forced Clear'){
-            	sh "rm -rf ${WORKSPACE}/src"	   			
-			}
-		}
-		stage ('Calculate Variables'){
-		    workspace=WORKSPACE
-			if (currentVerbose) println ("workspace = " + workspace)						    
-		    jenkinsWorkspace=WORKSPACE+"/../workspace\\@script"
-			if (currentVerbose) println ("jenkinsWorkspace = " + jenkinsWorkspace)				
-		    devopsSourcesPath=workspace
-			if (currentVerbose) println ("devopsSourcesPath = " + devopsSourcesPath)			
-		    devopsSourcesGitRepoPath=jenkinsWorkspace
-			if (currentVerbose) println ("devopsSourcesGitRepoPath = " + devopsSourcesGitRepoPath)
-		    devopsSourcesGitPath=devopsSourcesGitRepoPath + "/" + devopsSourcesRelativePath
-			if (currentVerbose) println ("devopsSourcesGitPath = " + devopsSourcesGitPath)
-		    devopsSourcesLastCommitFile=devopsSourcesPath+"/src.dvp.last.commit"
-			if (currentVerbose) println ("devopsSourcesLastCommitFile = " + devopsSourcesLastCommitFile)
-            devopsSourcesLastChangedCommitFile=devopsSourcesPath+"/src.dvp.last.changed.commit"
-			if (currentVerbose) println ("devopsSourcesLastChangedCommitFile = " + devopsSourcesLastChangedCommitFile)
-		}
-		try {
-            workspaceContent=sh(returnStdout: true, script: "ls ${workspace} 2>/dev/null").trim()
-        } catch (err){
-        }       
-        if (currentVerbose) println ("workspaceContent = " + workspaceContent)
-		hasEmptyWorkspace=(""==workspaceContent)
-        if (currentVerbose) println ("hasEmptyWorkspace = " + hasEmptyWorkspace)
-		if (hasEmptyWorkspace) {
-			hasNewDevopsSources=true
-		} else {
-			stage ('Assess New Sources'){
-			    sh "touch ${devopsSourcesLastCommitFile}" 
-			    devopsSourcesLastCommit = sh(returnStdout: true, script: "cat ${devopsSourcesLastCommitFile}").trim()
-			    if (currentVerbose) println ("devopsSourcesLastCommit = " + devopsSourcesLastCommit)
-		        try{
-		            devopsSourcesCurrentCommit = sh(returnStdout: true, script: "git -C ${devopsSourcesGitRepoPath} rev-parse HEAD").trim()
-				} catch (err){
-				}
-			    if (currentVerbose) println ("devopsSourcesCurrentCommit = " + devopsSourcesCurrentCommit)
-				if (devopsSourcesCurrentCommit!=''){
-					sh "echo \"${devopsSourcesCurrentCommit}\" > ${devopsSourcesLastCommitFile}"
-				}
-			    if (devopsSourcesCurrentCommit!=devopsSourcesLastCommit) {
-                    sh "touch ${devopsSourcesLastChangedCommitFile}" 
-                    devopsSourcesLastChangedCommit = sh(returnStdout: true, script: "cat ${devopsSourcesLastChangedCommitFile}").trim()
-                    if (currentVerbose) println ("devopsSourcesLastChangedCommit = " + devopsSourcesLastChangedCommit)
-                    if (devopsSourcesLastChangedCommit=="")  {
-	    	    		devopsSourcesDiffPreviousCommit="force"
-	    	    	}
-	    	    	else {
-	    	    		try{
-	    	    			devopsSourcesDiffPreviousCommit=sh(returnStdout: true, script: "git -C ${devopsSourcesGitRepoPath} diff HEAD:${devopsSourcesRelativePath} ${devopsSourcesLastChangedCommit}:${devopsSourcesRelativePath}").trim()
-	    	    		} catch(err) {
-	    	    		}
-	    	    	}
-			    	try{
-			    		devopsSourcesDiffPreviousCommit=sh(returnStdout: true, script: "git -C ${devopsSourcesGitRepoPath} diff HEAD:${devopsSourcesRelativePath} ${devopsSourcesLastChangedCommit}:${devopsSourcesRelativePath}").trim()
-			    	} catch(err) {
-			    	}
-			    	if (currentVerbose) println ("devopsSourcesDiffPreviousCommit = " + devopsSourcesDiffPreviousCommit)
-			    	if (devopsSourcesDiffPreviousCommit!=""){
-                        sh "echo \"${devopsSourcesCurrentCommit}\" > ${devopsSourcesLastChangedCommitFile}"
-		  				hasNewDevopsSources=true
-			    	}
-			    }
-			}
-		}
-       	if (currentVerbose) println ("hasNewDevopsSources = " + hasNewDevopsSources)
-		
-        stage ('Prepare Variables'){
-            // Get the Maven tool.
-            // ** NOTE: This 'M3' Maven tool must be configured
-            // **       in the global configuration.
-            mvnHome = tool 'Maven 3.3.9 colocated'
-        }
-         if(hasNewDevopsSources){
-            stage ('Devops Source Move'){
-                  sh "rm -rf ${devopsSourcesPath}/src"	   
-                  sh "mv ${devopsSourcesGitPath}/src ${devopsSourcesPath}"	   
-                  sh "rm -rf ${devopsSourcesPath}/pom.xml"	   
-                  sh "mv ${devopsSourcesGitPath}/pom.xml ${devopsSourcesPath}/pom.xml"
-            }
-        }
-        if(currentVerbose){
-            stage ('Variables Echo'){
-            	sh "'${mvnHome}/bin/mvn' antrun:run@echobase -f ${devopsSourcesPath}/pom.xml"
-                sh "'${mvnHome}/bin/mvn' antrun:run@echo -f ${devopsSourcesPath}/pom.xml"
-            }
-        }
-        if (currentStopContainer){
-            stage ('Docker Stop'){
-                sh "'${mvnHome}/bin/mvn' docker:stop --non-recursive -Dmaven.test.skip=true -f ${devopsSourcesPath}/pom.xml"
-            }
-        }
-        stage ('Docker Start'){
-            sh "'${mvnHome}/bin/mvn' docker:start --non-recursive -Dmaven.test.skip=true -f ${devopsSourcesPath}/pom.xml"
-        }
-  		if (currentContinueTasks) {
-			stage('Launch Depending Tasks') {
-				int i=0;
-				for (i=0;i<dependingTasks.size();i++){
-					if (dependingTasks[i]!=""){
-		    			//build job: 'eu.decideh2020.int.adapt.monitoring.jnk.tsk.build.images', wait: false
-		    			if (currentVerbose) println ("starting job " + dependingTasks[i])
-		    			build job: dependingTasks[i], wait: false, parameters: [booleanParam(name: 'stopContainer', value: false)]
-					}
-				}
-		    }
-		}            
-	} catch (err) {
-	    currentBuild.result = "FAILURE"
-		emailext (
-			subject: "FAILED: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]'",
-			body: """<p>FAILED: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]':</p>
-			<p>Check console output at &QUOT;<a href='${env.BUILD_URL}'>${env.JOB_NAME} [${env.BUILD_NUMBER}]</a>&QUOT;</p>""",
-			recipientProviders: [[$class: 'DevelopersRecipientProvider']]
-		)
-		if (currentClearOnFail){
-			stage ('Clear on Fail'){
-            	sh "rm -rf ${WORKSPACE}/src"	   			
-			}
-		}		
-	    throw err
-	}
-}
\ No newline at end of file
diff --git a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.telegraf.server.src.dvp/pom.xml b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.telegraf.server.src.dvp/pom.xml
deleted file mode 100644
index 06f604a019dcc6bfd3aa8d24b8dc07c9ca1feb7c..0000000000000000000000000000000000000000
--- a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.telegraf.server.src.dvp/pom.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<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>eu.decideh2020.int.adapt.monitoring</groupId>
-		<artifactId>eu.decideh2020.int.adapt.monitoring.src.dvp</artifactId>
-		<version>ALPHA</version>
-	</parent>
-	<artifactId>eu.decideh2020.int.adapt.monitoring.src.dvp.grafana.server</artifactId>
-	<packaging>pom</packaging>
-	<build>
-		<plugins>
-			<!-- We check the value of some properties values -->
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-antrun-plugin</artifactId>
-				<version>1.1</version>
-				<executions>
-					<execution>
-						<id>echo</id>
-						<phase>initialize</phase>
-						<goals>
-							<goal>run</goal>
-						</goals>
-						<configuration>
-							<tasks>
-								<echo>Displaying values of properties</echo>
-								<echo>[project.build.sourceDirectory]=${project.build.sourceDirectory}</echo>
-								<echo>[docker.image.name]=${docker.image.name}</echo>
-								<echo>[docker.image.version]=${docker.image.version}</echo>
-								<echo>[docker.port1.mapping]=${docker.port1.mapping}</echo>
-							</tasks>
-						</configuration>
-					</execution>
-				</executions>
-			</plugin>
-			<!-- added to support docker image creation -->
-			<plugin>
-				<groupId>org.jolokia</groupId>
-				<artifactId>docker-maven-plugin</artifactId>
-				<!-- last version in https://mvnrepository.com/artifact/org.jolokia/docker-maven-plugin -->
-				<version>0.13.9</version>
-				<configuration>
-					<images>
-						<image>
-							<alias>${docker.name}</alias>
-							<name>${docker.image.name}:${docker.image.version}</name>
-							<build>
-								<assembly>
-									<!-- this time we will do it from a docker file element is needed 
-										to switch the usage of the extrenal file -->
-									<dockerFileDir>.</dockerFileDir>
-									<!-- end -->
-								</assembly>
-							</build>
-							<run>
-								<namingStrategy>alias</namingStrategy>
-								<ports>
-									<port>${docker.port1.mapping}</port>
-								</ports>
-							</run>
-						</image>
-					</images>
-				</configuration>
-			</plugin>
-		</plugins>
-	</build>
-	<properties>
-		<docker.name>eu.decideh2020.grafana.server</docker.name>
-		<docker.image.name>${docker.registry.name}${docker.submitter}/${docker.name}</docker.image.name>
-		<docker.image.version>${project.version}</docker.image.version>
-		<docker.port1.external>${eu.decideh2020.grafana.port}</docker.port1.external>
-		<docker.port1.mapping>${docker.port1.external}:3000</docker.port1.mapping>
-	</properties>
-</project>
\ No newline at end of file
diff --git a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.telegraf.server.src.dvp/src/main/docker/Dockerfile b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.telegraf.server.src.dvp/src/main/docker/Dockerfile
deleted file mode 100644
index 87aa0c41a2484b41f6e7dce556c608ad21edc9ad..0000000000000000000000000000000000000000
--- a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.telegraf.server.src.dvp/src/main/docker/Dockerfile
+++ /dev/null
@@ -1,15 +0,0 @@
-# I take a official mono image https://hub.docker.com/r/grafana/grafana/
-
-FROM telegraf:1.4.5
-ENV INFLUXDB_DOMAIN influxdb
-ENV SOCKSHOP_DOMAIN sockshop
-COPY custom_entrypoint.sh /custom_entrypoint.sh
-COPY telegraf /etc/telegraf
-
-#ENTRYPOINT ["/custom_entrypoint.sh","&&","/entrypoint.sh"]
-RUN chmod +x /custom_entrypoint.sh
-
-ENTRYPOINT ["/custom_entrypoint.sh"]
-
-CMD ["telegraf"]
-
diff --git a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.telegraf.server.src.dvp/src/main/docker/custom_entrypoint.sh b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.telegraf.server.src.dvp/src/main/docker/custom_entrypoint.sh
deleted file mode 100644
index 0fb71cdbfbed3de0fe2e64f8d01080eabd3a726a..0000000000000000000000000000000000000000
--- a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.telegraf.server.src.dvp/src/main/docker/custom_entrypoint.sh
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/bin/bash
-
-if [[ "$INFLUXDB_DOMAIN" != "influxdb" ]]
-then
-	echo replacing domaing influxdb
-	sed -i "s/influxdb/$INFLUXDB_DOMAIN/g" /etc/telegraf/telegraf.conf
-fi
-if [[ "$SOCKSHOP_DOMAIN" != "sockshop" ]]
-then
-	echo replacing domaing sockshop
-	sed -i "s/sockshop/$SOCKSHOP_DOMAIN/g" /etc/telegraf/telegraf.conf
-fi
-
-set -e
-
-if [ "${1:0:1}" = '-' ]; then
-    set -- telegraf "$@"
-fi
-
-exec "$@"
\ No newline at end of file
diff --git a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.telegraf.server.src.dvp/src/main/docker/telegraf/.gitignore b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.telegraf.server.src.dvp/src/main/docker/telegraf/.gitignore
deleted file mode 100644
index 33b36fc61e86bc48f5b9cbc29bd68546b37c936d..0000000000000000000000000000000000000000
--- a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.telegraf.server.src.dvp/src/main/docker/telegraf/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-telegraf.d
\ No newline at end of file
diff --git a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.telegraf.server.src.dvp/src/main/docker/telegraf/telegraf.conf b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.telegraf.server.src.dvp/src/main/docker/telegraf/telegraf.conf
deleted file mode 100644
index 06fcafda660fbdf7b67381b507a13efa29cca8c1..0000000000000000000000000000000000000000
--- a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.telegraf.server.src.dvp/src/main/docker/telegraf/telegraf.conf
+++ /dev/null
@@ -1,2603 +0,0 @@
-##/****************************************************************
-##*Copyright (c) 2017 Tecnalia.
-##*Licensed under MIT License (the "License");
-##*Permission is hereby granted, free of charge, to any person obtaining a copy 
-##of this software and associated documentation files (the "Software"), to deal 
-##in the Software without restriction, including without limitation the rights 
-##to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
-##copies of the Software, and to permit persons to whom the Software is furnished 
-##to do so, subject to the following conditions:
-##*The above copyright notice and this permission notice shall be included in all 
-##copies or substantial portions of the Software.
-##*
-##*
-##*THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 
-##INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 
-##PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 
-##HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 
-##CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 
-##OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-##
-##*Contributors (in alphabetical order):
-##*Gorka Benguria                                 Tecnalia
-##*Iñaki Etxaniz                                  Tecnalia
-##*Juncal Alonso                                  Tecnalia
-##*Leire Orue-Echevarria                          Tecnalia
-##*Maria Jose Lopez                               Tecnalia
-##*Marisa Escalante                               Tecnalia
-##*
-##*Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
-##*****************************************************************************/
-
-
-
-# Telegraf Configuration
-#
-# Telegraf is entirely plugin driven. All metrics are gathered from the
-# declared inputs, and sent to the declared outputs.
-#
-# Plugins must be declared in here to be active.
-# To deactivate a plugin, comment out the name and any variables.
-#
-# Use 'telegraf -config telegraf.conf -test' to see what metrics a config
-# file would generate.
-#
-# Environment variables can be used anywhere in this config file, simply prepend
-# them with $. For strings the variable must be within quotes (ie, "$STR_VAR"),
-# for numbers and booleans they should be plain (ie, $INT_VAR, $BOOL_VAR)
-
-
-# Global tags can be specified here in key="value" format.
-[global_tags]
-  # dc = "us-east-1" # will tag all metrics with dc=us-east-1
-  # rack = "1a"
-  ## Environment variables can be used as tags, and throughout the config file
-  # user = "$USER"
-
-
-# Configuration for telegraf agent
-[agent]
-  ## Default data collection interval for all inputs
-  interval = "10s"
-  ## Rounds collection interval to 'interval'
-  ## ie, if interval="10s" then always collect on :00, :10, :20, etc.
-  round_interval = true
-
-  ## Telegraf will send metrics to outputs in batches of at most
-  ## metric_batch_size metrics.
-  ## This controls the size of writes that Telegraf sends to output plugins.
-  metric_batch_size = 1000
-
-  ## For failed writes, telegraf will cache metric_buffer_limit metrics for each
-  ## output, and will flush this buffer on a successful write. Oldest metrics
-  ## are dropped first when this buffer fills.
-  ## This buffer only fills when writes fail to output plugin(s).
-  metric_buffer_limit = 10000
-
-  ## Collection jitter is used to jitter the collection by a random amount.
-  ## Each plugin will sleep for a random time within jitter before collecting.
-  ## This can be used to avoid many plugins querying things like sysfs at the
-  ## same time, which can have a measurable effect on the system.
-  collection_jitter = "0s"
-
-  ## Default flushing interval for all outputs. You shouldn't set this below
-  ## interval. Maximum flush_interval will be flush_interval + flush_jitter
-  flush_interval = "10s"
-  ## Jitter the flush interval by a random amount. This is primarily to avoid
-  ## large write spikes for users running a large number of telegraf instances.
-  ## ie, a jitter of 5s and interval 10s means flushes will happen every 10-15s
-  flush_jitter = "0s"
-
-  ## By default or when set to "0s", precision will be set to the same
-  ## timestamp order as the collection interval, with the maximum being 1s.
-  ##   ie, when interval = "10s", precision will be "1s"
-  ##       when interval = "250ms", precision will be "1ms"
-  ## Precision will NOT be used for service inputs. It is up to each individual
-  ## service input to set the timestamp at the appropriate precision.
-  ## Valid time units are "ns", "us" (or "µs"), "ms", "s".
-  precision = ""
-
-  ## Logging configuration:
-  ## Run telegraf with debug log messages.
-  debug = false
-  ## Run telegraf in quiet mode (error log messages only).
-  quiet = false
-  ## Specify the log file name. The empty string means to log to stderr.
-  logfile = ""
-
-  ## Override default hostname, if empty use os.Hostname()
-  hostname = ""
-  ## If set to true, do no set the "host" tag in the telegraf agent.
-  omit_hostname = false
-
-
-###############################################################################
-#                            OUTPUT PLUGINS                                   #
-###############################################################################
-
-# Configuration for influxdb server to send metrics to
-[[outputs.influxdb]]
-  ## The HTTP or UDP URL for your InfluxDB instance.  Each item should be
-  ## of the form:
-  ##   scheme "://" host [ ":" port]
-  ##
-  ## Multiple urls can be specified as part of the same cluster,
-  ## this means that only ONE of the urls will be written to each interval.
-  # urls = ["udp://localhost:8089"] # UDP endpoint example
-  urls = ["http://influxdb:8086"] # required
-  ## The target database for metrics (telegraf will create it if not exists).
-  database = "decideh2020adapt" # required
-
-  ## Name of existing retention policy to write to.  Empty string writes to
-  ## the default retention policy.
-  retention_policy = ""
-  ## Write consistency (clusters only), can be: "any", "one", "quorum", "all"
-  write_consistency = "any"
-
-  ## Write timeout (for the InfluxDB client), formatted as a string.
-  ## If not provided, will default to 5s. 0s means no timeout (not recommended).
-  timeout = "5s"
-  # username = "telegraf"
-  # password = "metricsmetricsmetricsmetrics"
-  ## Set the user agent for HTTP POSTs (can be useful for log differentiation)
-  # user_agent = "telegraf"
-  ## Set UDP payload size, defaults to InfluxDB UDP Client default (512 bytes)
-  # udp_payload = 512
-
-  ## Optional SSL Config
-  # ssl_ca = "/etc/telegraf/ca.pem"
-  # ssl_cert = "/etc/telegraf/cert.pem"
-  # ssl_key = "/etc/telegraf/key.pem"
-  ## Use SSL but skip chain & host verification
-  # insecure_skip_verify = false
-
-
-# # Configuration for Amon Server to send metrics to.
-# [[outputs.amon]]
-#   ## Amon Server Key
-#   server_key = "my-server-key" # required.
-#
-#   ## Amon Instance URL
-#   amon_instance = "https://youramoninstance" # required
-#
-#   ## Connection timeout.
-#   # timeout = "5s"
-
-
-# # Configuration for the AMQP server to send metrics to
-# [[outputs.amqp]]
-#   ## AMQP url
-#   url = "amqp://localhost:5672/influxdb"
-#   ## AMQP exchange
-#   exchange = "telegraf"
-#   ## Auth method. PLAIN and EXTERNAL are supported
-#   ## Using EXTERNAL requires enabling the rabbitmq_auth_mechanism_ssl plugin as
-#   ## described here: https://www.rabbitmq.com/plugins.html
-#   # auth_method = "PLAIN"
-#   ## Telegraf tag to use as a routing key
-#   ##  ie, if this tag exists, its value will be used as the routing key
-#   routing_tag = "host"
-#
-#   ## InfluxDB retention policy
-#   # retention_policy = "default"
-#   ## InfluxDB database
-#   # database = "telegraf"
-#
-#   ## Write timeout, formatted as a string.  If not provided, will default
-#   ## to 5s. 0s means no timeout (not recommended).
-#   # timeout = "5s"
-#
-#   ## Optional SSL Config
-#   # ssl_ca = "/etc/telegraf/ca.pem"
-#   # ssl_cert = "/etc/telegraf/cert.pem"
-#   # ssl_key = "/etc/telegraf/key.pem"
-#   ## Use SSL but skip chain & host verification
-#   # insecure_skip_verify = false
-#
-#   ## Data format to output.
-#   ## Each data format has its own unique set of configuration options, read
-#   ## more about them here:
-#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md
-#   data_format = "influx"
-
-
-# # Configuration for AWS CloudWatch output.
-# [[outputs.cloudwatch]]
-#   ## Amazon REGION
-#   region = "us-east-1"
-#
-#   ## Amazon Credentials
-#   ## Credentials are loaded in the following order
-#   ## 1) Assumed credentials via STS if role_arn is specified
-#   ## 2) explicit credentials from 'access_key' and 'secret_key'
-#   ## 3) shared profile from 'profile'
-#   ## 4) environment variables
-#   ## 5) shared credentials file
-#   ## 6) EC2 Instance Profile
-#   #access_key = ""
-#   #secret_key = ""
-#   #token = ""
-#   #role_arn = ""
-#   #profile = ""
-#   #shared_credential_file = ""
-#
-#   ## Namespace for the CloudWatch MetricDatums
-#   namespace = "InfluxData/Telegraf"
-
-
-# # Configuration for DataDog API to send metrics to.
-# [[outputs.datadog]]
-#   ## Datadog API key
-#   apikey = "my-secret-key" # required.
-#
-#   ## Connection timeout.
-#   # timeout = "5s"
-
-
-# # Send metrics to nowhere at all
-# [[outputs.discard]]
-#   # no configuration
-
-
-# # Configuration for Elasticsearch to send metrics to.
-# [[outputs.elasticsearch]]
-#   ## The full HTTP endpoint URL for your Elasticsearch instance
-#   ## Multiple urls can be specified as part of the same cluster,
-#   ## this means that only ONE of the urls will be written to each interval.
-#   urls = [ "http://node1.es.example.com:9200" ] # required.
-#   ## Elasticsearch client timeout, defaults to "5s" if not set.
-#   timeout = "5s"
-#   ## Set to true to ask Elasticsearch a list of all cluster nodes,
-#   ## thus it is not necessary to list all nodes in the urls config option.
-#   enable_sniffer = false
-#   ## Set the interval to check if the Elasticsearch nodes are available
-#   ## Setting to "0s" will disable the health check (not recommended in production)
-#   health_check_interval = "10s"
-#   ## HTTP basic authentication details (eg. when using Shield)
-#   # username = "telegraf"
-#   # password = "mypassword"
-#
-#   ## Index Config
-#   ## The target index for metrics (Elasticsearch will create if it not exists).
-#   ## You can use the date specifiers below to create indexes per time frame.
-#   ## The metric timestamp will be used to decide the destination index name
-#   # %Y - year (2016)
-#   # %y - last two digits of year (00..99)
-#   # %m - month (01..12)
-#   # %d - day of month (e.g., 01)
-#   # %H - hour (00..23)
-#   index_name = "telegraf-%Y.%m.%d" # required.
-#
-#   ## Template Config
-#   ## Set to true if you want telegraf to manage its index template.
-#   ## If enabled it will create a recommended index template for telegraf indexes
-#   manage_template = true
-#   ## The template name used for telegraf indexes
-#   template_name = "telegraf"
-#   ## Set to true if you want telegraf to overwrite an existing template
-#   overwrite_template = false
-
-
-# # Send telegraf metrics to file(s)
-# [[outputs.file]]
-#   ## Files to write to, "stdout" is a specially handled file.
-#   files = ["stdout", "/tmp/metrics.out"]
-#
-#   ## Data format to output.
-#   ## Each data format has its own unique set of configuration options, read
-#   ## more about them here:
-#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md
-#   data_format = "influx"
-
-
-# # Configuration for Graphite server to send metrics to
-# [[outputs.graphite]]
-#   ## TCP endpoint for your graphite instance.
-#   ## If multiple endpoints are configured, output will be load balanced.
-#   ## Only one of the endpoints will be written to with each iteration.
-#   servers = ["localhost:2003"]
-#   ## Prefix metrics name
-#   prefix = ""
-#   ## Graphite output template
-#   ## see https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md
-#   template = "host.tags.measurement.field"
-#   ## timeout in seconds for the write connection to graphite
-#   timeout = 2
-
-
-# # Send telegraf metrics to graylog(s)
-# [[outputs.graylog]]
-#   ## UDP endpoint for your graylog instance.
-#   servers = ["127.0.0.1:12201", "192.168.1.1:12201"]
-
-
-# # Configuration for sending metrics to an Instrumental project
-# [[outputs.instrumental]]
-#   ## Project API Token (required)
-#   api_token = "API Token" # required
-#   ## Prefix the metrics with a given name
-#   prefix = ""
-#   ## Stats output template (Graphite formatting)
-#   ## see https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md#graphite
-#   template = "host.tags.measurement.field"
-#   ## Timeout in seconds to connect
-#   timeout = "2s"
-#   ## Display Communcation to Instrumental
-#   debug = false
-
-
-# # Configuration for the Kafka server to send metrics to
-# [[outputs.kafka]]
-#   ## URLs of kafka brokers
-#   brokers = ["localhost:9092"]
-#   ## Kafka topic for producer messages
-#   topic = "telegraf"
-#   ## Telegraf tag to use as a routing key
-#   ##  ie, if this tag exists, its value will be used as the routing key
-#   routing_tag = "host"
-#
-#   ## CompressionCodec represents the various compression codecs recognized by
-#   ## Kafka in messages.
-#   ##  0 : No compression
-#   ##  1 : Gzip compression
-#   ##  2 : Snappy compression
-#   compression_codec = 0
-#
-#   ##  RequiredAcks is used in Produce Requests to tell the broker how many
-#   ##  replica acknowledgements it must see before responding
-#   ##   0 : the producer never waits for an acknowledgement from the broker.
-#   ##       This option provides the lowest latency but the weakest durability
-#   ##       guarantees (some data will be lost when a server fails).
-#   ##   1 : the producer gets an acknowledgement after the leader replica has
-#   ##       received the data. This option provides better durability as the
-#   ##       client waits until the server acknowledges the request as successful
-#   ##       (only messages that were written to the now-dead leader but not yet
-#   ##       replicated will be lost).
-#   ##   -1: the producer gets an acknowledgement after all in-sync replicas have
-#   ##       received the data. This option provides the best durability, we
-#   ##       guarantee that no messages will be lost as long as at least one in
-#   ##       sync replica remains.
-#   required_acks = -1
-#
-#   ##  The total number of times to retry sending a message
-#   max_retry = 3
-#
-#   ## Optional SSL Config
-#   # ssl_ca = "/etc/telegraf/ca.pem"
-#   # ssl_cert = "/etc/telegraf/cert.pem"
-#   # ssl_key = "/etc/telegraf/key.pem"
-#   ## Use SSL but skip chain & host verification
-#   # insecure_skip_verify = false
-#
-#   ## Optional SASL Config
-#   # sasl_username = "kafka"
-#   # sasl_password = "secret"
-#
-#   ## Data format to output.
-#   ## Each data format has its own unique set of configuration options, read
-#   ## more about them here:
-#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md
-#   data_format = "influx"
-
-
-# # Configuration for the AWS Kinesis output.
-# [[outputs.kinesis]]
-#   ## Amazon REGION of kinesis endpoint.
-#   region = "ap-southeast-2"
-#
-#   ## Amazon Credentials
-#   ## Credentials are loaded in the following order
-#   ## 1) Assumed credentials via STS if role_arn is specified
-#   ## 2) explicit credentials from 'access_key' and 'secret_key'
-#   ## 3) shared profile from 'profile'
-#   ## 4) environment variables
-#   ## 5) shared credentials file
-#   ## 6) EC2 Instance Profile
-#   #access_key = ""
-#   #secret_key = ""
-#   #token = ""
-#   #role_arn = ""
-#   #profile = ""
-#   #shared_credential_file = ""
-#
-#   ## Kinesis StreamName must exist prior to starting telegraf.
-#   streamname = "StreamName"
-#   ## PartitionKey as used for sharding data.
-#   partitionkey = "PartitionKey"
-#   ## If set the paritionKey will be a random UUID on every put.
-#   ## This allows for scaling across multiple shards in a stream.
-#   ## This will cause issues with ordering.
-#   use_random_partitionkey = false
-#
-#
-#   ## Data format to output.
-#   ## Each data format has its own unique set of configuration options, read
-#   ## more about them here:
-#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md
-#   data_format = "influx"
-#
-#   ## debug will show upstream aws messages.
-#   debug = false
-
-
-# # Configuration for Librato API to send metrics to.
-# [[outputs.librato]]
-#   ## Librator API Docs
-#   ## http://dev.librato.com/v1/metrics-authentication
-#   ## Librato API user
-#   api_user = "telegraf@influxdb.com" # required.
-#   ## Librato API token
-#   api_token = "my-secret-token" # required.
-#   ## Debug
-#   # debug = false
-#   ## Connection timeout.
-#   # timeout = "5s"
-#   ## Output source Template (same as graphite buckets)
-#   ## see https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md#graphite
-#   ## This template is used in librato's source (not metric's name)
-#   template = "host"
-#
-
-
-# # Configuration for MQTT server to send metrics to
-# [[outputs.mqtt]]
-#   servers = ["localhost:1883"] # required.
-#
-#   ## MQTT outputs send metrics to this topic format
-#   ##    "<topic_prefix>/<hostname>/<pluginname>/"
-#   ##   ex: prefix/web01.example.com/mem
-#   topic_prefix = "telegraf"
-#
-#   ## username and password to connect MQTT server.
-#   # username = "telegraf"
-#   # password = "metricsmetricsmetricsmetrics"
-#
-#   ## client ID, if not set a random ID is generated
-#   # client_id = ""
-#
-#   ## Optional SSL Config
-#   # ssl_ca = "/etc/telegraf/ca.pem"
-#   # ssl_cert = "/etc/telegraf/cert.pem"
-#   # ssl_key = "/etc/telegraf/key.pem"
-#   ## Use SSL but skip chain & host verification
-#   # insecure_skip_verify = false
-#
-#   ## Data format to output.
-#   ## Each data format has its own unique set of configuration options, read
-#   ## more about them here:
-#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md
-#   data_format = "influx"
-
-
-# # Send telegraf measurements to NATS
-# [[outputs.nats]]
-#   ## URLs of NATS servers
-#   servers = ["nats://localhost:4222"]
-#   ## Optional credentials
-#   # username = ""
-#   # password = ""
-#   ## NATS subject for producer messages
-#   subject = "telegraf"
-#
-#   ## Optional SSL Config
-#   # ssl_ca = "/etc/telegraf/ca.pem"
-#   # ssl_cert = "/etc/telegraf/cert.pem"
-#   # ssl_key = "/etc/telegraf/key.pem"
-#   ## Use SSL but skip chain & host verification
-#   # insecure_skip_verify = false
-#
-#   ## Data format to output.
-#   ## Each data format has its own unique set of configuration options, read
-#   ## more about them here:
-#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md
-#   data_format = "influx"
-
-
-# # Send telegraf measurements to NSQD
-# [[outputs.nsq]]
-#   ## Location of nsqd instance listening on TCP
-#   server = "localhost:4150"
-#   ## NSQ topic for producer messages
-#   topic = "telegraf"
-#
-#   ## Data format to output.
-#   ## Each data format has its own unique set of configuration options, read
-#   ## more about them here:
-#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md
-#   data_format = "influx"
-
-
-# # Configuration for OpenTSDB server to send metrics to
-# [[outputs.opentsdb]]
-#   ## prefix for metrics keys
-#   prefix = "my.specific.prefix."
-#
-#   ## DNS name of the OpenTSDB server
-#   ## Using "opentsdb.example.com" or "tcp://opentsdb.example.com" will use the
-#   ## telnet API. "http://opentsdb.example.com" will use the Http API.
-#   host = "opentsdb.example.com"
-#
-#   ## Port of the OpenTSDB server
-#   port = 4242
-#
-#   ## Number of data points to send to OpenTSDB in Http requests.
-#   ## Not used with telnet API.
-#   httpBatchSize = 50
-#
-#   ## Debug true - Prints OpenTSDB communication
-#   debug = false
-
-
-# # Configuration for the Prometheus client to spawn
-# [[outputs.prometheus_client]]
-#   ## Address to listen on
-#   # listen = ":9126"
-#
-#   ## Interval to expire metrics and not deliver to prometheus, 0 == no expiration
-#   # expiration_interval = "60s"
-
-
-# # Configuration for the Riemann server to send metrics to
-# [[outputs.riemann]]
-#   ## The full TCP or UDP URL of the Riemann server
-#   url = "tcp://localhost:5555"
-#
-#   ## Riemann event TTL, floating-point time in seconds.
-#   ## Defines how long that an event is considered valid for in Riemann
-#   # ttl = 30.0
-#
-#   ## Separator to use between measurement and field name in Riemann service name
-#   ## This does not have any effect if 'measurement_as_attribute' is set to 'true'
-#   separator = "/"
-#
-#   ## Set measurement name as Riemann attribute 'measurement', instead of prepending it to the Riemann service name
-#   # measurement_as_attribute = false
-#
-#   ## Send string metrics as Riemann event states.
-#   ## Unless enabled all string metrics will be ignored
-#   # string_as_state = false
-#
-#   ## A list of tag keys whose values get sent as Riemann tags.
-#   ## If empty, all Telegraf tag values will be sent as tags
-#   # tag_keys = ["telegraf","custom_tag"]
-#
-#   ## Additional Riemann tags to send.
-#   # tags = ["telegraf-output"]
-#
-#   ## Description for Riemann event
-#   # description_text = "metrics collected from telegraf"
-#
-#   ## Riemann client write timeout, defaults to "5s" if not set.
-#   # timeout = "5s"
-
-
-# # Configuration for the Riemann server to send metrics to
-# [[outputs.riemann_legacy]]
-#   ## URL of server
-#   url = "localhost:5555"
-#   ## transport protocol to use either tcp or udp
-#   transport = "tcp"
-#   ## separator to use between input name and field name in Riemann service name
-#   separator = " "
-
-
-# # Generic socket writer capable of handling multiple socket types.
-# [[outputs.socket_writer]]
-#   ## URL to connect to
-#   # address = "tcp://127.0.0.1:8094"
-#   # address = "tcp://example.com:http"
-#   # address = "tcp4://127.0.0.1:8094"
-#   # address = "tcp6://127.0.0.1:8094"
-#   # address = "tcp6://[2001:db8::1]:8094"
-#   # address = "udp://127.0.0.1:8094"
-#   # address = "udp4://127.0.0.1:8094"
-#   # address = "udp6://127.0.0.1:8094"
-#   # address = "unix:///tmp/telegraf.sock"
-#   # address = "unixgram:///tmp/telegraf.sock"
-#
-#   ## Period between keep alive probes.
-#   ## Only applies to TCP sockets.
-#   ## 0 disables keep alive probes.
-#   ## Defaults to the OS configuration.
-#   # keep_alive_period = "5m"
-#
-#   ## Data format to generate.
-#   ## Each data format has its own unique set of configuration options, read
-#   ## more about them here:
-#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md
-#   # data_format = "influx"
-
-
-
-###############################################################################
-#                            PROCESSOR PLUGINS                                #
-###############################################################################
-
-# # Print all metrics that pass through this filter.
-# [[processors.printer]]
-
-
-
-###############################################################################
-#                            AGGREGATOR PLUGINS                               #
-###############################################################################
-
-# # Keep the aggregate min/max of each metric passing through.
-# [[aggregators.minmax]]
-#   ## General Aggregator Arguments:
-#   ## The period on which to flush & clear the aggregator.
-#   period = "30s"
-#   ## If true, the original metric will be dropped by the
-#   ## aggregator and will not get sent to the output plugins.
-#   drop_original = false
-
-
-
-###############################################################################
-#                            INPUT PLUGINS                                    #
-###############################################################################
-
-# Read metrics about cpu usage
-[[inputs.cpu]]
-  ## Whether to report per-cpu stats or not
-  percpu = true
-  ## Whether to report total system cpu stats or not
-  totalcpu = true
-  ## If true, collect raw CPU time metrics.
-  collect_cpu_time = false
-
-
-# Read metrics about disk usage by mount point
-[[inputs.disk]]
-  ## By default, telegraf gather stats for all mountpoints.
-  ## Setting mountpoints will restrict the stats to the specified mountpoints.
-  # mount_points = ["/"]
-
-  ## Ignore some mountpoints by filesystem type. For example (dev)tmpfs (usually
-  ## present on /run, /var/run, /dev/shm or /dev).
-  ignore_fs = ["tmpfs", "devtmpfs", "devfs"]
-
-
-# Read metrics about disk IO by device
-[[inputs.diskio]]
-  ## By default, telegraf will gather stats for all devices including
-  ## disk partitions.
-  ## Setting devices will restrict the stats to the specified devices.
-  # devices = ["sda", "sdb"]
-  ## Uncomment the following line if you need disk serial numbers.
-  # skip_serial_number = false
-  #
-  ## On systems which support it, device metadata can be added in the form of
-  ## tags.
-  ## Currently only Linux is supported via udev properties. You can view
-  ## available properties for a device by running:
-  ## 'udevadm info -q property -n /dev/sda'
-  # device_tags = ["ID_FS_TYPE", "ID_FS_USAGE"]
-  #
-  ## Using the same metadata source as device_tags, you can also customize the
-  ## name of the device via templates.
-  ## The 'name_templates' parameter is a list of templates to try and apply to
-  ## the device. The template may contain variables in the form of '$PROPERTY' or
-  ## '${PROPERTY}'. The first template which does not contain any variables not
-  ## present for the device is used as the device name tag.
-  ## The typical use case is for LVM volumes, to get the VG/LV name instead of
-  ## the near-meaningless DM-0 name.
-  # name_templates = ["$ID_FS_LABEL","$DM_VG_NAME/$DM_LV_NAME"]
-
-
-# Get kernel statistics from /proc/stat
-[[inputs.kernel]]
-  # no configuration
-
-
-# Read metrics about memory usage
-[[inputs.mem]]
-  # no configuration
-
-
-# Get the number of processes and group them by status
-[[inputs.processes]]
-  # no configuration
-
-
-# Read metrics about swap memory usage
-[[inputs.swap]]
-  # no configuration
-
-
-# Read metrics about system load & uptime
-[[inputs.system]]
-  # no configuration
-
-
-# # Read stats from aerospike server(s)
-# [[inputs.aerospike]]
-#   ## Aerospike servers to connect to (with port)
-#   ## This plugin will query all namespaces the aerospike
-#   ## server has configured and get stats for them.
-#   servers = ["localhost:3000"]
-
-
-# # Read Apache status information (mod_status)
-# [[inputs.apache]]
-#   ## An array of Apache status URI to gather stats.
-#   ## Default is "http://localhost/server-status?auto".
-#   urls = ["http://localhost/server-status?auto"]
-#   ## user credentials for basic HTTP authentication
-#   username = "myuser"
-#   password = "mypassword"
-#
-#   ## Timeout to the complete conection and reponse time in seconds
-#   response_timeout = "25s" ## default to 5 seconds
-#
-#   ## Optional SSL Config
-#   # ssl_ca = "/etc/telegraf/ca.pem"
-#   # ssl_cert = "/etc/telegraf/cert.pem"
-#   # ssl_key = "/etc/telegraf/key.pem"
-#   ## Use SSL but skip chain & host verification
-#   # insecure_skip_verify = false
-
-
-# # Read metrics of bcache from stats_total and dirty_data
-# [[inputs.bcache]]
-#   ## Bcache sets path
-#   ## If not specified, then default is:
-#   bcachePath = "/sys/fs/bcache"
-#
-#   ## By default, telegraf gather stats for all bcache devices
-#   ## Setting devices will restrict the stats to the specified
-#   ## bcache devices.
-#   bcacheDevs = ["bcache0"]
-
-
-# # Read Cassandra metrics through Jolokia
-# [[inputs.cassandra]]
-#   # This is the context root used to compose the jolokia url
-#   context = "/jolokia/read"
-#   ## List of cassandra servers exposing jolokia read service
-#   servers = ["myuser:mypassword@10.10.10.1:8778","10.10.10.2:8778",":8778"]
-#   ## List of metrics collected on above servers
-#   ## Each metric consists of a jmx path.
-#   ## This will collect all heap memory usage metrics from the jvm and
-#   ## ReadLatency metrics for all keyspaces and tables.
-#   ## "type=Table" in the query works with Cassandra3.0. Older versions might
-#   ## need to use "type=ColumnFamily"
-#   metrics  = [
-#     "/java.lang:type=Memory/HeapMemoryUsage",
-#     "/org.apache.cassandra.metrics:type=Table,keyspace=*,scope=*,name=ReadLatency"
-#   ]
-
-
-# # Collects performance metrics from the MON and OSD nodes in a Ceph storage cluster.
-# [[inputs.ceph]]
-#   ## This is the recommended interval to poll.  Too frequent and you will lose
-#   ## data points due to timeouts during rebalancing and recovery
-#   interval = '1m'
-#
-#   ## All configuration values are optional, defaults are shown below
-#
-#   ## location of ceph binary
-#   ceph_binary = "/usr/bin/ceph"
-#
-#   ## directory in which to look for socket files
-#   socket_dir = "/var/run/ceph"
-#
-#   ## prefix of MON and OSD socket files, used to determine socket type
-#   mon_prefix = "ceph-mon"
-#   osd_prefix = "ceph-osd"
-#
-#   ## suffix used to identify socket files
-#   socket_suffix = "asok"
-#
-#   ## Ceph user to authenticate as
-#   ceph_user = "client.admin"
-#
-#   ## Ceph configuration to use to locate the cluster
-#   ceph_config = "/etc/ceph/ceph.conf"
-#
-#   ## Whether to gather statistics via the admin socket
-#   gather_admin_socket_stats = true
-#
-#   ## Whether to gather statistics via ceph commands
-#   gather_cluster_stats = false
-
-
-# # Read specific statistics per cgroup
-# [[inputs.cgroup]]
-#   ## Directories in which to look for files, globs are supported.
-#   ## Consider restricting paths to the set of cgroups you really
-#   ## want to monitor if you have a large number of cgroups, to avoid
-#   ## any cardinality issues.
-#   # paths = [
-#   #   "/cgroup/memory",
-#   #   "/cgroup/memory/child1",
-#   #   "/cgroup/memory/child2/*",
-#   # ]
-#   ## cgroup stat fields, as file names, globs are supported.
-#   ## these file names are appended to each path from above.
-#   # files = ["memory.*usage*", "memory.limit_in_bytes"]
-
-
-# # Get standard chrony metrics, requires chronyc executable.
-# [[inputs.chrony]]
-#   ## If true, chronyc tries to perform a DNS lookup for the time server.
-#   # dns_lookup = false
-
-
-# # Pull Metric Statistics from Amazon CloudWatch
-# [[inputs.cloudwatch]]
-#   ## Amazon Region
-#   region = "us-east-1"
-#
-#   ## Amazon Credentials
-#   ## Credentials are loaded in the following order
-#   ## 1) Assumed credentials via STS if role_arn is specified
-#   ## 2) explicit credentials from 'access_key' and 'secret_key'
-#   ## 3) shared profile from 'profile'
-#   ## 4) environment variables
-#   ## 5) shared credentials file
-#   ## 6) EC2 Instance Profile
-#   #access_key = ""
-#   #secret_key = ""
-#   #token = ""
-#   #role_arn = ""
-#   #profile = ""
-#   #shared_credential_file = ""
-#
-#   # The minimum period for Cloudwatch metrics is 1 minute (60s). However not all
-#   # metrics are made available to the 1 minute period. Some are collected at
-#   # 3 minute and 5 minutes intervals. See https://aws.amazon.com/cloudwatch/faqs/#monitoring.
-#   # Note that if a period is configured that is smaller than the minimum for a
-#   # particular metric, that metric will not be returned by the Cloudwatch API
-#   # and will not be collected by Telegraf.
-#   #
-#   ## Requested CloudWatch aggregation Period (required - must be a multiple of 60s)
-#   period = "5m"
-#
-#   ## Collection Delay (required - must account for metrics availability via CloudWatch API)
-#   delay = "5m"
-#
-#   ## Recomended: use metric 'interval' that is a multiple of 'period' to avoid
-#   ## gaps or overlap in pulled data
-#   interval = "5m"
-#
-#   ## Configure the TTL for the internal cache of metrics.
-#   ## Defaults to 1 hr if not specified
-#   #cache_ttl = "10m"
-#
-#   ## Metric Statistic Namespace (required)
-#   namespace = "AWS/ELB"
-#
-#   ## Maximum requests per second. Note that the global default AWS rate limit is
-#   ## 400 reqs/sec, so if you define multiple namespaces, these should add up to a
-#   ## maximum of 400. Optional - default value is 200.
-#   ## See http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_limits.html
-#   ratelimit = 200
-#
-#   ## Metrics to Pull (optional)
-#   ## Defaults to all Metrics in Namespace if nothing is provided
-#   ## Refreshes Namespace available metrics every 1h
-#   #[[inputs.cloudwatch.metrics]]
-#   #  names = ["Latency", "RequestCount"]
-#   #
-#   #  ## Dimension filters for Metric (optional)
-#   #  [[inputs.cloudwatch.metrics.dimensions]]
-#   #    name = "LoadBalancerName"
-#   #    value = "p-example"
-
-
-# # Collects conntrack stats from the configured directories and files.
-# [[inputs.conntrack]]
-#    ## The following defaults would work with multiple versions of conntrack.
-#    ## Note the nf_ and ip_ filename prefixes are mutually exclusive across
-#    ## kernel versions, as are the directory locations.
-#
-#    ## Superset of filenames to look for within the conntrack dirs.
-#    ## Missing files will be ignored.
-#    files = ["ip_conntrack_count","ip_conntrack_max",
-#             "nf_conntrack_count","nf_conntrack_max"]
-#
-#    ## Directories to search within for the conntrack files above.
-#    ## Missing directrories will be ignored.
-#    dirs = ["/proc/sys/net/ipv4/netfilter","/proc/sys/net/netfilter"]
-
-
-# # Gather health check statuses from services registered in Consul
-# [[inputs.consul]]
-#   ## Most of these values defaults to the one configured on a Consul's agent level.
-#   ## Optional Consul server address (default: "localhost")
-#   # address = "localhost"
-#   ## Optional URI scheme for the Consul server (default: "http")
-#   # scheme = "http"
-#   ## Optional ACL token used in every request (default: "")
-#   # token = ""
-#   ## Optional username used for request HTTP Basic Authentication (default: "")
-#   # username = ""
-#   ## Optional password used for HTTP Basic Authentication (default: "")
-#   # password = ""
-#   ## Optional data centre to query the health checks from (default: "")
-#   # datacentre = ""
-
-
-# # Read metrics from one or many couchbase clusters
-# [[inputs.couchbase]]
-#   ## specify servers via a url matching:
-#   ##  [protocol://][:password]@address[:port]
-#   ##  e.g.
-#   ##    http://couchbase-0.example.com/
-#   ##    http://admin:secret@couchbase-0.example.com:8091/
-#   ##
-#   ## If no servers are specified, then localhost is used as the host.
-#   ## If no protocol is specifed, HTTP is used.
-#   ## If no port is specified, 8091 is used.
-#   servers = ["http://localhost:8091"]
-
-
-# # Read CouchDB Stats from one or more servers
-# [[inputs.couchdb]]
-#   ## Works with CouchDB stats endpoints out of the box
-#   ## Multiple HOSTs from which to read CouchDB stats:
-#   hosts = ["http://localhost:8086/_stats"]
-
-
-# # Read metrics from one or many disque servers
-# [[inputs.disque]]
-#   ## An array of URI to gather stats about. Specify an ip or hostname
-#   ## with optional port and password.
-#   ## ie disque://localhost, disque://10.10.3.33:18832, 10.0.0.1:10000, etc.
-#   ## If no servers are specified, then localhost is used as the host.
-#   servers = ["localhost"]
-
-
-# # Provide a native collection for dmsetup based statistics for dm-cache
-# [[inputs.dmcache]]
-#   ## Whether to report per-device stats or not
-#   per_device = true
-
-
-# # Query given DNS server and gives statistics
-# [[inputs.dns_query]]
-#   ## servers to query
-#   servers = ["8.8.8.8"] # required
-#
-#   ## Domains or subdomains to query. "."(root) is default
-#   domains = ["."] # optional
-#
-#   ## Query record type. Default is "A"
-#   ## Posible values: A, AAAA, CNAME, MX, NS, PTR, TXT, SOA, SPF, SRV.
-#   record_type = "A" # optional
-#
-#   ## Dns server port. 53 is default
-#   port = 53 # optional
-#
-#   ## Query timeout in seconds. Default is 2 seconds
-#   timeout = 2 # optional
-
-
-# # Read metrics about docker containers
-# [[inputs.docker]]
-#   ## Docker Endpoint
-#   ##   To use TCP, set endpoint = "tcp://[ip]:[port]"
-#   ##   To use environment variables (ie, docker-machine), set endpoint = "ENV"
-#  endpoint = "unix:///var/run/docker.sock"
-#   ## Only collect metrics for these containers, collect all if empty
-#  container_names = []
-#   ## Timeout for docker list, info, and stats commands
-#  timeout = "5s"
-#
-#   ## Whether to report for each container per-device blkio (8:0, 8:1...) and
-#   ## network (eth0, eth1, ...) stats or not
-#   perdevice = true
-#   ## Whether to report for each container total blkio and network stats or not
-#  total = false
-#
-#   ## docker labels to include and exclude as tags.  Globs accepted.
-#   ## Note that an empty array for both will include all labels as tags
-#   docker_label_include = []
-#   docker_label_exclude = []
-
-
-# # Read statistics from one or many dovecot servers
-# [[inputs.dovecot]]
-#   ## specify dovecot servers via an address:port list
-#   ##  e.g.
-#   ##    localhost:24242
-#   ##
-#   ## If no servers are specified, then localhost is used as the host.
-#   servers = ["localhost:24242"]
-#   ## Type is one of "user", "domain", "ip", or "global"
-#   type = "global"
-#   ## Wildcard matches like "*.com". An empty string "" is same as "*"
-#   ## If type = "ip" filters should be <IP/network>
-#   filters = [""]
-
-
-# # Read stats from one or more Elasticsearch servers or clusters
-# [[inputs.elasticsearch]]
-#   ## specify a list of one or more Elasticsearch servers
-#   # you can add username and password to your url to use basic authentication:
-#   # servers = ["http://user:pass@localhost:9200"]
-#   servers = ["http://localhost:9200"]
-#
-#   ## Timeout for HTTP requests to the elastic search server(s)
-#   http_timeout = "5s"
-#
-#   ## When local is true (the default), the node will read only its own stats.
-#   ## Set local to false when you want to read the node stats from all nodes
-#   ## of the cluster.
-#   local = true
-#
-#   ## Set cluster_health to true when you want to also obtain cluster health stats
-#   cluster_health = false
-#
-#   ## Set cluster_stats to true when you want to also obtain cluster stats from the
-#   ## Master node.
-#   cluster_stats = false
-#
-#   ## Optional SSL Config
-#   # ssl_ca = "/etc/telegraf/ca.pem"
-#   # ssl_cert = "/etc/telegraf/cert.pem"
-#   # ssl_key = "/etc/telegraf/key.pem"
-#   ## Use SSL but skip chain & host verification
-#   # insecure_skip_verify = false
-
-
-# # Read metrics from one or more commands that can output to stdout
-# [[inputs.exec]]
-#   ## Commands array
-#   commands = [
-#     "/tmp/test.sh",
-#     "/usr/bin/mycollector --foo=bar",
-#     "/tmp/collect_*.sh"
-#   ]
-#
-#   ## Timeout for each command to complete.
-#   timeout = "5s"
-#
-#   ## measurement name suffix (for separating different commands)
-#   name_suffix = "_mycollector"
-#
-#   ## Data format to consume.
-#   ## Each data format has its own unique set of configuration options, read
-#   ## more about them here:
-#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md
-#   data_format = "influx"
-
-
-# # Read stats about given file(s)
-# [[inputs.filestat]]
-#   ## Files to gather stats about.
-#   ## These accept standard unix glob matching rules, but with the addition of
-#   ## ** as a "super asterisk". ie:
-#   ##   "/var/log/**.log"  -> recursively find all .log files in /var/log
-#   ##   "/var/log/*/*.log" -> find all .log files with a parent dir in /var/log
-#   ##   "/var/log/apache.log" -> just tail the apache log file
-#   ##
-#   ## See https://github.com/gobwas/glob for more examples
-#   ##
-#   files = ["/var/log/**.log"]
-#   ## If true, read the entire file and calculate an md5 checksum.
-#   md5 = false
-
-
-# # Read flattened metrics from one or more GrayLog HTTP endpoints
-# [[inputs.graylog]]
-#   ## API endpoint, currently supported API:
-#   ##
-#   ##   - multiple  (Ex http://<host>:12900/system/metrics/multiple)
-#   ##   - namespace (Ex http://<host>:12900/system/metrics/namespace/{namespace})
-#   ##
-#   ## For namespace endpoint, the metrics array will be ignored for that call.
-#   ## Endpoint can contain namespace and multiple type calls.
-#   ##
-#   ## Please check http://[graylog-server-ip]:12900/api-browser for full list
-#   ## of endpoints
-#   servers = [
-#     "http://[graylog-server-ip]:12900/system/metrics/multiple",
-#   ]
-#
-#   ## Metrics list
-#   ## List of metrics can be found on Graylog webservice documentation.
-#   ## Or by hitting the the web service api at:
-#   ##   http://[graylog-host]:12900/system/metrics
-#   metrics = [
-#     "jvm.cl.loaded",
-#     "jvm.memory.pools.Metaspace.committed"
-#   ]
-#
-#   ## Username and password
-#   username = ""
-#   password = ""
-#
-#   ## Optional SSL Config
-#   # ssl_ca = "/etc/telegraf/ca.pem"
-#   # ssl_cert = "/etc/telegraf/cert.pem"
-#   # ssl_key = "/etc/telegraf/key.pem"
-#   ## Use SSL but skip chain & host verification
-#   # insecure_skip_verify = false
-
-
-# # Read metrics of haproxy, via socket or csv stats page
-# [[inputs.haproxy]]
-#   ## An array of address to gather stats about. Specify an ip on hostname
-#   ## with optional port. ie localhost, 10.10.3.33:1936, etc.
-#   ## Make sure you specify the complete path to the stats endpoint
-#   ## including the protocol, ie http://10.10.3.33:1936/haproxy?stats
-#
-#   ## If no servers are specified, then default to 127.0.0.1:1936/haproxy?stats
-#   servers = ["http://myhaproxy.com:1936/haproxy?stats"]
-#
-#   ## You can also use local socket with standard wildcard globbing.
-#   ## Server address not starting with 'http' will be treated as a possible
-#   ## socket, so both examples below are valid.
-#   # servers = ["socket:/run/haproxy/admin.sock", "/run/haproxy/*.sock"]
-#
-#   ## By default, some of the fields are renamed from what haproxy calls them.
-#   ## Setting this option to true results in the plugin keeping the original
-#   ## field names.
-#   # keep_field_names = true
-#
-#   ## Optional SSL Config
-#   # ssl_ca = "/etc/telegraf/ca.pem"
-#   # ssl_cert = "/etc/telegraf/cert.pem"
-#   # ssl_key = "/etc/telegraf/key.pem"
-#   ## Use SSL but skip chain & host verification
-#   # insecure_skip_verify = false
-
-
-# # Monitor disks' temperatures using hddtemp
-# [[inputs.hddtemp]]
-#   ## By default, telegraf gathers temps data from all disks detected by the
-#   ## hddtemp.
-#   ##
-#   ## Only collect temps from the selected disks.
-#   ##
-#   ## A * as the device name will return the temperature values of all disks.
-#   ##
-#   # address = "127.0.0.1:7634"
-#   # devices = ["sda", "*"]
-
-
-# # HTTP/HTTPS request given an address a method and a timeout
-[[inputs.http_response]]
-#   ## Server address (default http://localhost) Sock Shop Front End
-  #address = "http://sockshop.sockshop:10080/index.html" 
-  address = "http://sockshop:18082/customers" 
-#   ## Set response_timeout (default 5 seconds)
-  response_timeout = "5s"
-#   ## HTTP Request Method
-  method = "GET"
-#   ## Whether to follow redirects from the server (defaults to false)
-  follow_redirects = true
-#   ## HTTP Request Headers (all values must be strings)
-#   # [inputs.http_response.headers]
-#   #   Host = "github.com"
-#   ## Optional HTTP Request Body
-#   # body = '''
-#   # {'fake':'data'}
-#   # '''
-#
-#   ## Optional substring or regex match in body of the response
-#   ## response_string_match = "\"service_status\": \"up\""
-#   ## response_string_match = "ok"
-#   ## response_string_match = "\".*_status\".?:.?\"up\""
-#
-#   ## Optional SSL Config
-#   # ssl_ca = "/etc/telegraf/ca.pem"
-#   # ssl_cert = "/etc/telegraf/cert.pem"
-#   # ssl_key = "/etc/telegraf/key.pem"
-#   ## Use SSL but skip chain & host verification
-#   # insecure_skip_verify = false
-
-# # HTTP/HTTPS request given an address a method and a timeout
-[[inputs.http_response]]
-#   ## Server address (default http://localhost)Sock Shop Catalogue
-# address = "http://sockshop.sockshop:10080/category.html"
-  address = "http://sockshop:18081/health" 
-#   ## Set response_timeout (default 5 seconds)
-  response_timeout = "5s"
-#   ## HTTP Request Method
-  method = "GET"
-#   ## Whether to follow redirects from the server (defaults to false)
-  follow_redirects = true
-#   ## HTTP Request Headers (all values must be strings)
-#   # [inputs.http_response.headers]
-#   #   Host = "github.com"
-#   ## Optional HTTP Request Body
-#   # body = '''
-#   # {'fake':'data'}
-#   # '''
-#
-#   ## Optional substring or regex match in body of the response
-#   ## response_string_match = "\"service_status\": \"up\""
-#   ## response_string_match = "ok"
-#   ## response_string_match = "\".*_status\".?:.?\"up\""
-#
-#   ## Optional SSL Config
-#   # ssl_ca = "/etc/telegraf/ca.pem"
-#   # ssl_cert = "/etc/telegraf/cert.pem"
-#   # ssl_key = "/etc/telegraf/key.pem"
-#   ## Use SSL but skip chain & host verification
-#   # insecure_skip_verify = false
-
-# # HTTP/HTTPS request given an address a method and a timeout
-[[inputs.http_response]]
-#   ## Server address (default http://localhost)Sock Shop Cart
-  address = "http://sockshop:18083/catalogue"
-#   ## Set response_timeout (default 5 seconds)
-  response_timeout = "5s"
-#   ## HTTP Request Method
-  method = "GET"
-#   ## Whether to follow redirects from the server (defaults to false)
-  follow_redirects = true
-#   ## HTTP Request Headers (all values must be strings)
-#   # [inputs.http_response.headers]
-#   #   Host = "github.com"
-#   ## Optional HTTP Request Body
-#   # body = '''
-#   # {'fake':'data'}
-#   # '''
-#
-#   ## Optional substring or regex match in body of the response
-#   ## response_string_match = "\"service_status\": \"up\""
-#   ## response_string_match = "ok"
-#   ## response_string_match = "\".*_status\".?:.?\"up\""
-#
-#   ## Optional SSL Config
-#   # ssl_ca = "/etc/telegraf/ca.pem"
-#   # ssl_cert = "/etc/telegraf/cert.pem"
-#   # ssl_key = "/etc/telegraf/key.pem"
-#   ## Use SSL but skip chain & host verification
-#   # insecure_skip_verify = false
-
-# # HTTP/HTTPS request given an address a method and a timeout
-[[inputs.http_response]]
-#   ## Server address (default http://localhost)Sock Shop Orders
-  address = "http://sockshop:8079"
-#   ## Set response_timeout (default 5 seconds)
-  response_timeout = "5s"
-#   ## HTTP Request Method
-  method = "GET"
-#   ## Whether to follow redirects from the server (defaults to false)
-  follow_redirects = true
-#   ## HTTP Request Headers (all values must be strings)
-#   # [inputs.http_response.headers]
-#   #   Host = "github.com"
-#   ## Optional HTTP Request Body
-#   # body = '''
-#   # {'fake':'data'}
-#   # '''
-#
-#   ## Optional substring or regex match in body of the response
-#   ## response_string_match = "\"service_status\": \"up\""
-#   ## response_string_match = "ok"
-#   ## response_string_match = "\".*_status\".?:.?\"up\""
-#
-#   ## Optional SSL Config
-#   # ssl_ca = "/etc/telegraf/ca.pem"
-#   # ssl_cert = "/etc/telegraf/cert.pem"
-#   # ssl_key = "/etc/telegraf/key.pem"
-#   ## Use SSL but skip chain & host verification
-#   # insecure_skip_verify = false
-
-
-# # Read flattened metrics from one or more JSON HTTP endpoints
-# [[inputs.httpjson]]
-#   ## NOTE This plugin only reads numerical measurements, strings and booleans
-#   ## will be ignored.
-#
-#   ## Name for the service being polled.  Will be appended to the name of the
-#   ## measurement e.g. httpjson_webserver_stats
-#   ##
-#   ## Deprecated (1.3.0): Use name_override, name_suffix, name_prefix instead.
-#   name = "webserver_stats"
-#
-#   ## URL of each server in the service's cluster
-#   servers = [
-#     "http://localhost:9999/stats/",
-#     "http://localhost:9998/stats/",
-#   ]
-#   ## Set response_timeout (default 5 seconds)
-#   response_timeout = "5s"
-#
-#   ## HTTP method to use: GET or POST (case-sensitive)
-#   method = "GET"
-#
-#   ## List of tag names to extract from top-level of JSON server response
-#   # tag_keys = [
-#   #   "my_tag_1",
-#   #   "my_tag_2"
-#   # ]
-#
-#   ## HTTP parameters (all values must be strings).  For "GET" requests, data
-#   ## will be included in the query.  For "POST" requests, data will be included
-#   ## in the request body as "x-www-form-urlencoded".
-#   # [inputs.httpjson.parameters]
-#   #   event_type = "cpu_spike"
-#   #   threshold = "0.75"
-#
-#   ## HTTP Headers (all values must be strings)
-#   # [inputs.httpjson.headers]
-#   #   X-Auth-Token = "my-xauth-token"
-#   #   apiVersion = "v1"
-#
-#   ## Optional SSL Config
-#   # ssl_ca = "/etc/telegraf/ca.pem"
-#   # ssl_cert = "/etc/telegraf/cert.pem"
-#   # ssl_key = "/etc/telegraf/key.pem"
-#   ## Use SSL but skip chain & host verification
-#   # insecure_skip_verify = false
-
-
-# # Read InfluxDB-formatted JSON metrics from one or more HTTP endpoints
-# [[inputs.influxdb]]
-#   ## Works with InfluxDB debug endpoints out of the box,
-#   ## but other services can use this format too.
-#   ## See the influxdb plugin's README for more details.
-#
-#   ## Multiple URLs from which to read InfluxDB-formatted JSON
-#   ## Default is "http://localhost:8086/debug/vars".
-#   urls = [
-#     "http://localhost:8086/debug/vars"
-#   ]
-#
-#   ## http request & header timeout
-#   timeout = "5s"
-
-
-# # Collect statistics about itself
-# [[inputs.internal]]
-#   ## If true, collect telegraf memory stats.
-#   # collect_memstats = true
-
-
-# # This plugin gathers interrupts data from /proc/interrupts and /proc/softirqs.
-# [[inputs.interrupts]]
-#   ## To filter which IRQs to collect, make use of tagpass / tagdrop, i.e.
-#   # [inputs.interrupts.tagdrop]
-#     # irq = [ "NET_RX", "TASKLET" ]
-
-
-# # Read metrics from the bare metal servers via IPMI
-# [[inputs.ipmi_sensor]]
-#   ## optionally specify the path to the ipmitool executable
-#   # path = "/usr/bin/ipmitool"
-#   #
-#   ## optionally specify one or more servers via a url matching
-#   ##  [username[:password]@][protocol[(address)]]
-#   ##  e.g.
-#   ##    root:passwd@lan(127.0.0.1)
-#   ##
-#   ## if no servers are specified, local machine sensor stats will be queried
-#   ##
-#   # servers = ["USERID:PASSW0RD@lan(192.168.1.1)"]
-
-
-# # Gather packets and bytes throughput from iptables
-# [[inputs.iptables]]
-#   ## iptables require root access on most systems.
-#   ## Setting 'use_sudo' to true will make use of sudo to run iptables.
-#   ## Users must configure sudo to allow telegraf user to run iptables with no password.
-#   ## iptables can be restricted to only list command "iptables -nvL".
-#   use_sudo = false
-#   ## Setting 'use_lock' to true runs iptables with the "-w" option.
-#   ## Adjust your sudo settings appropriately if using this option ("iptables -wnvl")
-#   use_lock = false
-#   ## defines the table to monitor:
-#   table = "filter"
-#   ## defines the chains to monitor.
-#   ## NOTE: iptables rules without a comment will not be monitored.
-#   ## Read the plugin documentation for more information.
-#   chains = [ "INPUT" ]
-
-
-# # Read JMX metrics through Jolokia
-# [[inputs.jolokia]]
-#   ## This is the context root used to compose the jolokia url
-#   ## NOTE that Jolokia requires a trailing slash at the end of the context root
-#   ## NOTE that your jolokia security policy must allow for POST requests.
-#   context = "/jolokia/"
-#
-#   ## This specifies the mode used
-#   # mode = "proxy"
-#   #
-#   ## When in proxy mode this section is used to specify further
-#   ## proxy address configurations.
-#   ## Remember to change host address to fit your environment.
-#   # [inputs.jolokia.proxy]
-#   #   host = "127.0.0.1"
-#   #   port = "8080"
-#
-#   ## Optional http timeouts
-#   ##
-#   ## response_header_timeout, if non-zero, specifies the amount of time to wait
-#   ## for a server's response headers after fully writing the request.
-#   # response_header_timeout = "3s"
-#   ##
-#   ## client_timeout specifies a time limit for requests made by this client.
-#   ## Includes connection time, any redirects, and reading the response body.
-#   # client_timeout = "4s"
-#
-#   ## Attribute delimiter
-#   ##
-#   ## When multiple attributes are returned for a single
-#   ## [inputs.jolokia.metrics], the field name is a concatenation of the metric
-#   ## name, and the attribute name, separated by the given delimiter.
-#   # delimiter = "_"
-#
-#   ## List of servers exposing jolokia read service
-#   [[inputs.jolokia.servers]]
-#     name = "as-server-01"
-#     host = "127.0.0.1"
-#     port = "8080"
-#     # username = "myuser"
-#     # password = "mypassword"
-#
-#   ## List of metrics collected on above servers
-#   ## Each metric consists in a name, a jmx path and either
-#   ## a pass or drop slice attribute.
-#   ## This collect all heap memory usage metrics.
-#   [[inputs.jolokia.metrics]]
-#     name = "heap_memory_usage"
-#     mbean  = "java.lang:type=Memory"
-#     attribute = "HeapMemoryUsage"
-#
-#   ## This collect thread counts metrics.
-#   [[inputs.jolokia.metrics]]
-#     name = "thread_count"
-#     mbean  = "java.lang:type=Threading"
-#     attribute = "TotalStartedThreadCount,ThreadCount,DaemonThreadCount,PeakThreadCount"
-#
-#   ## This collect number of class loaded/unloaded counts metrics.
-#   [[inputs.jolokia.metrics]]
-#     name = "class_count"
-#     mbean  = "java.lang:type=ClassLoading"
-#     attribute = "LoadedClassCount,UnloadedClassCount,TotalLoadedClassCount"
-
-
-# # Read Kapacitor-formatted JSON metrics from one or more HTTP endpoints
-# [[inputs.kapacitor]]
-#   ## Multiple URLs from which to read Kapacitor-formatted JSON
-#   ## Default is "http://localhost:9092/kapacitor/v1/debug/vars".
-#   urls = [
-#     "http://localhost:9092/kapacitor/v1/debug/vars"
-#   ]
-#
-#   ## Time limit for http requests
-#   timeout = "5s"
-
-
-# # Get kernel statistics from /proc/vmstat
-# [[inputs.kernel_vmstat]]
-#   # no configuration
-
-
-# # Read metrics from the kubernetes kubelet api
-# [[inputs.kubernetes]]
-#   ## URL for the kubelet
-#   url = "http://1.1.1.1:10255"
-#
-#   ## Use bearer token for authorization
-#   # bearer_token = /path/to/bearer/token
-#
-#   ## Optional SSL Config
-#   # ssl_ca = /path/to/cafile
-#   # ssl_cert = /path/to/certfile
-#   # ssl_key = /path/to/keyfile
-#   ## Use SSL but skip chain & host verification
-#   # insecure_skip_verify = false
-
-
-# # Read metrics from a LeoFS Server via SNMP
-# [[inputs.leofs]]
-#   ## An array of URI to gather stats about LeoFS.
-#   ## Specify an ip or hostname with port. ie 127.0.0.1:4020
-#   servers = ["127.0.0.1:4021"]
-
-
-# # Provides Linux sysctl fs metrics
-# [[inputs.linux_sysctl_fs]]
-#   # no configuration
-
-
-# # Read metrics from local Lustre service on OST, MDS
-# [[inputs.lustre2]]
-#   ## An array of /proc globs to search for Lustre stats
-#   ## If not specified, the default will work on Lustre 2.5.x
-#   ##
-#   # ost_procfiles = [
-#   #   "/proc/fs/lustre/obdfilter/*/stats",
-#   #   "/proc/fs/lustre/osd-ldiskfs/*/stats",
-#   #   "/proc/fs/lustre/obdfilter/*/job_stats",
-#   # ]
-#   # mds_procfiles = [
-#   #   "/proc/fs/lustre/mdt/*/md_stats",
-#   #   "/proc/fs/lustre/mdt/*/job_stats",
-#   # ]
-
-
-# # Gathers metrics from the /3.0/reports MailChimp API
-# [[inputs.mailchimp]]
-#   ## MailChimp API key
-#   ## get from https://admin.mailchimp.com/account/api/
-#   api_key = "" # required
-#   ## Reports for campaigns sent more than days_old ago will not be collected.
-#   ## 0 means collect all.
-#   days_old = 0
-#   ## Campaign ID to get, if empty gets all campaigns, this option overrides days_old
-#   # campaign_id = ""
-
-
-# # Read metrics from one or many memcached servers
-# [[inputs.memcached]]
-#   ## An array of address to gather stats about. Specify an ip on hostname
-#   ## with optional port. ie localhost, 10.0.0.1:11211, etc.
-#   servers = ["localhost:11211"]
-#   # unix_sockets = ["/var/run/memcached.sock"]
-
-
-# # Telegraf plugin for gathering metrics from N Mesos masters
-# [[inputs.mesos]]
-#   ## Timeout, in ms.
-#   timeout = 100
-#   ## A list of Mesos masters.
-#   masters = ["localhost:5050"]
-#   ## Master metrics groups to be collected, by default, all enabled.
-#   master_collections = [
-#     "resources",
-#     "master",
-#     "system",
-#     "agents",
-#     "frameworks",
-#     "tasks",
-#     "messages",
-#     "evqueue",
-#     "registrar",
-#   ]
-#   ## A list of Mesos slaves, default is []
-#   # slaves = []
-#   ## Slave metrics groups to be collected, by default, all enabled.
-#   # slave_collections = [
-#   #   "resources",
-#   #   "agent",
-#   #   "system",
-#   #   "executors",
-#   #   "tasks",
-#   #   "messages",
-#   # ]
-
-
-# # Read metrics from one or many MongoDB servers
- [[inputs.mongodb]]
-#   ## An array of URI to gather stats about. Specify an ip or hostname
-#   ## with optional port add password. ie,
-#   ##   mongodb://user:auth_key@10.10.3.30:27017,
-#   ##   mongodb://10.10.3.33:18832,
-#   ##   10.0.0.1:10000, etc.
-#   servers = ["127.0.0.1:27017"]
-servers = ["mongodb://sockshop:27020","mongodb://sockshop:27018","mongodb://sockshop:27019"]
-#   gather_perdb_stats = false
-#
-#   ## Optional SSL Config
-#   # ssl_ca = "/etc/telegraf/ca.pem"
-#   # ssl_cert = "/etc/telegraf/cert.pem"
-#   # ssl_key = "/etc/telegraf/key.pem"
-#   ## Use SSL but skip chain & host verification
-#   # insecure_skip_verify = false
-
-
-# # Read metrics from one or many mysql servers
- [[inputs.mysql]]
-#   ## specify servers via a url matching:
-#   ##  [username[:password]@][protocol[(address)]]/[?tls=[true|false|skip-verify]]
-#   ##  see https://github.com/go-sql-driver/mysql#dsn-data-source-name
-#   ##  e.g.
-#   ##    servers = ["user:passwd@tcp(127.0.0.1:3306)/?tls=false"]
-#   ##    servers = ["user@tcp(127.0.0.1:3306)/?tls=false"]
-servers = ["root@tcp(sockshop:3308)/?tls=false"]
-#   #
-#   ## If no servers are specified, then localhost is used as the host.
-#   servers = ["tcp(127.0.0.1:3306)/"]
-#   ## the limits for metrics form perf_events_statements
-#   perf_events_statements_digest_text_limit  = 120
-#   perf_events_statements_limit              = 250
-#   perf_events_statements_time_limit         = 86400
-#   #
-#   ## if the list is empty, then metrics are gathered from all databasee tables
-#   table_schema_databases                    = []
-#   #
-#   ## gather metrics from INFORMATION_SCHEMA.TABLES for databases provided above list
-#   gather_table_schema                       = false
-#   #
-#   ## gather thread state counts from INFORMATION_SCHEMA.PROCESSLIST
-#   gather_process_list                       = true
-#   #
-#   ## gather thread state counts from INFORMATION_SCHEMA.USER_STATISTICS
-#   gather_user_statistics                    = true
-#   #
-#   ## gather auto_increment columns and max values from information schema
-#   gather_info_schema_auto_inc               = true
-#   #
-#   ## gather metrics from INFORMATION_SCHEMA.INNODB_METRICS
-#   gather_innodb_metrics                     = true
-#   #
-#   ## gather metrics from SHOW SLAVE STATUS command output
-#   gather_slave_status                       = true
-#   #
-#   ## gather metrics from SHOW BINARY LOGS command output
-#   gather_binary_logs                        = false
-#   #
-#   ## gather metrics from PERFORMANCE_SCHEMA.TABLE_IO_WAITS_SUMMARY_BY_TABLE
-#   gather_table_io_waits                     = false
-#   #
-#   ## gather metrics from PERFORMANCE_SCHEMA.TABLE_LOCK_WAITS
-#   gather_table_lock_waits                   = false
-#   #
-#   ## gather metrics from PERFORMANCE_SCHEMA.TABLE_IO_WAITS_SUMMARY_BY_INDEX_USAGE
-#   gather_index_io_waits                     = false
-#   #
-#   ## gather metrics from PERFORMANCE_SCHEMA.EVENT_WAITS
-#   gather_event_waits                        = false
-#   #
-#   ## gather metrics from PERFORMANCE_SCHEMA.FILE_SUMMARY_BY_EVENT_NAME
-#   gather_file_events_stats                  = false
-#   #
-#   ## gather metrics from PERFORMANCE_SCHEMA.EVENTS_STATEMENTS_SUMMARY_BY_DIGEST
-#   gather_perf_events_statements             = false
-#   #
-#   ## Some queries we may want to run less often (such as SHOW GLOBAL VARIABLES)
-#   interval_slow                   = "30m"
-
-
-# # Read metrics about network interface usage
-[[inputs.net]]
-#   ## By default, telegraf gathers stats from any up interface (excluding loopback)
-#   ## Setting interfaces will tell it to gather these explicit interfaces,
-#   ## regardless of status.
-#   ##
-#   # interfaces = ["eth0"]
-
-
-# # TCP or UDP 'ping' given url and collect response time in seconds
-# [[inputs.net_response]]
-#   ## Protocol, must be "tcp" or "udp"
-#   ## NOTE: because the "udp" protocol does not respond to requests, it requires
-#   ## a send/expect string pair (see below).
-#   protocol = "tcp"
-#   ## Server address (default localhost)
-#   address = "localhost:80"
-#   ## Set timeout
-#   timeout = "1s"
-#
-#   ## Set read timeout (only used if expecting a response)
-#   read_timeout = "1s"
-#
-#   ## The following options are required for UDP checks. For TCP, they are
-#   ## optional. The plugin will send the given string to the server and then
-#   ## expect to receive the given 'expect' string back.
-#   ## string sent to the server
-#   # send = "ssh"
-#   ## expected string in answer
-#   # expect = "ssh"
-
-
-# # Read TCP metrics such as established, time wait and sockets counts.
-# [[inputs.netstat]]
-#   # no configuration
-
-
-# # Read Nginx's basic status information (ngx_http_stub_status_module)
-# [[inputs.nginx]]
-#   ## An array of Nginx stub_status URI to gather stats.
-#   urls = ["http://localhost/status"]
-
-
-# # Read NSQ topic and channel statistics.
-# [[inputs.nsq]]
-#   ## An array of NSQD HTTP API endpoints
-#   endpoints = ["http://localhost:4151"]
-
-
-# # Collect kernel snmp counters and network interface statistics
-# [[inputs.nstat]]
-#   ## file paths for proc files. If empty default paths will be used:
-#   ##    /proc/net/netstat, /proc/net/snmp, /proc/net/snmp6
-#   ## These can also be overridden with env variables, see README.
-#   proc_net_netstat = "/proc/net/netstat"
-#   proc_net_snmp = "/proc/net/snmp"
-#   proc_net_snmp6 = "/proc/net/snmp6"
-#   ## dump metrics with 0 values too
-#   dump_zeros       = true
-
-
-# # Get standard NTP query metrics, requires ntpq executable.
-# [[inputs.ntpq]]
-#   ## If false, set the -n ntpq flag. Can reduce metric gather time.
-#   dns_lookup = true
-
-
-# # Read metrics of passenger using passenger-status
-# [[inputs.passenger]]
-#   ## Path of passenger-status.
-#   ##
-#   ## Plugin gather metric via parsing XML output of passenger-status
-#   ## More information about the tool:
-#   ##   https://www.phusionpassenger.com/library/admin/apache/overall_status_report.html
-#   ##
-#   ## If no path is specified, then the plugin simply execute passenger-status
-#   ## hopefully it can be found in your PATH
-#   command = "passenger-status -v --show=xml"
-
-
-# # Read metrics of phpfpm, via HTTP status page or socket
-# [[inputs.phpfpm]]
-#   ## An array of addresses to gather stats about. Specify an ip or hostname
-#   ## with optional port and path
-#   ##
-#   ## Plugin can be configured in three modes (either can be used):
-#   ##   - http: the URL must start with http:// or https://, ie:
-#   ##       "http://localhost/status"
-#   ##       "http://192.168.130.1/status?full"
-#   ##
-#   ##   - unixsocket: path to fpm socket, ie:
-#   ##       "/var/run/php5-fpm.sock"
-#   ##      or using a custom fpm status path:
-#   ##       "/var/run/php5-fpm.sock:fpm-custom-status-path"
-#   ##
-#   ##   - fcgi: the URL must start with fcgi:// or cgi://, and port must be present, ie:
-#   ##       "fcgi://10.0.0.12:9000/status"
-#   ##       "cgi://10.0.10.12:9001/status"
-#   ##
-#   ## Example of multiple gathering from local socket and remove host
-#   ## urls = ["http://192.168.1.20/status", "/tmp/fpm.sock"]
-#   urls = ["http://localhost/status"]
-
-
-# # Ping given url(s) and return statistics
-[[inputs.ping]]
-#   ## NOTE: this plugin forks the ping command. You may need to set capabilities
-#   ## via setcap cap_net_raw+p /bin/ping
-#   #
-#   ## List of urls to ping
-urls = ["sockshop"] 
-# required
-#"http://sockshop:10080/category.html", "http://sockshop:10080/basket.html", #"http://sockshop:10080/customer-orders.html"
-#   ## number of pings to send per collection (ping -c <COUNT>)
-#count = 1
-#   ## interval, in s, at which to ping. 0 == default (ping -i <PING_INTERVAL>)
-#ping_interval = 1.0
-#   ## per-ping timeout, in s. 0 == no timeout (ping -W <TIMEOUT>)
-#timeout = 1.0
-#   ## interface to send ping from (ping -I <INTERFACE>)
-#interface = ""
-
-
-# # Read metrics from one or many postgresql servers
-# [[inputs.postgresql]]
-#   ## specify address via a url matching:
-#   ##   postgres://[pqgotest[:password]]@localhost[/dbname]\
-#   ##       ?sslmode=[disable|verify-ca|verify-full]
-#   ## or a simple string:
-#   ##   host=localhost user=pqotest password=... sslmode=... dbname=app_production
-#   ##
-#   ## All connection parameters are optional.
-#   ##
-#   ## Without the dbname parameter, the driver will default to a database
-#   ## with the same name as the user. This dbname is just for instantiating a
-#   ## connection with the server and doesn't restrict the databases we are trying
-#   ## to grab metrics for.
-#   ##
-#   address = "host=localhost user=postgres sslmode=disable"
-#
-#   ## A  list of databases to explicitly ignore.  If not specified, metrics for all
-#   ## databases are gathered.  Do NOT use with the 'databases' option.
-#   # ignored_databases = ["postgres", "template0", "template1"]
-#
-#   ## A list of databases to pull metrics about. If not specified, metrics for all
-#   ## databases are gathered.  Do NOT use with the 'ignored_databases' option.
-#   # databases = ["app_production", "testing"]
-
-
-# # Read metrics from one or many postgresql servers
-# [[inputs.postgresql_extensible]]
-#   ## specify address via a url matching:
-#   ##   postgres://[pqgotest[:password]]@localhost[/dbname]\
-#   ##       ?sslmode=[disable|verify-ca|verify-full]
-#   ## or a simple string:
-#   ##   host=localhost user=pqotest password=... sslmode=... dbname=app_production
-#   #
-#   ## All connection parameters are optional.  #
-#   ## Without the dbname parameter, the driver will default to a database
-#   ## with the same name as the user. This dbname is just for instantiating a
-#   ## connection with the server and doesn't restrict the databases we are trying
-#   ## to grab metrics for.
-#   #
-#   address = "host=localhost user=postgres sslmode=disable"
-#   ## A list of databases to pull metrics about. If not specified, metrics for all
-#   ## databases are gathered.
-#   ## databases = ["app_production", "testing"]
-#   #
-#   # outputaddress = "db01"
-#   ## A custom name for the database that will be used as the "server" tag in the
-#   ## measurement output. If not specified, a default one generated from
-#   ## the connection address is used.
-#   #
-#   ## Define the toml config where the sql queries are stored
-#   ## New queries can be added, if the withdbname is set to true and there is no
-#   ## databases defined in the 'databases field', the sql query is ended by a
-#   ## 'is not null' in order to make the query succeed.
-#   ## Example :
-#   ## The sqlquery : "SELECT * FROM pg_stat_database where datname" become
-#   ## "SELECT * FROM pg_stat_database where datname IN ('postgres', 'pgbench')"
-#   ## because the databases variable was set to ['postgres', 'pgbench' ] and the
-#   ## withdbname was true. Be careful that if the withdbname is set to false you
-#   ## don't have to define the where clause (aka with the dbname) the tagvalue
-#   ## field is used to define custom tags (separated by commas)
-#   ## The optional "measurement" value can be used to override the default
-#   ## output measurement name ("postgresql").
-#   #
-#   ## Structure :
-#   ## [[inputs.postgresql_extensible.query]]
-#   ##   sqlquery string
-#   ##   version string
-#   ##   withdbname boolean
-#   ##   tagvalue string (comma separated)
-#   ##   measurement string
-#   [[inputs.postgresql_extensible.query]]
-#     sqlquery="SELECT * FROM pg_stat_database"
-#     version=901
-#     withdbname=false
-#     tagvalue=""
-#     measurement=""
-#   [[inputs.postgresql_extensible.query]]
-#     sqlquery="SELECT * FROM pg_stat_bgwriter"
-#     version=901
-#     withdbname=false
-#     tagvalue="postgresql.stats"
-
-
-# # Read metrics from one or many PowerDNS servers
-# [[inputs.powerdns]]
-#   ## An array of sockets to gather stats about.
-#   ## Specify a path to unix socket.
-#   unix_sockets = ["/var/run/pdns.controlsocket"]
-
-
-# # Monitor process cpu and memory usage
-# [[inputs.procstat]]
-#   ## Must specify one of: pid_file, exe, or pattern
-#   ## PID file to monitor process
-#   pid_file = "/var/run/nginx.pid"
-#   ## executable name (ie, pgrep <exe>)
-#   # exe = "nginx"
-#   ## pattern as argument for pgrep (ie, pgrep -f <pattern>)
-#   # pattern = "nginx"
-#   ## user as argument for pgrep (ie, pgrep -u <user>)
-#   # user = "nginx"
-#
-#   ## override for process_name
-#   ## This is optional; default is sourced from /proc/<pid>/status
-#   # process_name = "bar"
-#   ## Field name prefix
-#   prefix = ""
-#   ## comment this out if you want raw cpu_time stats
-#   fielddrop = ["cpu_time_*"]
-#   ## This is optional; moves pid into a tag instead of a field
-#   pid_tag = false
-
-
-# # Read metrics from one or many prometheus clients
-# [[inputs.prometheus]]
-#   ## An array of urls to scrape metrics from.
-#   urls = ["http://localhost:9100/metrics"]
-#
-#   ## Use bearer token for authorization
-#   # bearer_token = /path/to/bearer/token
-#
-#   ## Specify timeout duration for slower prometheus clients (default is 3s)
-#   # response_timeout = "3s"
-#
-#   ## Optional SSL Config
-#   # ssl_ca = /path/to/cafile
-#   # ssl_cert = /path/to/certfile
-#   # ssl_key = /path/to/keyfile
-#   ## Use SSL but skip chain & host verification
-#   # insecure_skip_verify = false
-
-
-# # Reads last_run_summary.yaml file and converts to measurments
-# [[inputs.puppetagent]]
-#   ## Location of puppet last run summary file
-#   location = "/var/lib/puppet/state/last_run_summary.yaml"
-
-
-# # Read metrics from one or many RabbitMQ servers via the management API
-# [[inputs.rabbitmq]]
-#   # url = "http://localhost:15672"
-#   # name = "rmq-server-1" # optional tag
-#   # username = "guest"
-#   # password = "guest"
-#
-#   ## Optional SSL Config
-#   # ssl_ca = "/etc/telegraf/ca.pem"
-#   # ssl_cert = "/etc/telegraf/cert.pem"
-#   # ssl_key = "/etc/telegraf/key.pem"
-#   ## Use SSL but skip chain & host verification
-#   # insecure_skip_verify = false
-#
-#   ## Optional request timeouts
-#   ##
-#   ## ResponseHeaderTimeout, if non-zero, specifies the amount of time to wait
-#   ## for a server's response headers after fully writing the request.
-#   # header_timeout = "3s"
-#   ##
-#   ## client_timeout specifies a time limit for requests made by this client.
-#   ## Includes connection time, any redirects, and reading the response body.
-#   # client_timeout = "4s"
-#
-#   ## A list of nodes to pull metrics about. If not specified, metrics for
-#   ## all nodes are gathered.
-#   # nodes = ["rabbit@node1", "rabbit@node2"]
-
-
-# # Read raindrops stats (raindrops - real-time stats for preforking Rack servers)
-# [[inputs.raindrops]]
-#   ## An array of raindrops middleware URI to gather stats.
-#   urls = ["http://localhost:8080/_raindrops"]
-
-
-# # Read metrics from one or many redis servers
-# [[inputs.redis]]
-#   ## specify servers via a url matching:
-#   ##  [protocol://][:password]@address[:port]
-#   ##  e.g.
-#   ##    tcp://localhost:6379
-#   ##    tcp://:password@192.168.99.100
-#   ##    unix:///var/run/redis.sock
-#   ##
-#   ## If no servers are specified, then localhost is used as the host.
-#   ## If no port is specified, 6379 is used
-#   servers = ["tcp://localhost:6379"]
-
-
-# # Read metrics from one or many RethinkDB servers
-# [[inputs.rethinkdb]]
-#   ## An array of URI to gather stats about. Specify an ip or hostname
-#   ## with optional port add password. ie,
-#   ##   rethinkdb://user:auth_key@10.10.3.30:28105,
-#   ##   rethinkdb://10.10.3.33:18832,
-#   ##   10.0.0.1:10000, etc.
-#   servers = ["127.0.0.1:28015"]
-
-
-# # Read metrics one or many Riak servers
-# [[inputs.riak]]
-#   # Specify a list of one or more riak http servers
-#   servers = ["http://localhost:8098"]
-
-
-# # Monitor sensors, requires lm-sensors package
-# [[inputs.sensors]]
-#   ## Remove numbers from field names.
-#   ## If true, a field name like 'temp1_input' will be changed to 'temp_input'.
-#   # remove_numbers = true
-
-
-# # Retrieves SNMP values from remote agents
-# [[inputs.snmp]]
-#   agents = [ "127.0.0.1:161" ]
-#   ## Timeout for each SNMP query.
-#   timeout = "5s"
-#   ## Number of retries to attempt within timeout.
-#   retries = 3
-#   ## SNMP version, values can be 1, 2, or 3
-#   version = 2
-#
-#   ## SNMP community string.
-#   community = "public"
-#
-#   ## The GETBULK max-repetitions parameter
-#   max_repetitions = 10
-#
-#   ## SNMPv3 auth parameters
-#   #sec_name = "myuser"
-#   #auth_protocol = "md5"      # Values: "MD5", "SHA", ""
-#   #auth_password = "pass"
-#   #sec_level = "authNoPriv"   # Values: "noAuthNoPriv", "authNoPriv", "authPriv"
-#   #context_name = ""
-#   #priv_protocol = ""         # Values: "DES", "AES", ""
-#   #priv_password = ""
-#
-#   ## measurement name
-#   name = "system"
-#   [[inputs.snmp.field]]
-#     name = "hostname"
-#     oid = ".1.0.0.1.1"
-#   [[inputs.snmp.field]]
-#     name = "uptime"
-#     oid = ".1.0.0.1.2"
-#   [[inputs.snmp.field]]
-#     name = "load"
-#     oid = ".1.0.0.1.3"
-#   [[inputs.snmp.field]]
-#     oid = "HOST-RESOURCES-MIB::hrMemorySize"
-#
-#   [[inputs.snmp.table]]
-#     ## measurement name
-#     name = "remote_servers"
-#     inherit_tags = [ "hostname" ]
-#     [[inputs.snmp.table.field]]
-#       name = "server"
-#       oid = ".1.0.0.0.1.0"
-#       is_tag = true
-#     [[inputs.snmp.table.field]]
-#       name = "connections"
-#       oid = ".1.0.0.0.1.1"
-#     [[inputs.snmp.table.field]]
-#       name = "latency"
-#       oid = ".1.0.0.0.1.2"
-#
-#   [[inputs.snmp.table]]
-#     ## auto populate table's fields using the MIB
-#     oid = "HOST-RESOURCES-MIB::hrNetworkTable"
-
-
-# # DEPRECATED! PLEASE USE inputs.snmp INSTEAD.
-# [[inputs.snmp_legacy]]
-#   ## Use 'oids.txt' file to translate oids to names
-#   ## To generate 'oids.txt' you need to run:
-#   ##   snmptranslate -m all -Tz -On | sed -e 's/"//g' > /tmp/oids.txt
-#   ## Or if you have an other MIB folder with custom MIBs
-#   ##   snmptranslate -M /mycustommibfolder -Tz -On -m all | sed -e 's/"//g' > oids.txt
-#   snmptranslate_file = "/tmp/oids.txt"
-#   [[inputs.snmp.host]]
-#     address = "192.168.2.2:161"
-#     # SNMP community
-#     community = "public" # default public
-#     # SNMP version (1, 2 or 3)
-#     # Version 3 not supported yet
-#     version = 2 # default 2
-#     # SNMP response timeout
-#     timeout = 2.0 # default 2.0
-#     # SNMP request retries
-#     retries = 2 # default 2
-#     # Which get/bulk do you want to collect for this host
-#     collect = ["mybulk", "sysservices", "sysdescr"]
-#     # Simple list of OIDs to get, in addition to "collect"
-#     get_oids = []
-#
-#   [[inputs.snmp.host]]
-#     address = "192.168.2.3:161"
-#     community = "public"
-#     version = 2
-#     timeout = 2.0
-#     retries = 2
-#     collect = ["mybulk"]
-#     get_oids = [
-#         "ifNumber",
-#         ".1.3.6.1.2.1.1.3.0",
-#     ]
-#
-#   [[inputs.snmp.get]]
-#     name = "ifnumber"
-#     oid = "ifNumber"
-#
-#   [[inputs.snmp.get]]
-#     name = "interface_speed"
-#     oid = "ifSpeed"
-#     instance = "0"
-#
-#   [[inputs.snmp.get]]
-#     name = "sysuptime"
-#     oid = ".1.3.6.1.2.1.1.3.0"
-#     unit = "second"
-#
-#   [[inputs.snmp.bulk]]
-#     name = "mybulk"
-#     max_repetition = 127
-#     oid = ".1.3.6.1.2.1.1"
-#
-#   [[inputs.snmp.bulk]]
-#     name = "ifoutoctets"
-#     max_repetition = 127
-#     oid = "ifOutOctets"
-#
-#   [[inputs.snmp.host]]
-#     address = "192.168.2.13:161"
-#     #address = "127.0.0.1:161"
-#     community = "public"
-#     version = 2
-#     timeout = 2.0
-#     retries = 2
-#     #collect = ["mybulk", "sysservices", "sysdescr", "systype"]
-#     collect = ["sysuptime" ]
-#     [[inputs.snmp.host.table]]
-#       name = "iftable3"
-#       include_instances = ["enp5s0", "eth1"]
-#
-#   # SNMP TABLEs
-#   # table without mapping neither subtables
-#   [[inputs.snmp.table]]
-#     name = "iftable1"
-#     oid = ".1.3.6.1.2.1.31.1.1.1"
-#
-#   # table without mapping but with subtables
-#   [[inputs.snmp.table]]
-#     name = "iftable2"
-#     oid = ".1.3.6.1.2.1.31.1.1.1"
-#     sub_tables = [".1.3.6.1.2.1.2.2.1.13"]
-#
-#   # table with mapping but without subtables
-#   [[inputs.snmp.table]]
-#     name = "iftable3"
-#     oid = ".1.3.6.1.2.1.31.1.1.1"
-#     # if empty. get all instances
-#     mapping_table = ".1.3.6.1.2.1.31.1.1.1.1"
-#     # if empty, get all subtables
-#
-#   # table with both mapping and subtables
-#   [[inputs.snmp.table]]
-#     name = "iftable4"
-#     oid = ".1.3.6.1.2.1.31.1.1.1"
-#     # if empty get all instances
-#     mapping_table = ".1.3.6.1.2.1.31.1.1.1.1"
-#     # if empty get all subtables
-#     # sub_tables could be not "real subtables"
-#     sub_tables=[".1.3.6.1.2.1.2.2.1.13", "bytes_recv", "bytes_send"]
-
-
-# # Read metrics from Microsoft SQL Server
-# [[inputs.sqlserver]]
-#   ## Specify instances to monitor with a list of connection strings.
-#   ## All connection parameters are optional.
-#   ## By default, the host is localhost, listening on default port, TCP 1433.
-#   ##   for Windows, the user is the currently running AD user (SSO).
-#   ##   See https://github.com/denisenkom/go-mssqldb for detailed connection
-#   ##   parameters.
-#   # servers = [
-#   #  "Server=192.168.1.10;Port=1433;User Id=<user>;Password=<pw>;app name=telegraf;log=1;",
-#   # ]
-
-
-# # Sysstat metrics collector
-# [[inputs.sysstat]]
-#   ## Path to the sadc command.
-#   #
-#   ## Common Defaults:
-#   ##   Debian/Ubuntu: /usr/lib/sysstat/sadc
-#   ##   Arch:          /usr/lib/sa/sadc
-#   ##   RHEL/CentOS:   /usr/lib64/sa/sadc
-#   sadc_path = "/usr/lib/sa/sadc" # required
-#   #
-#   #
-#   ## Path to the sadf command, if it is not in PATH
-#   # sadf_path = "/usr/bin/sadf"
-#   #
-#   #
-#   ## Activities is a list of activities, that are passed as argument to the
-#   ## sadc collector utility (e.g: DISK, SNMP etc...)
-#   ## The more activities that are added, the more data is collected.
-#   # activities = ["DISK"]
-#   #
-#   #
-#   ## Group metrics to measurements.
-#   ##
-#   ## If group is false each metric will be prefixed with a description
-#   ## and represents itself a measurement.
-#   ##
-#   ## If Group is true, corresponding metrics are grouped to a single measurement.
-#   # group = true
-#   #
-#   #
-#   ## Options for the sadf command. The values on the left represent the sadf
-#   ## options and the values on the right their description (wich are used for
-#   ## grouping and prefixing metrics).
-#   ##
-#   ## Run 'sar -h' or 'man sar' to find out the supported options for your
-#   ## sysstat version.
-#   [inputs.sysstat.options]
-#     -C = "cpu"
-#     -B = "paging"
-#     -b = "io"
-#     -d = "disk"             # requires DISK activity
-#     "-n ALL" = "network"
-#     "-P ALL" = "per_cpu"
-#     -q = "queue"
-#     -R = "mem"
-#     -r = "mem_util"
-#     -S = "swap_util"
-#     -u = "cpu_util"
-#     -v = "inode"
-#     -W = "swap"
-#     -w = "task"
-#   #  -H = "hugepages"        # only available for newer linux distributions
-#   #  "-I ALL" = "interrupts" # requires INT activity
-#   #
-#   #
-#   ## Device tags can be used to add additional tags for devices.
-#   ## For example the configuration below adds a tag vg with value rootvg for
-#   ## all metrics with sda devices.
-#   # [[inputs.sysstat.device_tags.sda]]
-#   #  vg = "rootvg"
-
-
-# # Inserts sine and cosine waves for demonstration purposes
-# [[inputs.trig]]
-#   ## Set the amplitude
-#   amplitude = 10.0
-
-
-# # Read Twemproxy stats data
-# [[inputs.twemproxy]]
-#   ## Twemproxy stats address and port (no scheme)
-#   addr = "localhost:22222"
-#   ## Monitor pool name
-#   pools = ["redis_pool", "mc_pool"]
-
-
-# # A plugin to collect stats from Varnish HTTP Cache
-# [[inputs.varnish]]
-#   ## The default location of the varnishstat binary can be overridden with:
-#   binary = "/usr/bin/varnishstat"
-#
-#   ## By default, telegraf gather stats for 3 metric points.
-#   ## Setting stats will override the defaults shown below.
-#   ## Glob matching can be used, ie, stats = ["MAIN.*"]
-#   ## stats may also be set to ["*"], which will collect all stats
-#   stats = ["MAIN.cache_hit", "MAIN.cache_miss", "MAIN.uptime"]
-
-
-# # Read metrics of ZFS from arcstats, zfetchstats, vdev_cache_stats, and pools
-# [[inputs.zfs]]
-#   ## ZFS kstat path. Ignored on FreeBSD
-#   ## If not specified, then default is:
-#   # kstatPath = "/proc/spl/kstat/zfs"
-#
-#   ## By default, telegraf gather all zfs stats
-#   ## If not specified, then default is:
-#   # kstatMetrics = ["arcstats", "zfetchstats", "vdev_cache_stats"]
-#
-#   ## By default, don't gather zpool stats
-#   # poolMetrics = false
-
-
-# # Reads 'mntr' stats from one or many zookeeper servers
-# [[inputs.zookeeper]]
-#   ## An array of address to gather stats about. Specify an ip or hostname
-#   ## with port. ie localhost:2181, 10.0.0.1:2181, etc.
-#
-#   ## If no servers are specified, then localhost is used as the host.
-#   ## If no port is specified, 2181 is used
-#   servers = [":2181"]
-
-
-
-###############################################################################
-#                            SERVICE INPUT PLUGINS                            #
-###############################################################################
-
-# # AMQP consumer plugin
-# [[inputs.amqp_consumer]]
-#   ## AMQP url
-#   url = "amqp://localhost:5672/influxdb"
-#   ## AMQP exchange
-#   exchange = "telegraf"
-#   ## AMQP queue name
-#   queue = "telegraf"
-#   ## Binding Key
-#   binding_key = "#"
-#
-#   ## Maximum number of messages server should give to the worker.
-#   prefetch_count = 50
-#
-#   ## Auth method. PLAIN and EXTERNAL are supported
-#   ## Using EXTERNAL requires enabling the rabbitmq_auth_mechanism_ssl plugin as
-#   ## described here: https://www.rabbitmq.com/plugins.html
-#   # auth_method = "PLAIN"
-#
-#   ## Optional SSL Config
-#   # ssl_ca = "/etc/telegraf/ca.pem"
-#   # ssl_cert = "/etc/telegraf/cert.pem"
-#   # ssl_key = "/etc/telegraf/key.pem"
-#   ## Use SSL but skip chain & host verification
-#   # insecure_skip_verify = false
-#
-#   ## Data format to output.
-#   ## Each data format has its own unique set of configuration options, read
-#   ## more about them here:
-#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md
-#   data_format = "influx"
-
-
-# # Influx HTTP write listener
-# [[inputs.http_listener]]
-#   ## Address and port to host HTTP listener on
-#   service_address = ":8186"
-#
-#   ## maximum duration before timing out read of the request
-#   read_timeout = "10s"
-#   ## maximum duration before timing out write of the response
-#   write_timeout = "10s"
-#
-#   ## Maximum allowed http request body size in bytes.
-#   ## 0 means to use the default of 536,870,912 bytes (500 mebibytes)
-#   max_body_size = 0
-#
-#   ## Maximum line size allowed to be sent in bytes.
-#   ## 0 means to use the default of 65536 bytes (64 kibibytes)
-#   max_line_size = 0
-
-
-# # Read metrics from Kafka topic(s)
-# [[inputs.kafka_consumer]]
-#   ## topic(s) to consume
-#   topics = ["telegraf"]
-#   ## an array of Zookeeper connection strings
-#   zookeeper_peers = ["localhost:2181"]
-#   ## Zookeeper Chroot
-#   zookeeper_chroot = ""
-#   ## the name of the consumer group
-#   consumer_group = "telegraf_metrics_consumers"
-#   ## Offset (must be either "oldest" or "newest")
-#   offset = "oldest"
-#
-#   ## Data format to consume.
-#   ## Each data format has its own unique set of configuration options, read
-#   ## more about them here:
-#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md
-#   data_format = "influx"
-#
-#   ## Maximum length of a message to consume, in bytes (default 0/unlimited);
-#   ## larger messages are dropped
-#   max_message_len = 65536
-
-
-# # Stream and parse log file(s).
-# [[inputs.logparser]]
-#   ## Log files to parse.
-#   ## These accept standard unix glob matching rules, but with the addition of
-#   ## ** as a "super asterisk". ie:
-#   ##   /var/log/**.log     -> recursively find all .log files in /var/log
-#   ##   /var/log/*/*.log    -> find all .log files with a parent dir in /var/log
-#   ##   /var/log/apache.log -> only tail the apache log file
-#   files = ["/var/log/apache/access.log"]
-#   ## Read files that currently exist from the beginning. Files that are created
-#   ## while telegraf is running (and that match the "files" globs) will always
-#   ## be read from the beginning.
-#   from_beginning = false
-#
-#   ## Parse logstash-style "grok" patterns:
-#   ##   Telegraf built-in parsing patterns: https://goo.gl/dkay10
-#   [inputs.logparser.grok]
-#     ## This is a list of patterns to check the given log file(s) for.
-#     ## Note that adding patterns here increases processing time. The most
-#     ## efficient configuration is to have one pattern per logparser.
-#     ## Other common built-in patterns are:
-#     ##   %{COMMON_LOG_FORMAT}   (plain apache & nginx access logs)
-#     ##   %{COMBINED_LOG_FORMAT} (access logs + referrer & agent)
-#     patterns = ["%{COMBINED_LOG_FORMAT}"]
-#     ## Name of the outputted measurement name.
-#     measurement = "apache_access_log"
-#     ## Full path(s) to custom pattern files.
-#     custom_pattern_files = []
-#     ## Custom patterns can also be defined here. Put one pattern per line.
-#     custom_patterns = '''
-#     '''
-
-
-# # Read metrics from MQTT topic(s)
-# [[inputs.mqtt_consumer]]
-#   servers = ["localhost:1883"]
-#   ## MQTT QoS, must be 0, 1, or 2
-#   qos = 0
-#
-#   ## Topics to subscribe to
-#   topics = [
-#     "telegraf/host01/cpu",
-#     "telegraf/+/mem",
-#     "sensors/#",
-#   ]
-#
-#   # if true, messages that can't be delivered while the subscriber is offline
-#   # will be delivered when it comes back (such as on service restart).
-#   # NOTE: if true, client_id MUST be set
-#   persistent_session = false
-#   # If empty, a random client ID will be generated.
-#   client_id = ""
-#
-#   ## username and password to connect MQTT server.
-#   # username = "telegraf"
-#   # password = "metricsmetricsmetricsmetrics"
-#
-#   ## Optional SSL Config
-#   # ssl_ca = "/etc/telegraf/ca.pem"
-#   # ssl_cert = "/etc/telegraf/cert.pem"
-#   # ssl_key = "/etc/telegraf/key.pem"
-#   ## Use SSL but skip chain & host verification
-#   # insecure_skip_verify = false
-#
-#   ## Data format to consume.
-#   ## Each data format has its own unique set of configuration options, read
-#   ## more about them here:
-#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md
-#   data_format = "influx"
-
-
-# # Read metrics from NATS subject(s)
-# [[inputs.nats_consumer]]
-#   ## urls of NATS servers
-#   # servers = ["nats://localhost:4222"]
-#   ## Use Transport Layer Security
-#   # secure = false
-#   ## subject(s) to consume
-#   # subjects = ["telegraf"]
-#   ## name a queue group
-#   # queue_group = "telegraf_consumers"
-#
-#   ## Sets the limits for pending msgs and bytes for each subscription
-#   ## These shouldn't need to be adjusted except in very high throughput scenarios
-#   # pending_message_limit = 65536
-#   # pending_bytes_limit = 67108864
-#
-#   ## Data format to consume.
-#   ## Each data format has its own unique set of configuration options, read
-#   ## more about them here:
-#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md
-#   data_format = "influx"
-
-
-# # Read NSQ topic for metrics.
-# [[inputs.nsq_consumer]]
-#   ## An string representing the NSQD TCP Endpoint
-#   server = "localhost:4150"
-#   topic = "telegraf"
-#   channel = "consumer"
-#   max_in_flight = 100
-#
-#   ## Data format to consume.
-#   ## Each data format has its own unique set of configuration options, read
-#   ## more about them here:
-#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md
-#   data_format = "influx"
-
-
-# # Generic socket listener capable of handling multiple socket types.
-# [[inputs.socket_listener]]
-#   ## URL to listen on
-#   # service_address = "tcp://:8094"
-#   # service_address = "tcp://127.0.0.1:http"
-#   # service_address = "tcp4://:8094"
-#   # service_address = "tcp6://:8094"
-#   # service_address = "tcp6://[2001:db8::1]:8094"
-#   # service_address = "udp://:8094"
-#   # service_address = "udp4://:8094"
-#   # service_address = "udp6://:8094"
-#   # service_address = "unix:///tmp/telegraf.sock"
-#   # service_address = "unixgram:///tmp/telegraf.sock"
-#
-#   ## Maximum number of concurrent connections.
-#   ## Only applies to stream sockets (e.g. TCP).
-#   ## 0 (default) is unlimited.
-#   # max_connections = 1024
-#
-#   ## Maximum socket buffer size in bytes.
-#   ## For stream sockets, once the buffer fills up, the sender will start backing up.
-#   ## For datagram sockets, once the buffer fills up, metrics will start dropping.
-#   ## Defaults to the OS default.
-#   # read_buffer_size = 65535
-#
-#   ## Period between keep alive probes.
-#   ## Only applies to TCP sockets.
-#   ## 0 disables keep alive probes.
-#   ## Defaults to the OS configuration.
-#   # keep_alive_period = "5m"
-#
-#   ## Data format to consume.
-#   ## Each data format has its own unique set of configuration options, read
-#   ## more about them here:
-#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md
-#   # data_format = "influx"
-
-
-# # Statsd Server
-# [[inputs.statsd]]
-#   ## Address and port to host UDP listener on
-#   service_address = ":8125"
-#
-#   ## The following configuration options control when telegraf clears it's cache
-#   ## of previous values. If set to false, then telegraf will only clear it's
-#   ## cache when the daemon is restarted.
-#   ## Reset gauges every interval (default=true)
-#   delete_gauges = true
-#   ## Reset counters every interval (default=true)
-#   delete_counters = true
-#   ## Reset sets every interval (default=true)
-#   delete_sets = true
-#   ## Reset timings & histograms every interval (default=true)
-#   delete_timings = true
-#
-#   ## Percentiles to calculate for timing & histogram stats
-#   percentiles = [90]
-#
-#   ## separator to use between elements of a statsd metric
-#   metric_separator = "_"
-#
-#   ## Parses tags in the datadog statsd format
-#   ## http://docs.datadoghq.com/guides/dogstatsd/
-#   parse_data_dog_tags = false
-#
-#   ## Statsd data translation templates, more info can be read here:
-#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md#graphite
-#   # templates = [
-#   #     "cpu.* measurement*"
-#   # ]
-#
-#   ## Number of UDP messages allowed to queue up, once filled,
-#   ## the statsd server will start dropping packets
-#   allowed_pending_messages = 10000
-#
-#   ## Number of timing/histogram values to track per-measurement in the
-#   ## calculation of percentiles. Raising this limit increases the accuracy
-#   ## of percentiles but also increases the memory usage and cpu time.
-#   percentile_limit = 1000
-
-
-# # Stream a log file, like the tail -f command
-# [[inputs.tail]]
-#   ## files to tail.
-#   ## These accept standard unix glob matching rules, but with the addition of
-#   ## ** as a "super asterisk". ie:
-#   ##   "/var/log/**.log"  -> recursively find all .log files in /var/log
-#   ##   "/var/log/*/*.log" -> find all .log files with a parent dir in /var/log
-#   ##   "/var/log/apache.log" -> just tail the apache log file
-#   ##
-#   ## See https://github.com/gobwas/glob for more examples
-#   ##
-#   files = ["/var/mymetrics.out"]
-#   ## Read file from beginning.
-#   from_beginning = false
-#   ## Whether file is a named pipe
-#   pipe = false
-#
-#   ## Data format to consume.
-#   ## Each data format has its own unique set of configuration options, read
-#   ## more about them here:
-#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md
-#   data_format = "influx"
-
-
-# # Generic TCP listener
-# [[inputs.tcp_listener]]
-#   # DEPRECATED: the TCP listener plugin has been deprecated in favor of the
-#   # socket_listener plugin
-#   # see https://github.com/influxdata/telegraf/tree/master/plugins/inputs/socket_listener
-
-
-# # Generic UDP listener
-# [[inputs.udp_listener]]
-#   # DEPRECATED: the TCP listener plugin has been deprecated in favor of the
-#   # socket_listener plugin
-#   # see https://github.com/influxdata/telegraf/tree/master/plugins/inputs/socket_listener
-
-
-# # A Webhooks Event collector
-# [[inputs.webhooks]]
-#   ## Address and port to host Webhook listener on
-#   service_address = ":1619"
-#
-#   [inputs.webhooks.filestack]
-#     path = "/filestack"
-#
-#   [inputs.webhooks.github]
-#     path = "/github"
-#     # secret = ""
-#
-#   [inputs.webhooks.mandrill]
-#     path = "/mandrill"
-#
-#   [inputs.webhooks.rollbar]
-#     path = "/rollbar"
-#
-#   [inputs.webhooks.papertrail]
-#     path = "/papertrail"
-
diff --git a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.vagrant.server.src.dvp/src/main/vagrant/Vagrantfile b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.vagrant.server.src.dvp/src/main/vagrant/Vagrantfile
index 2fddd15f6b5506637099ca51a6154e9bd7f3676c..279d01aa8c4c2a282dc3c5f1b9359a9c9e599906 100644
--- a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.vagrant.server.src.dvp/src/main/vagrant/Vagrantfile
+++ b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.vagrant.server.src.dvp/src/main/vagrant/Vagrantfile
@@ -1,183 +1,1042 @@
-credentials_home = ENV['CREDENTIALS_HOME']
-start_monitoring = ENV['START_MONITORING']
-start_optimus = ENV['START_OPTIMUS']
-build_jhipster_repo = ENV['BUILD_JHIPSTER_REPO']
-start_jhipster_acsmi = ENV['START_JHIPSTER_ACSMI']
-vagrant_instance_memory_mbs = ENV['VAGRANT_INSTANCE_MEMORY_MBS']
-vagrant_instance_cores = ENV['VAGRANT_INSTANCE_CORES']
-vagrant_instance_hdd_size = ENV['VAGRANT_INSTANCE_HDD_SIZE']
-reuse_repos = ENV['REUSE_REPOS']
-m2_repo = ENV['M2_REPO']
-git_repo_monitoring = ENV['GIT_REPO_MONITORING']
-docker_repo = ENV['DOCKER_REPO']
-docker_repo_size_mbs=ENV['DOCKER_REPO_SIZE_MBS']
-
-env_var_cmd = ""
-if ENV['SOCKSHOP_IP']
-  value = ENV['SOCKSHOP_IP']
-else
-  value = "10.0.2.2 sockshop.integration.decideh2020.lan.esilab.org"
-end
-
-env_var_cmd = <<CMD
-echo "#{value}" >> /etc/hosts
-CMD
-
-script = <<SCRIPT
-#{env_var_cmd}
-SCRIPT
+require 'erb'
 
-Vagrant.configure("2") do |config|
-  config.vm.box = "ubuntu/xenial64"
-  unless Vagrant.has_plugin?("vagrant-disksize")
-    raise 'Missing vagrant-disksize plugin! Make sure to install it by `vagrant plugin install vagrant-disksize`.'
+# this is ruby language
+
+$mute = !( ARGV[0] == "up" || ARGV[0] == "reload" || (ARGV[0] == "provision" and ARGV[1] != "--provision-with"))
+
+class Net::HTTP::UploadProgress
+  attr_reader :upload_size
+
+  def initialize(req, &block)
+    @req = req
+    @callback = block
+    @upload_size = 0
+    if req.body_stream
+      @io = req.body_stream
+      req.body_stream = self
+    elsif req.instance_variable_get(:@body_data)
+      raise NotImplementedError if req.chunked?
+      raise NotImplementedError if /\Amultipart\/form-data\z/i !~ req.content_type
+      opt = req.instance_variable_get(:@form_option).dup
+      opt[:boundary] ||= SecureRandom.urlsafe_base64(40)
+      req.set_content_type(req.content_type, boundary: opt[:boundary])
+      file = Tempfile.new('multipart')
+      file.binmode
+      req.send(:encode_multipart_form_data, file, req.instance_variable_get(:@body_data), opt)
+      file.rewind
+      req.content_length = file.size
+      @io = file
+      req.body_stream = self
+    else
+      raise NotImplementedError
+    end
   end
-  config.disksize.size = vagrant_instance_hdd_size
-  
-  # Configurar a priori como funcionara docker
-  unless Vagrant.has_plugin?("vagrant-persistent-storage")
-    raise 'Missing vagrant-persistent-storage plugin! Make sure to install it by `vagrant plugin install vagrant-persistent-storage`.'
+
+  def readpartial(maxlen, outbuf)
+    begin
+      str = @io.readpartial(maxlen, outbuf)
+    ensure
+      @callback.call(self) unless @upload_size.zero?
+    end
+    @upload_size += str.length
+    str
   end
-  config.persistent_storage.diskdevice = '/dev/sdc'
-  config.persistent_storage.enabled = true
-  config.persistent_storage.use_lvm = false
-  config.persistent_storage.part_type_code  = '83'
-  config.persistent_storage.location = docker_repo
-  config.persistent_storage.size = Integer(docker_repo_size_mbs) 
-  config.persistent_storage.mountname = 'docker'
-  config.persistent_storage.filesystem = 'ext4'
-  config.persistent_storage.mountpoint = '/var/lib/docker'
-  
-  # Cuidado que crea una bridged network
-  # config.vm.network :public_network
-  
-  # Mapear carpetas
-  config.vm.synced_folder "#{credentials_home}","/credentials"
-	if start_monitoring == 'Y'
-		config.vm.synced_folder "../../../../eu.decideh2020.int.adapt.monitoring.grafana.server.src.dvp/src/main/docker", "/docker.grafana.server"
-		config.vm.synced_folder "../../../../eu.decideh2020.int.adapt.monitoring.influxdb.server.src.dvp/src/main/docker", "/docker.influxdb.server"
-		config.vm.synced_folder "../../../../eu.decideh2020.int.adapt.monitoring.management.server.src.dvp/src/main/docker", "/docker.monitoring.server"
-		config.vm.synced_folder "../../../../eu.decideh2020.int.adapt.monitoring.telegraf.server.src.dvp/src/main/docker", "/docker.telegraf.server"
-		#config.vm.synced_folder "#{git_repo_monitoring}/WP4/Adapt_monitoring/eu.decideh2020.adapt.monitoring.server", "/docker.monitoring.server/sources"
-	end
-	if reuse_repos == 'Y'
-		#config.vm.synced_folder "#{m2_repo}", "/docker.monitoring.server/.m2"
+end
+
+unless $mute
+	puts "*****************************************************************************"
+	puts "***********                  LOADING CONSTANTS                   ************"
+	puts "*****************************************************************************"
+	puts
+end
+
+$dryRun=true
+$printCommands=false
+$maxRedirects=5
+
+unless $mute
+	puts "*****************************************************************************"
+	puts "***********                  LOADING VARIABLES                   ************"
+	puts "*****************************************************************************"
+	puts
+end
+
+def getVariableFromFile(filename)
+	variable="" 
+	if File.exist?(filename)
+		variable=File.open(filename, &:readline)
+	end
+	return variable
+end
+
+def getVBoxDefaultMachineFolder ()
+	output=`VBoxManage list systemproperties` 
+	folder=/Default machine folder:\s*(.*)/.match(output)[1]
+	return folder
+end
+
+if Vagrant.version?("< 2.1.0")
+	abort "Vagrant version 2.1.0 or greater required"
+end
+
+unless $mute
+
+$previousVBoxDefaultMachineFolder=getVBoxDefaultMachineFolder()
+$vboxDefaultMachineFolderChanged=false
+$vagrantProjectHome = ENV['VAGRANT_CWD'].to_s.strip
+$vagrantProjectTmpFolder = $vagrantProjectHome + "/.vagrant"
+$noActionProvision = not(File.exist?($vagrantProjectTmpFolder + "/machines/default/virtualbox/action_provision"))
+$projectHome = ENV['CURRENT_DIR'].to_s.strip
+$projectTmpFolder = $projectHome + "/tmp"
+vagrantConfigFile = ENV['VAGRANT_CONFIG'].to_s.strip
+credentialsHome = ENV['CREDENTIALS_HOME'].to_s.strip
+$vboxDefaultMachineFolder = ENV['VBOX_USER_HOME'].to_s.strip
+$artifactoryUserName = ENV['ARTIFACTORY_USER_NAME'].to_s.strip
+$artifactoryApiKey = ENV['ARTIFACTORY_API_KEY'].to_s.strip
+$artifactoryUserNameEncoded=ERB::Util.url_encode($artifactoryUserName)
+$artifactoryApiKeyEncoded=ERB::Util.url_encode($artifactoryApiKey)
+$gitUserName = ENV['GIT_RO_USER_NAME'].to_s.strip
+$gitApiKey = ENV['GIT_RO_API_KEY'].to_s.strip
+$gitUserNameEncoded=ERB::Util.url_encode($gitUserName)
+$gitApiKeyEncoded=ERB::Util.url_encode($gitApiKey)
+$gitCredentials=$gitUserNameEncoded + ":" + $gitApiKeyEncoded
+vagrantConfig = YAML.load(File.read(vagrantConfigFile))
+useMavenBinaryCache = vagrantConfig['general']['use_maven_binary_cache'].to_s.strip
+artifactoryMavenRepo = vagrantConfig['general']['maven_repo'].to_s.strip
+b = binding
+b.local_variable_set(:gitCredentials, $gitCredentials)
+b.local_variable_set(:useMavenBinaryCache, useMavenBinaryCache)
+b.local_variable_set(:artifactoryMavenRepo, artifactoryMavenRepo)
+vagrantConfig = YAML.load(ERB.new(File.read(vagrantConfigFile)).result(b))
+# this replaces <%= ENV['CURRENT_DIR']  %> with environment variables
+$imagesAtLastProvisionFile=$vagrantProjectHome + "/.vagrant/images.lst"
+foldersAtLastProvisionFile=$vagrantProjectHome + "/.vagrant/folders.lst"
+$useVagrantBinaryCache = vagrantConfig['general']['use_vagrant_binary_cache'].to_s.strip
+$useDebianBinaryCache = vagrantConfig['general']['use_debian_binary_cache'].to_s.strip
+$useDockerBinaryCache = vagrantConfig['general']['use_docker_binary_cache'].to_s.strip
+$projectName = vagrantConfig['general']['project_name'].to_s.strip
+$artifactoryHost=vagrantConfig['general']['artifactory_host'].to_s.strip
+
+	puts
+	puts "*****************************************************************************"
+	puts "***********                  ADJUST VARIABLES                    ************"
+	puts "*****************************************************************************"
+	puts
+
+	if ($artifactoryUserName=="" or $artifactoryApiKey=="" or $artifactoryHost=="") then
+		$useVagrantBinaryCache = "N"
+		$useDebianBinaryCache = "N"
+		$useDockerBinaryCache = "N"
+	end
+end 
+#
+# "*****************************************************************************"
+# "***********                      FUNCTIONS                       ************"
+# "*****************************************************************************"
+#
+
+def setBeforeUpTrigger (config)
+	if $noActionProvision
+		if $dryRun then
+			puts "config.trigger.before :up"
+		else
+			config.trigger.before :up do |trigger|
+				trigger.info = "Setting up vboxDefaultMachineFolder"
+				trigger.ruby do |env,machine|
+					if ( $previousVBoxDefaultMachineFolder.strip != $vboxDefaultMachineFolder.strip )
+						puts "Changing VBox machinefolder to " + $vboxDefaultMachineFolder
+						system("VBoxManage setproperty machinefolder " + $vboxDefaultMachineFolder)
+						$vboxDefaultMachineFolderChanged=true
+					end
+				end
+			end
+		end
+	end
+end
+
+def setAfterUpTrigger (config)
+	if $noActionProvision
+		if $dryRun then
+			puts "config.trigger.after :up"
+		else
+			config.trigger.after :up do |trigger|
+			  trigger.info = "Setting up previousVBoxDefaultMachineFolder"
+				trigger.ruby do |env,machine|
+					if ( $vboxDefaultMachineFolderChanged==true and $previousVBoxDefaultMachineFolder.strip != $vboxDefaultMachineFolder.strip )
+						puts "Changing VBox machinefolder to " + $previousVBoxDefaultMachineFolder
+						system("VBoxManage setproperty machinefolder " + $previousVBoxDefaultMachineFolder)
+						$vboxDefaultMachineFolderChanged=false
+					end
+				end
+			end
+		end
+	end
+end
+
+def mapFolder(config, mapSpec, relativeFolder, atRoot)
+	if (mapSpec!=nil and relativeFolder!=nil and relativeFolder!="") then
+		sourceFolder=mapSpec['source']
+		sourceFullPath=sourceFolder
+		sourceFullPath=$vagrantProjectHome + "/" + sourceFolder if not ((Pathname.new sourceFolder).absolute?)
+		abort "Mapping source " + sourceFolder + " in yml file does not exist" if not Dir.exist?(sourceFullPath)
+		target=mapSpec['target']
+		if target==nil then 
+			target=/.*\/(.*)/.match(sourceFolder)[1]
+		end
+		absolutePath="/" + relativeFolder
+		if not atRoot then 
+			if ((Pathname.new target).absolute?)
+				absolutePath = absolutePath + target
+			else
+				absolutePath = absolutePath + "/" + target
+			end
+		end
+		if $dryRun then
+			puts "config.vm.synced_folder " + sourceFolder + "," + absolutePath
+		else
+			config.vm.synced_folder sourceFolder,absolutePath
+		end
+	end
+end
+
+
+def mapFolders (config, folderMappings, relativeFolder, atRoot)
+	if (folderMappings!=nil) then
+		folderMappings.each {
+			|i|
+			mapFolder config, i['source'], relativeFolder, atRoot
+		}
+	end
+end
+
+def mapPort (config, mapSpec, id)
+	if (mapSpec!=nil) then
+		guest=mapSpec['guest']
+		abort "Mapping requires guest in yml file" if guest==nil 
+		host=mapSpec['host']
+		abort "Mapping requires host in yml file" if host==nil 
+		if $dryRun then
+			puts "config.vm.network :forwarded_port, guest: " + guest + ", host: " + host + ", id: " + id + " " + host
+		else
+			config.vm.network :forwarded_port, guest: guest, host: host, id: id + " " + host
+		end
+	end
+end
+
+def mapPorts (config, portsMappings, id)
+	if (portsMappings!=nil) then
+		portsMappings.each {
+			|i|
+			mapPort config, i['mapping'], id
+		}
+	end
+end
+
+def processGeneral (config, general)
+	mapFolders config, general['folders_mapping'], 'general', false
+	mapPorts config, general['ports_mapping'], 'general'
+end
+
+def processContainerBuildConfBuildFoldersMapping (config, containerName, buildFoldersMapping)
+	if (buildFoldersMapping!=nil) then
+		mapFolder config, buildFoldersMapping['dockerfile'],containerName, true
+		mapFolders config, buildFoldersMapping['sources'], containerName + "/sources", false
+		mapFolders config, buildFoldersMapping['resources'], containerName + "/resources", false
+	end
+end
+
+def processContainerBuildConf (config, containerName, buildConf)
+	if (buildConf!=nil) then
+		processContainerBuildConfBuildFoldersMapping config, containerName, buildConf['build_folders_mapping']
+	end
+end
+
+def processContainerRunConf (config, containerName, runConf)
+	if (runConf!=nil) then
+		mapFolders config, runConf['folders_mapping'], containerName, false
+		mapPorts config, runConf['ports_mapping'], containerName
+	end
+end
+$runList=Hash.new
+$buildList=Hash.new
+$provideList=Hash.new
+$runListWithDependencies=Array.new
+$buildListWithDependencies=Array.new
+
+def clasifyContainer (container)
+	# first we check if it has to be run
+	if (container[1]['run']=='Y') then
+		if (container[1]['run_dep']!=nil and container[1]['run_dep'].length>0) then
+			#we add to stack for resolution
+			$runListWithDependencies.push container #we store the whole container spec instead the name to speedup
+		else
+			$runList[container[0]] = container[1]
+		end
+	end
+	if (container[1]['force_build']=='Y') then
+		if (container[1]['build_dep']!=nil and container[1]['build_dep'].length>0) then
+			#we add to stack for resolution
+			$buildListWithDependencies.push container #we store the whole container spec instead the name to speedup
+		else
+			$buildList[container[0]] = container[1]
+		end
 	else
-		config.vm.provision "shell", name: "sudo", inline: <<-SHELL
-		  echo "git init and git remote the repo"
-		SHELL
+		if (container[1]['run']=='Y') then
+			$provideList[container[0]] = container[1]
+		end
 	end
-	if start_optimus == 'Y'
-		config.vm.synced_folder "../../../../../../WP3/Optimus/eu.decideh2020.int.optimus.server.src.dvp/src/main/docker", "/docker.optimus.server"
+end
+
+def processContainer (config, container)
+	if (container[1]!=nil) then
+		processContainerBuildConf config, container[0], container[1]['build_conf']
+		processContainerRunConf config, container[0], container[1]['run_conf']
+		# clasify container in the build list, the run list, the run dependecy resolution stack or the build dependecy resolution stack 
+		clasifyContainer container
 	end
-	if build_jhipster_repo == 'Y'
-		config.vm.synced_folder "../../../../../../WP5/ACSmI_discovery/eu.decideh2020.springboot.server.repo.src.dvp/src/main/docker", "/docker.springboot.server.repo"
-	end	
-	if start_jhipster_acsmi == 'Y'
-		config.vm.synced_folder "../../../../../../WP5/ACSmI_discovery/eu.decideh2020.int.acsmi.backend.services.server.src.dvp/src/main/docker", "/docker.acsmi.backend.services.server"
-		config.vm.synced_folder "../../../../../../WP5/ACSmI_discovery/eu.decideh2020.int.acsmi.frontend.server.src.dvp/src/main/docker", "/docker.acsmi.frontend.server"
-		config.vm.synced_folder "../../../../../../WP5/ACSmI_discovery/eu.decideh2020.int.acsmi.registry.server.src.dvp/src/main/docker", "/docker.acsmi.registry.server"
-		config.vm.synced_folder "../../../../../../WP5/ACSmI_discovery/eu.decideh2020.int.acsmi.mysql.server.src.dvp/src/main/docker", "/docker.acsmi.mysql.server"
-		config.vm.synced_folder "../../../../../../WP5/ACSmI_discovery/eu.decideh2020.int.acsmi.backend.services.server.test.00.src.dvp/src/main/docker", "/docker.acsmi.backend.services.server.test.00"
-		config.vm.synced_folder "../../../../../../WP5/ACSmI_discovery/eu.decideh2020.int.acsmi.backend.services.testcors.server.src.dvp/src/main/docker","/docker.acsmi.backend.services.testcors.server"
-		config.vm.synced_folder "../../../../../../WP5", "/WP5"
-		config.vm.synced_folder "../../../../../../../swagger-codegen", "/swagger-codegen"
-		config.vm.synced_folder "../../../../../../WP5/ACSmI_monitoring/eu.decideh2020.int.acsmi.monitoring.management.server.src.dvp/src/main/docker", "/docker.acsmi.monitoring.server"
-		config.vm.synced_folder "../../../../../../WP5/ACSmI_monitoring/eu.decideh2020.int.acsmi.monitoring.influxdb.server.src.dvp/src/main/docker", "/docker.acsmi.influxdb.server"
-		config.vm.synced_folder "../../../../../../WP5/ACSmI_monitoring/eu.decideh2020.int.acsmi.monitoring.telegraf.server.src.dvp/src/main/docker", "/docker.acsmi.telegraf.server"
+end
+
+def processContainers (config, containers)
+	if (containers!=nil) then
+		containers.each{
+			|i|
+			processContainer config, i
+		}
+	end
+end
+
+def processContainersConfiguration (config, containersConfiguration)
+	processGeneral config, containersConfiguration['general']
+	processContainers config, containersConfiguration['containers']
+end
+
+def resolveRunDependencies (containers)
+	$runListWithDependencies.each {
+		|i|
+		auxStack=Array.new
+		auxStack.push i
+		addedBackToStack=false
+		while (auxStack.any?)
+			j=auxStack.pop
+			addedBackToStack=false
+			j[1]['run_dep'].each {
+				|k|
+				if (!$runList.has_key? k) then
+					l=containers.assoc (k)
+					#if element is in stack ... is a cicke condition
+					if (auxStack.include? l) then
+						abort "ERROR:Cycle condition with " + l[0]
+					end
+					#if it has dependencies we need put thej back to stack, and add this one on top of the stack.
+					if (l[1]!=nil and l[1]['run_dep']!=nil and l[1]['run_dep'].length>0) then
+						if !addedBackToStack then
+							#puts "pushes #{j} back into auxStack"
+							auxStack.push j
+							addedBackToStack=true
+						end
+						#puts "pushes #{l[0]} into auxStack"
+						auxStack.push l
+					else
+						#puts "adding #{l[0]} to containersToRun Hash"
+						$runList[l[0]] = l[1]
+						#clasify for provision
+						if (l[1]['force_build']!='Y' and !$provideList.has_key? l[0]) then
+							$provideList[l[0]] = l[1]
+						end
+					end
+				end
+			}
+			if !addedBackToStack and !$runList.has_key? j[0] then
+				$runList[j[0]] = j[1]
+				if (j[1]['force_build']!='Y' and !$provideList.has_key? j[0]) then
+					$provideList[j[0]] = j[1]
+				end
+			end
+		end
+	}
+end
+
+def resolveBuildDependencies (containers)
+	$buildListWithDependencies.each {
+		|i|
+		auxStack=Array.new
+		auxStack.push i
+		addedBackToStack=false
+		while (auxStack.any?)
+			j=auxStack.pop
+			addedBackToStack=false
+			j[1]['build_dep'].each {
+				|k|
+				if (!$buildList.has_key? k and !$provideList.has_key? k) then
+					l=containers.assoc (k)
+					#if element is in stack ... is a cicke condition
+					if (auxStack.include? l) then
+						abort "ERROR:Cycle condition with " + l[0]
+					end
+					if (l[1]!=nil and l[1]['build_dep']!=nil and l[1]['build_dep'].length>0) then
+						if !addedBackToStack then
+							#puts "pushes #{j} back into auxStack"
+							auxStack.push j
+							addedBackToStack=true
+						end
+						#puts "pushes #{l[0]} into auxStack"
+						auxStack.push l
+					else
+						#puts "adding #{l[0]} to containersToRun Hash"
+						if (l[1]['force_build']=='Y') then
+							$buildList[l[0]] = l[1]
+						else
+							$provideList[l[0]] = l[1]
+						end
+					end
+				end
+			}
+			if !addedBackToStack and !$buildList.has_key? j[0] then
+				$buildList[j[0]] = j[1]
+			end
+		end
+	}
+end
+
+def resolveContainersDependencies (containersConfiguration)
+	if containersConfiguration!=nil and containersConfiguration['containers']!=nil then
+		resolveRunDependencies containersConfiguration['containers']
+		resolveBuildDependencies containersConfiguration['containers']
+	end
+end
+
+def printContainerList (list)
+	list.each{
+		|i|
+		version = 'latest'
+		version = i[1]['image_version'] if (i[1]!=nil and i[1]['image_version']!=nil)
+		puts i[0] + " " + version
+	}
+end
+
+def printContainerLists
+	puts "this is runList:"
+	printContainerList $runList
+	puts "this is provideList:"
+	printContainerList $provideList
+	puts "this is buildList:"
+	printContainerList $buildList
+end
+
+def checkIfArtifactExistInArtifactory (vagrantArtifactoryRepo, vagrantBoxOs, vagrantBoxOsVersion, vagrantBoxVersion)
+	artifactoryUrl="https://" + $artifactoryHost + "/api/storage/" + vagrantArtifactoryRepo + "/" + vagrantBoxOs + "/" + vagrantBoxOsVersion + "-" + vagrantBoxVersion
+	uri = URI.parse(artifactoryUrl)
+	http = Net::HTTP.new(uri.host, uri.port)
+	http.use_ssl = (uri.scheme=="https")
+	request = Net::HTTP::Get.new(uri.request_uri)
+	request["X-JFrog-Art-Api"] = $artifactoryApiKey
+	puts 'curl -H "X-JFrog-Art-Api:' + $artifactoryApiKey + '" "' + artifactoryUrl + '"' if $dryRun 
+	begin
+		response = http.request(request)
+	rescue => e
+		puts "http.request(request) error"
+	end
+	vboxPresent=false
+	if (response.kind_of? Net::HTTPSuccess)
+		vboxPresent=true
+	else
+		puts "response: " + response.to_s if $dryRun 
+	end
+	return vboxPresent
+end
+
+def downloadVboxFromVagrantUp(filePath, vagrantBoxOs, vagrantBoxOsVersion, vagrantBoxVersion)
+	#first we check if file exist
+	vboxDownloaded=true
+	if not File.exist?(filePath)
+		uriString="https://app.vagrantup.com/" + vagrantBoxOs + "/boxes/" + vagrantBoxOsVersion + "/versions/" + vagrantBoxVersion + "/providers/virtualbox.box"
+		uri = URI.parse(uriString)
+		puts "uriString:" + uriString 
+		puts "ssl:" + (uri.scheme=="https").to_s
+		http = Net::HTTP.new(uri.host, uri.port)
+		http.use_ssl = (uri.scheme=="https").to_s
+		request = Net::HTTP::Get.new (uri.request_uri)
+		begin
+			response = http.request(request)
+			redirectCount=0
+			while response.kind_of?(Net::HTTPRedirection)
+				redirectCount+=1
+				if redirectCount>$maxRedirects then
+					Abort  "Too many redirects (#{redirectCount}): #{vagrantBoxPath}"
+				end
+				redirectUrl=''
+				if response['location'].nil?
+					redirectUrl=response.body.match(/<a href=\"([^>]+)\">/i)[1]
+				else
+					redirectUrl=response['location']
+				end
+				if redirectUrl.start_with?('/')
+					redirectUrl = "#{uri.scheme}://#{uri.host}#{redirectUrl}"
+				end
+				uri = URI.parse(redirectUrl)
+				puts "redirectUrl:" + redirectUrl 
+				http = Net::HTTP.new(uri.host, uri.port)
+				http.use_ssl = (uri.scheme=="https").to_s
+				request = Net::HTTP::Get.new(uri.request_uri)
+				response = http.request(request)
+			end
+		rescue => e
+			puts "http.request(request) error"
+			vboxDownloaded=false
+		end
+		if vboxDownloaded
+			puts "now download"
+			begin
+				Net::HTTP.start(uri.host, uri.port, :use_ssl => (uri.scheme=="https")) do |http|
+					request = Net::HTTP::Get.new uri
+					http.request request do |response|
+						fileSize = response['content-length'].to_i
+						amountDownloaded = 0
+						open filePath, 'wb' do |io| # 'b' opens the file in binary mode 
+							response.read_body do |chunk|
+								io.write chunk
+								amountDownloaded += chunk.size
+								printf("\rProgress: %.2f%" % (amountDownloaded.to_f / fileSize * 100))
+							end
+						end
+					end
+				end
+				puts
+			rescue => e
+				puts "http.request(request) error"
+				vboxDownloaded=false
+			end
+		end
+	end
+	return vboxDownloaded
+end
+
+def uploadArtifactToArtifactory (filePath, vagrantArtifactoryRepo, vagrantBoxOs, vagrantBoxOsVersion, vagrantBoxVersion)
+	if File.exist?(filePath)
+	#https://stackoverflow.com/questions/12097491/uploading-a-file-using-ruby-nethttp-api-to-a-remote-apache-server-failing-with
+	#	require 'net/http/post/multipart'
+	#	curl -H "X-JFrog-Art-Api:%VAGRANT_ARTIFACTORY_API_KEY%" -T bionic64-20190116.vbox "https://artifact.tecnalia.com/reunionart-vagrant-dev/ubuntu/bionic64_virtualbox_20190116.0.0;box_name=ubuntu/bionic64;box_provider=virtualbox;box_version=20190116.0.0"
+		artifactUploaded=true
+		fileName=File.basename(filePath)
+		vagrantBoxUrl="https://" +  $artifactoryHost + "/"  + vagrantArtifactoryRepo + "/" + vagrantBoxOs + "/" + vagrantBoxOsVersion + "-" + vagrantBoxVersion + ";box_name=" + vagrantBoxOs + "/" + vagrantBoxOsVersion + ";box_provider=virtualbox;box_version=" +  vagrantBoxVersion
+		
+		puts 'curl -H "X-JFrog-Art-Api:' + $artifactoryApiKey + '" -T ' + filePath + ' "' + vagrantBoxUrl + '"' if $dryRun 
+		
+		uri = URI.parse(vagrantBoxUrl)
+		http = Net::HTTP.new(uri.host, uri.port)
+		http.use_ssl = (uri.scheme=="https")
+		
+		File.open(filePath, 'rb') do |io|
+			begin
+				request = Net::HTTP::Put.new(uri.request_uri)
+				request["X-JFrog-Art-Api"] = $artifactoryApiKey
+				fileSize=io.size
+				request.content_length = fileSize
+				request.body_stream = io
+				Net::HTTP::UploadProgress.new(request) do |progress|
+					printf("\rProgress: %.2f%" % (100.0 * progress.upload_size/fileSize ))
+				end
+				puts
+				response = http.request(request)
+				if (response.kind_of? Net::HTTPSuccess)
+					artifactUploaded=true
+				else
+					puts "response: " + response.to_s if $dryRun 
+				end
+			rescue => e
+				puts "http.request(request) error"
+				puts e
+				artifactUploaded=false
+			end
+		end
+		return artifactUploaded
+	end
+end
+
+def provisionVBoxFromVagrant (config, vagrantConfig)
+	if $noActionProvision
+		#first we check if we are going to use vagrant binary cache and we are in up command
+		if (ARGV[0] == "up" and $useVagrantBinaryCache == "Y")
+			# then we check if the image exist
+			# something like curl -H "X-JFrog-Art-Api:%ARTIFACTORY_API_KEY%" "https://artifact.tecnalia.com/api/storage/reunionart-vagrant-dev/ubuntu/bionic64_virtualbox_20190116.0.0"
+			vagrantArtifactoryRepo = vagrantConfig['vagrant']['vagrant_artifactory_repo'].to_s.strip
+			vagrantBoxOs = vagrantConfig['vagrant']['vagrant_box_os'].to_s.strip
+			vagrantBoxOsVersion = vagrantConfig['vagrant']['vagrant_box_os_version'].to_s.strip
+			vagrantBoxVersion = vagrantConfig['vagrant']['vagrant_box_version'].to_s.strip
+			if ($artifactoryHost!="" and vagrantArtifactoryRepo!="" and vagrantBoxOs!="" and vagrantBoxOsVersion!="" and vagrantBoxVersion!="" ) then
+				vboxPresent = checkIfArtifactExistInArtifactory(vagrantArtifactoryRepo, vagrantBoxOs, vagrantBoxOsVersion, vagrantBoxVersion)
+				if (!vboxPresent) then
+					# if it is not there we try to download
+					if ( vagrantConfig['vagrant']['push'].to_s.strip == 'Y')
+						# si estamos en push lo bajamos y lo subimos
+						dirname = $projectTmpFolder
+						unless File.directory?(dirname)
+						  FileUtils.mkdir_p(dirname)
+						end
+						vboxFile=dirname + "/" + vagrantBoxOs + "-" + vagrantBoxOsVersion + "-" + vagrantBoxVersion + ".vbox"
+						vboxDownloaded=downloadVboxFromVagrantUp(vboxFile, vagrantBoxOs, vagrantBoxOsVersion, vagrantBoxVersion)
+						if vboxDownloaded then
+							uploaded=uploadArtifactToArtifactory(vboxFile, vagrantArtifactoryRepo, vagrantBoxOs, vagrantBoxOsVersion, vagrantBoxVersion)
+							puts "uploaded: " + uploaded.to_s
+							vboxPresent=true if uploaded
+							# if we succeded downloading we upload to artifactroy
+							
+						end
+					end
+				end
+				if vboxPresent then
+					if $dryRun then
+						puts "config.vm.box_url = https://" + $artifactoryUserNameEncoded + ":" + $artifactoryApiKeyEncoded + "@" + $artifactoryHost + "/"  + vagrantArtifactoryRepo + "/" + vagrantBoxOs + "/" + vagrantBoxOsVersion + "-" + vagrantBoxVersion
+					else
+						config.vm.box_url = "https://" + $artifactoryUserNameEncoded + ":" + $artifactoryApiKeyEncoded + "@" + $artifactoryHost + "/"  + vagrantArtifactoryRepo + "/" + vagrantBoxOs + "/" + vagrantBoxOsVersion + "-" + vagrantBoxVersion
+					end
+				end
+			end
+		end
+	end
+end
+
+def configureUbuntuSources (config, vagrantConfig)
+	if vagrantConfig['general']!=nil 
+		debianRepo=vagrantConfig['general']['debian_repo']
+		if debianRepo!=nil and config.vm.box =~ /^ubuntu.*$/ then
+			if $dryRun then
+				puts "config.vm.provision \"shell\", name: \"setupDebianSources\", path: \"setupDebianSources.sh\", args:[" + $useDebianBinaryCache + ", " + $artifactoryHost+"/"+debianRepo + ", " + $artifactoryUserNameEncoded + ", " + $artifactoryApiKeyEncoded + "]"
+			else
+				config.vm.provision "shell", name: "setupDebianSources", path: "setupDebianSources.sh", args:[ $useDebianBinaryCache, $artifactoryHost + "/" + debianRepo, $artifactoryUserNameEncoded,$artifactoryApiKeyEncoded]
+			end
+		end
+	end
+end
+
+def initiateVagrantStatsCollection (config)
+	if $dryRun then
+		puts "config.vm.provision \"shell\", name: \"initiateVagrantStatsCollection\", path: \"vagrantStatsCollection.sh\", args:[\"initiate\", \"/vagrant/.vagrant/vagrantStats\"]"
+	else
+		config.vm.provision "shell", name: "initiateVagrantStatsCollection", path: "vagrantStatsCollection.sh", args:["initiate", "/vagrant/.vagrant/vagrantStats"]
+	end
+end
+
+def finalizeVagrantStatsCollection (config)
+	if $dryRun then
+		puts "config.vm.provision \"shell\", name: \"finalizeVagrantStatsCollection\", path: \"vagrantStatsCollection.sh\", args:[\"finalize\", \"/vagrant/.vagrant/vagrantStats\"]"
+	else
+		config.vm.provision "shell", name: "finalizeVagrantStatsCollection", path: "vagrantStatsCollection.sh", args:["finalize", "/vagrant/.vagrant/vagrantStats"]
+	end
+end
+
+def preDockerSetup (config)
+	if $dryRun then
+		puts "config.vm.provision \"shell\", name: \"preDockerSetup\", path: \"preDockerSetup.sh\""
+	else
+		config.vm.provision "shell", name: "preDockerSetup.sh", path: "preDockerSetup.sh"
+	end
+end
+
+def dockerInstall (config)
+	if $dryRun then
+		puts "config.vm.provision \"docker\""
+	else
+		config.vm.provision "docker"
+	end
+end
+
+def dcckerNetworkConfigure (config, vagrantConfig)
+	# "Docker install and network setup:"
+	containersConfigurationNetwork=""
+	if vagrantConfig['containers_configuration']!=nil and vagrantConfig['containers_configuration']['general']!=nil and vagrantConfig['containers_configuration']['general']['network']!=nil then 
+		containersConfigurationNetwork=vagrantConfig['containers_configuration']['general']['network'].to_s.strip
+	end
+	if containersConfigurationNetwork!="" then
+		config.vm.provision "docker"
+		if $dryRun then
+			puts "config.vm.provision \"docker\"  do |d|"
+			puts "    d.post_install_provision \"shell\", inline:\"docker network create --driver=bridge --subnet=172.19.0.0/24 --gateway=172.19.0.1 " + containersConfigurationNetwork + " > /dev/null 2>&1 || true\""
+			puts "end"
+		else
+			config.vm.provision "docker" do |d|
+				d.post_install_provision "shell", inline:"docker network create --driver=bridge --subnet=172.19.0.0/24 --gateway=172.19.0.1 " + containersConfigurationNetwork + " > /dev/null 2>&1 || true"
+			end
+		end
+	end
+end
+
+def configureDockerMirror (config, vagrantConfig)
+	dockerRepoHost=vagrantConfig['general']['docker_repo_host']
+	dockerRepoHost="" if dockerRepoHost==nil
+	if $dryRun then
+		puts "config.vm.provision \"shell\", name: \"setupDockerMirror\", path: \"setupDockerMirror.sh\", args:[" + $useDockerBinaryCache + ", " + dockerRepoHost + ", " + $artifactoryUserName + ", " + $artifactoryApiKey
+	else
+		config.vm.provision "shell", name: "setupDockerMirror", path: "setupDockerMirror.sh", args:[$useDockerBinaryCache, dockerRepoHost, $artifactoryUserName, $artifactoryApiKey]
+	end
+end
+
+def provideContainer (config, vagrantConfig, i)
+	if $dryRun then
+		puts "config.vm.provision \"shell\", name: \"setupDockerMirror\", path: \"setupDockerMirror.sh\", args:[" + $useDockerBinaryCache + ", " + dockerRepoHost + ", " + $artifactoryUserName + ", " + $artifactoryApiKey
+	else
+		config.vm.provision "shell", name: "setupDockerMirror", path: "setupDockerMirror.sh", args:[$useDockerBinaryCache, dockerRepoHost, $artifactoryUserName, $artifactoryApiKey]
+	end
+end
+
+def provideImage (config, vagrantConfig, container)
+	imageName=container[0]
+	if container[1]!=nil and container[1]['image_name']!=nil
+		imageName=container[1]['image_name']
+	end
+	imageName=$projectName + "/" + imageName
+	# we will asume that the version is going to be local by default
+	imageVersion="local"
+	#unless we have something different in the general configuration
+	if vagrantConfig['containers_configuration']!=nil and vagrantConfig['containers_configuration']['general']!=nil and vagrantConfig['containers_configuration']['general']['image_version']!=nil
+		imageVersion=vagrantConfig['containers_configuration']['general']['image_version']
 	end	
+	#or in the container configuration
+	if container[1]!=nil and container[1]['image_version']!=nil
+		imageVersion=container[1]['image_version']
+	end
 	
-  config.vm.provider "virtualbox" do |vb|
-	vb.gui = true
-    vb.customize ["modifyvm", :id, "--memory", vagrant_instance_memory_mbs]
-	vb.customize ["modifyvm", :id, "--cpus", vagrant_instance_cores]
-  end
-  # Mapeo puertos
-  if start_monitoring == 'Y'
-	config.vm.network :forwarded_port, guest: 3000, host: 3000
-	config.vm.network :forwarded_port, guest: 8086, host: 8086
-	config.vm.network :forwarded_port, guest: 10080, host: 10080
-  end
-	if start_optimus == 'Y'
-		config.vm.network :forwarded_port, guest: 11080, host: 11080
-	end
-	if start_jhipster_acsmi == 'Y'
-		config.vm.network :forwarded_port, guest: 3306, host: 3306
-		config.vm.network :forwarded_port, guest: 12080, host: 12080
-		config.vm.network :forwarded_port, guest: 13080, host: 13080
-		config.vm.network :forwarded_port, guest: 14080, host: 14080
-		config.vm.network :forwarded_port, guest: 14086, host: 14086
+	if $dryRun then
+		puts "config.vm.provision \"shell\", name: \"provideImage\", path: \"provideImage.sh\", args:[" + imageName + ", " + imageVersion + "]"
+	else
+		config.vm.provision "shell", name: "provideImage", path: "provideImage.sh", args:[imageName, imageVersion]
+	end
+end
+
+def provideImages (config, vagrantConfig)
+	$provideList.each{
+		|i|
+		provideImage(config, vagrantConfig, i)
+	}
+end
+
+def getDockerfileFromGit (config, vagrantConfig, container, imageVersion)
+	# we need to clone or pull from git and we need the repo the location if not the same as the name
+	gitRepo=nil
+	#unless we have something different in the general configuration
+	if vagrantConfig['containers_configuration']['general']!=nil and vagrantConfig['containers_configuration']['general']['git_repo']!=nil
+		gitRepo=vagrantConfig['containers_configuration']['general']['git_repo']
+	end
+	if container[1]!=nil and container[1]['build_conf']!=nil and container[1]['build_conf']['git_repo']!=nil 
+		gitRepo=container[1]['build_conf']['git_repo']
+	end
+	if gitRepo==nil then
+		abort "git repo is needed for build configuration of component #{container[0]}"
+	end
+	
+	folderInGit=container[1]['build_conf']['folder_in_git']
+	repoName= /.*\/(.*)\..*/.match(gitRepo)[1]
+	gitRepoFolder="/git/" + repoName
+	
+	if $printCommands then
+		puts "git clone " + gitRepo + " " + gitRepoFolder
+	end
+	
+	if $dryRun then
+		puts "config.vm.provision \"shell\", name: \"getDockerfileFromGit\", path: \"getDockerfileFromGit.sh\", args:[" + gitRepo + ", " + gitRepoFolder + ", " + imageVersion + ", " + $gitUserNameEncoded + ", " + $gitApiKeyEncoded + "]"
+	else
+		config.vm.provision "shell", name: "getDockerfileFromGit", path: "getDockerfileFromGit.sh", args:[gitRepo,gitRepoFolder,imageVersion,$gitUserNameEncoded,$gitApiKeyEncoded]
+	end
+	
+	targetDockerfileFolder=""
+	if folderInGit==nil then
+		targetDockerfileFolder="/git/#{repoName}"
+	else
+		targetDockerfileFolder="/git/#{repoName}/#{folderInGit}"
+	end
+	return targetDockerfileFolder
+end
+
+def copyResourcesToDockerfileFromGit (config, vagrantConfig, container, targetDockerfileFolder)
+	foldersMapping=container[1]['build_conf']['build_folders_mapping']
+	if foldersMapping!=nil
+		resources=foldersMapping['resources']
+		if (resources!=nil) then
+			resources.each {
+				|i|
+				target=i['source']['target']
+				if target!=nil then
+					targetFolder= targetDockerfileFolder + "/resources"
+					if $dryRun then
+						puts "config.vm.provision \"shell\", name: \"copyResourcesToDockerfileFromGit\", path: \"copyResourcesToDockerfileFromGit.sh\", args:[/#{container[0]}/resources/#{target}, "#{targetFolder}/#{target}]"
+					else
+						config.vm.provision "shell", name: "copyResourcesToDockerfileFromGit", path: "copyResourcesToDockerfileFromGit.sh", args:["/#{container[0]}/resources/#{target}","#{targetFolder}/#{target}"]
+					end
+				end
+			}
+		end
+	end
+end
+
+def pushImageToArtifactory (config, vagrantConfig, imageName, imageVersion)
+	dockerRepoUrl=vagrantConfig['general']['docker_repo_host']
+	if $useDockerBinaryCache == "Y" and dockerRepoUrl!=nil then
+		if $dryRun then
+			puts "config.vm.provision \"shell\", name: \"pushImageToArtifactory\", path: \"pushImageToArtifactory.sh\", args:[" + dockerRepoUrl + ", " + imageName + ", " + imageVersion + ", " + $artifactoryUserName + ", " + $artifactoryApiKey + "]"
+		else
+			config.vm.provision "shell", name: "pushImageToArtifactory", path: "pushImageToArtifactory.sh", args:[dockerRepoUrl,imageName,imageVersion,$artifactoryUserName,$artifactoryApiKey]
+		end
+	end
+end
+
+def buildImage (config, vagrantConfig, container)
+	imageName=container[0]
+	if container[1]==nil or container[1]['build_conf']==nil 
+		abort "build_conf is required to build image"
+	end
+	if container[1]['image_name']!=nil
+		imageName=container[1]['image_name']
+	end
+	imageName=$projectName + "/" + imageName
+	# we will asume that the version is going to be local by default
+	imageVersion="local"
+	#unless we have something different in the general configuration
+	if vagrantConfig['containers_configuration']['general']!=nil and vagrantConfig['containers_configuration']['general']['image_version']!=nil
+		imageVersion=vagrantConfig['containers_configuration']['general']['image_version']
 	end	
+	#or in the container configuration
+	if container[1]['image_version']!=nil
+		imageVersion=container[1]['image_version']
+	end
 	
-  # Provisionar Shell para las variables de entorno
-  config.vm.provision "shell", name: "sudo", inline: <<-SHELL
-	echo export CREDENTIALS_GIT=`cat /credentials/git/.git`  >> /etc/environment
-	cat /credentials/git/author.git  >> /etc/environment
-  SHELL
-  
-
-  config.vm.provision "shell", name: "sudo", inline: <<-SHELL
-	echo 'Dpkg::Options {"--force-confdef"; "--force-confold";}' > /etc/apt/apt.conf.d/local
-	echo 'DOCKER_OPTS="--config-file=/etc/docker/daemon.json"' > /etc/default/docker
-	mkdir -p /etc/docker
-	echo '{"bip": "172.18.0.1/24","fixed-cidr": "172.18.0.0/24"}' > /etc/docker/daemon.json
-	#echo '{"default-gateway": "172.18.0.1","graph": "/docker"}' > /etc/docker/daemon.json
-  SHELL
-  
-  config.vm.provision "shell", name: "dockerContainerCleaning", inline: <<-SHELL
-    docker rm $(docker ps -a -q) -f > /dev/null 2>&1 || true
-  SHELL
-
-  config.vm.provision "docker" do |d|
-  if start_monitoring == 'Y'
-		d.build_image "/docker.grafana.server", args: "-t tecnalia/eu.decideh2020.adapt.monitoring.grafana.server"
-		#d.run "tecnalia/eu.decideh2020.adapt.monitoring.grafana.server", args: "-d -p 3000:3000 --restart=always -e 'GF_SERVER_ROOT_URL=http://grafana.esilab.org'  -e 'GF_SECURITY_ADMIN_PASSWORD=admin' --name eu.decideh2020.adapt.monitoring.grafana.server --add-host #{ENV['SOCKSHOP_IP']}"
-		#d.run "tecnalia/eu.decideh2020.adapt.monitoring.grafana.server", args: "-d -p 3000:3000 --restart=always -e 'GF_SERVER_ROOT_URL=http://grafana.esilab.org'  -e 'GF_SECURITY_ADMIN_PASSWORD=admin' -e SOCKSHOP_DOMAIN=integration.decideh2020.lan.esilab.org --name eu.decideh2020.adapt.monitoring.grafana.server --add-host influxdb:172.18.0.1"
-		d.run "tecnalia/eu.decideh2020.adapt.monitoring.grafana.server", args: "-d -p 3000:3000 --restart=always -e 'GF_SERVER_ROOT_URL=http://grafana.esilab.org'  -e 'GF_SECURITY_ADMIN_PASSWORD=admin'  --name eu.decideh2020.adapt.monitoring.grafana.server --add-host influxdb:172.18.0.1 --add-host sockshop:172.26.252.81"
-		d.build_image "/docker.influxdb.server", args: "-t tecnalia/eu.decideh2020.adapt.monitoring.influxdb.server"
-		d.run "tecnalia/eu.decideh2020.adapt.monitoring.influxdb.server", args: "-d -p 8086:8086 --restart=always -e INFLUXDB_DB='decideh2020adapt' --name eu.decideh2020.adapt.monitoring.influxdb.server"
-		d.build_image "/docker.monitoring.server", args: "-t tecnalia/eu.decideh2020.adapt.monitoring.management.server --build-arg GIT_CREDENTIALS=$CREDENTIALS_GIT "
-		d.run "tecnalia/eu.decideh2020.adapt.monitoring.management.server", args: "-d -p 10080:8080 --restart=always --name eu.decideh2020.adapt.monitoring.management.server"
-		d.build_image "/docker.telegraf.server", args: "-t tecnalia/eu.decideh2020.adapt.monitoring.telegraf.server"
-		#d.run "tecnalia/eu.decideh2020.adapt.monitoring.telegraf.server", args: "-d --restart=always --name eu.decideh2020.adapt.monitoring.telegraf.server --add-host influxdb:172.18.0.1 --add-host sockshop:172.26.252.81"
-		#d.run "tecnalia/eu.decideh2020.adapt.monitoring.telegraf.server", args: "-d --restart=always --name eu.decideh2020.adapt.monitoring.telegraf.server --env SOCKSHOP_DOMAIN=integration.decideh2020.lan.esilab.org --add-host influxdb:172.18.0.1 --add-host integration.decideh2020.lan.esilab.org:172.26.252.81"
-		d.run "tecnalia/eu.decideh2020.adapt.monitoring.telegraf.server", args: "-d --restart=always --name eu.decideh2020.adapt.monitoring.telegraf.server --add-host influxdb:172.18.0.1 --add-host sockshop:172.26.252.81"
-	end
-	if build_jhipster_repo == 'Y'
-	    d.build_image "/docker.springboot.server.repo", args: "-t localhost:5000/eu.decideh2020.int.springboot.server.repo --build-arg GIT_CREDENTIALS=$CREDENTIALS_GIT"
-	end
-	if start_jhipster_acsmi == 'Y'
-		d.build_image "/docker.acsmi.mysql.server", args: "-t tecnalia/eu.decideh2020.int.acsmi.mysql.server"
-		d.run "tecnalia/eu.decideh2020.int.acsmi.mysql.server", args: "-d -p 3306:3306 --name eu.decideh2020.int.acsmi.mysql.server --env MYSQL_ALLOW_EMPTY_PASSWORD=yes"
-		d.build_image "/docker.acsmi.registry.server", args: "-t tecnalia/eu.decideh2020.acsmi.registry.server"
-		d.run "tecnalia/eu.decideh2020.acsmi.registry.server", args: "-d -p 8761:8761 --restart=always --name eu.decideh2020.acsmi.registry.server"
-		d.build_image "/docker.acsmi.backend.services.server", args: "-t tecnalia/eu.decideh2020.acsmi.backend.services.server"
-		d.run "tecnalia/eu.decideh2020.acsmi.backend.services.server", args: "-d --restart=always --name eu.decideh2020.acsmi.backend.services.server --add-host mysql:172.18.0.1 --add-host registry:172.18.0.1"
-		d.build_image "/docker.acsmi.frontend.server", args: "-t tecnalia/eu.decideh2020.acsmi.frontend.server"
-		d.run "tecnalia/eu.decideh2020.acsmi.frontend.server", args: "-d -p 12080:8080 --restart=always --name eu.decideh2020.acsmi.frontend.server --add-host mysql:172.18.0.1 --add-host registry:172.18.0.1"
-		d.build_image "/docker.acsmi.backend.services.server.test.00", args: "-t tecnalia/eu.decideh2020.acsmi.backend.services.server.test.00"
-		d.run "tecnalia/eu.decideh2020.acsmi.backend.services.server.test.00", args: "-d --name eu.decideh2020.acsmi.backend.services.server.test.00 --restart=no --env MYSQL_DB_USER=root --env MYSQL_DB_NAME=acsmi_backend_services_server --env MYSQL_DB_HOST=172.18.0.1"
-		d.build_image "/docker.acsmi.backend.services.testcors.server", args: "-t tecnalia/eu.decideh2020.acsmi.backend.services.testcors.server --build-arg GIT_CREDENTIALS=$CREDENTIALS_GIT"
-		d.run "tecnalia/eu.decideh2020.acsmi.backend.services.testcors.server", args: "-d -p 13080:80 --restart=always --name eu.decideh2020.acsmi.backend.services.testcors.server "
-		d.build_image "/docker.acsmi.monitoring.server", args: "-t tecnalia/eu.decideh2020.acsmi.monitoring.management.server --build-arg GIT_CREDENTIALS=$CREDENTIALS_GIT "
-		d.run "tecnalia/eu.decideh2020.acsmi.monitoring.management.server", args: "-d -p 14080:8080 --restart=always --name eu.decideh2020.acsmi.monitoring.management.server"
-		d.build_image "/docker.acsmi.influxdb.server", args: "-t tecnalia/eu.decideh2020.acsmi.monitoring.influxdb.server"
-		d.run "tecnalia/eu.decideh2020.acsmi.monitoring.influxdb.server", args: "-d -p 14086:8086 --restart=always -e INFLUXDB_DB='decideh2020acsmi' --name eu.decideh2020.acsmi.monitoring.influxdb.server"
-		d.build_image "/docker.acsmi.telegraf.server", args: "-t tecnalia/eu.decideh2020.acsmi.monitoring.telegraf.server"
-		d.run "tecnalia/eu.decideh2020.acsmi.monitoring.telegraf.server", args: "-d --restart=always --name eu.decideh2020.acsmi.monitoring.telegraf.server --add-host influxdb:172.18.0.1 --add-host sockshop:172.26.252.81"
+	targetDockerfileFolder = "/" + container[0]
+	if imageVersion!="local" then
+		targetDockerfileFolder=getDockerfileFromGit(config, vagrantConfig, container, imageVersion)
+		copyResourcesToDockerfileFromGit config, vagrantConfig, container, targetDockerfileFolder
 	end
-  end
-	if start_jhipster_acsmi == 'Y'
-	  # Provisionar Shell para las variables de entorno
-	  config.vm.provision "shell", name: "sudo", path: "acsmi.client.generate.sh"
+	
+	buildParams=container[1]['build_conf']['build_params']
+	buildParams="" if buildParams==nil
+	if $printCommands then
+		puts "docker build " + targetDockerfileFolder + " -t " + imageName + ":" +  imageVersion + " " + buildParams + " --build-arg VERSION=" + imageVersion
 	end
-  config.vm.provision "docker" do |d|
-	if start_optimus == 'Y'
-		d.build_image "/docker.optimus.server", args: "-t tecnalia/eu.decideh2020.optimus.server --build-arg GIT_CREDENTIALS=$CREDENTIALS_GIT --build-arg APPMANAGER_VERSION=7de6f86cbc701ea55db3083a023a12876682a856 --build-arg ACSMI_VERSION=5a8fa05fedc78de9dc472e348de94487bb51a754"
-		d.run "tecnalia/eu.decideh2020.optimus.server", args: "-d -p 11080:8080 --restart=always --name eu.decideh2020.optimus.server"
+	if $dryRun then
+		puts "config.vm.provision \"shell\", name: \"buildImage\", path: \"buildImage.sh\", args:[" + targetDockerfileFolder + ", " + imageName + ", " + imageVersion + ", " + buildParams + "]"
+	else
+		config.vm.provision "shell", name: "buildImage", path: "buildImage.sh", args:[targetDockerfileFolder,imageName,imageVersion,buildParams]
 	end
+	
+	if (imageVersion!="local") then
+		push=container[1]['build_conf']['push']
+		if push=='Y' then
+			pushImageToArtifactory config, vagrantConfig, imageName, imageVersion
+		end
+	end
+end
 
-  end
-  
+def buildImages (config, vagrantConfig)
+	$buildList.each{
+		|i|
+		buildImage(config, vagrantConfig, i)
+	}
+end
+
+def runImage (config, vagrantConfig, container)
+	imageName=container[0]
+	if container[1]!=nil and container[1]['image_name']!=nil
+		imageName=container[1]['image_name']
+	end
+	imageName=$projectName + "/" + imageName
+	# we will asume that the version is going to be local by default
+	imageVersion="local"
+	#unless we have something different in the general configuration
+	if vagrantConfig['containers_configuration']!=nil and vagrantConfig['containers_configuration']['general']!=nil and vagrantConfig['containers_configuration']['general']['image_version']!=nil
+		imageVersion=vagrantConfig['containers_configuration']['general']['image_version']
+	end	
+	#or in the container configuration
+	if container[1]!=nil and container[1]['image_version']!=nil
+		imageVersion=container[1]['image_version']
+	end
+	params = ""
+	if container[1]!=nil and container[1]['run_conf']!=nil and container[1]['run_conf']['run_params']!=nil
+		params=container[1]['run_conf']['run_params']
+	end
+	networkConfiguration=""
+	if vagrantConfig['containers_configuration']!=nil and vagrantConfig['containers_configuration']['general']!=nil and vagrantConfig['containers_configuration']['general']['network']!=nil then 
+		containersConfigurationNetwork=vagrantConfig['containers_configuration']['general']['network'].to_s.strip
+		if containersConfigurationNetwork!="" then
+			networkConfiguration=" --network " + containersConfigurationNetwork
+		end
+	end
+	
+	if $printCommands then
+		puts "docker run -d --name " + container[0] + " " + params + " " + networkConfiguration + " " +  $projectName + "/" + container[0]
+	end
+	
+	if $dryRun then
+		puts "config.vm.provision \"shell\", name: \"removingContainerInCaseItExist\", inline: <<-SHELL"
+		puts "	docker rm -f \"#{container[0]}\" > /dev/null 2>&1 || true"
+		puts "SHELL"
+		puts "config.vm.provision \"docker\" do |d|"
+		puts "	d.run " + $projectName + "/" + container[0] + ":" + imageVersion + ", args: \"--name " + container[0] +  params + networkConfiguration
+		puts "end"
+	else
+		config.vm.provision "shell", name: "removingContainerInCaseItExist", inline: <<-SHELL
+			docker rm -f "#{container[0]}" > /dev/null 2>&1 || true
+		SHELL
+		config.vm.provision "docker" do |d|
+			d.run $projectName + "/" + container[0] + ":" + imageVersion , args: "--name " + container[0] + " " + params + networkConfiguration
+		end
+	end
 end
 
+def runImages (config, vagrantConfig)
+	$runList.each{
+		|i|
+		runImage(config, vagrantConfig, i)
+	}
+end
+
+	#
+	# "*****************************************************************************"
+	# "***********                      CONFIGURE                       ************"
+	# "*****************************************************************************"
+	#
+
+Vagrant.configure("2") do |config|
+	unless $mute
+		puts "TASK - processContainersConfiguration: mapfolders y mapnetworks"
+		processContainersConfiguration config, vagrantConfig['containers_configuration']
+		printContainerLists if $dryRun
+		puts "TASK - resolveContainersDependencies: provisionlist, buildlist, runlist"
+		resolveContainersDependencies vagrantConfig['containers_configuration']
+		printContainerLists 
+		puts "waiting 5 seconds"
+		sleep 5
+		
+		setBeforeUpTrigger config
+		setAfterUpTrigger config
+	end
+		config.vm.box = "ubuntu/bionic64"
+	unless $mute
+		puts "TASK - provisionVBoxFromVagrant"
+		provisionVBoxFromVagrant config, vagrantConfig
+		
+		puts "TASK - Create Virtual Machine"
+		vagrant_instance_memory_mbs = vagrantConfig['vagrant']['memory'].to_s.strip
+		vagrant_instance_cores = vagrantConfig['vagrant']['cores'].to_s.strip
+		vagrant_instance_name = vagrantConfig['vagrant']['name'].to_s.strip	
+		config.vm.provider "virtualbox" do |vb|
+			vb.name = vagrant_instance_name
+			vb.gui = true
+			vb.customize ["modifyvm", :id, "--memory", vagrant_instance_memory_mbs]
+			vb.customize ["modifyvm", :id, "--cpus", vagrant_instance_cores]
+			#https://serverfault.com/questions/453185/vagrant-virtualbox-dns-10-0-2-3-not-working?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa
+			vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
+			#https://betacloud.io/get-rid-of-ubuntu-xenial-16-04-cloudimg-console-log/
+			vb.customize [ "modifyvm", :id, "--uartmode1", "disconnected" ]
+		end
+		# "Configuring network:"
+		# config.vm.network :public_network
+		
+		vagrant_instance_hdd_size = vagrantConfig['vagrant']['size'].to_s.strip
+		unless vagrant_instance_hdd_size =='' or vagrant_instance_hdd_size =='10GB'
+			if Vagrant.has_plugin?("vagrant-disksize") then
+				puts "Plugin vagrant-disksize: OK" unless $mute
+				config.disksize.size = vagrant_instance_hdd_size
+			else
+				abort 'Missing vagrant-disksize plugin! Make sure to install it by `vagrant plugin install vagrant-disksize`.'
+			end
+		end 
+		
+		docker_repo = vagrantConfig['vagrant']['docker_repo'].to_s.strip
+		docker_repo_size_mbs= vagrantConfig['vagrant']['docker_repo_size'].to_s.strip
+		if (docker_repo!= "" and docker_repo_size_mbs!="") then 
+			if Vagrant.has_plugin?("vagrant-persistent-storage") then
+				puts "Plugin vagrant-persistent-storage: OK" unless $mute
+				# "Configuring persistent storage:"
+				config.persistent_storage.diskdevice = '/dev/sdc'
+				config.persistent_storage.enabled = true
+				config.persistent_storage.use_lvm = false
+				config.persistent_storage.part_type_code  = '83'
+				config.persistent_storage.location = docker_repo
+				config.persistent_storage.size = Integer(docker_repo_size_mbs) 
+				config.persistent_storage.mountname = 'docker'
+				config.persistent_storage.filesystem = 'ext4'
+				config.persistent_storage.mountpoint = '/var/lib/docker'
+			else
+				abort 'Missing vagrant-persistent-storage plugin! Make sure to install it by `vagrant plugin install vagrant-persistent-storage`.'
+			end
+		end
+		
+		puts "TASK - Configure Ubuntu Sources"
+		configureUbuntuSources config, vagrantConfig
+		
+		puts "TASK - initiate statistics collection"
+		initiateVagrantStatsCollection config
+		
+		puts "TASK - pre Docker Setup"
+		preDockerSetup config
+		
+		puts "TASK - Docker Install"
+		dockerInstall config
+		
+		puts "TASK - Docker Network Configure"
+		dcckerNetworkConfigure config, vagrantConfig
+		
+		puts "TASK - Docker Mirror Setup"
+		configureDockerMirror config, vagrantConfig
+		
+		puts "TASK - provide Docker Image"
+		provideImages config, vagrantConfig
+		
+		puts "TASK - built Docker Image"
+		if $printCommands then 
+			puts "echo NOTE: gathering docker build context may take significant time even 10 mins"
+		end
+		buildImages config, vagrantConfig
+		
+		puts "TASK - run Docker Image"
+		runImages config, vagrantConfig
+		
+		if $printCommands then 
+			puts "waiting 25 seconds"
+			sleep 25
+		end
+		
+		puts
+		puts "*****************************************************************************"
+		puts "***********                   FINISH PROVISION                   ************"
+		puts "*****************************************************************************"
+		puts
+		
+		puts "TASK - finalize statistics collection"
+		finalizeVagrantStatsCollection config
+		
+		puts
+		puts "*****************************************************************************"
+		puts "***********                 ADDITIONAL RESOURCES                 ************"
+		puts "*****************************************************************************"
+		puts
+		puts "vagrant provision --provision-with dockerContainersCleaning"
+		puts "vagrant provision --provision-with dockerDanglingImagesCleaning"
+		puts "vagrant provision --provision-with dockerImagesCleaning"
+		puts "vagrant provision --provision-with dockerSystemPrune"
+		puts
+		puts
+		puts
+		puts "waiting 5 seconds"
+		sleep 5
+		
+		# in case of we remove all the running containers this must be called vagrant provision dockerContainerCleaning
+		config.vm.provision "dockerContainersCleaning" , type: "shell" , name: "dockerContainersCleaning", run: "never", inline: <<-SHELL
+			echo cleaning docker containers
+			docker rm $(docker ps -a -q) -f > /dev/null 2>&1 || true
+		SHELL
+		# in case of we remove all Dangling the images this must be called vagrant provision dockerImageCleaning
+		config.vm.provision "dockerDanglingImagesCleaning" , type: "shell" , name: "dockerDanglingImagesCleaning", run: "never", inline: <<-SHELL
+			echo cleaning docker images
+			docker rmi $(docker images -f "dangling=true" -q) > /dev/null 2>&1 || true
+		SHELL
+		# in case of we remove all the images this must be called vagrant provision dockerImageCleaning
+		config.vm.provision "dockerImagesCleaning" , type: "shell" , name: "dockerImagesCleaning", run: "never", inline: <<-SHELL
+			echo cleaning docker images
+			docker rmi $(docker images -q) -f > /dev/null 2>&1 || true
+		SHELL
+		# in case of we want to prune
+		config.vm.provision "dockerSystemPrune" , type: "shell" , name: "dockerSystemPrune", run: "never", inline: <<-SHELL
+			echo pruning docker
+			docker system prune -f > /dev/null 2>&1 || true
+		SHELL
+	end
+end
diff --git a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.vagrant.server.src.dvp/src/main/vagrant/acsmi.client.generate.sh b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.vagrant.server.src.dvp/src/main/vagrant/acsmi.client.generate.sh
deleted file mode 100644
index 5ca759c07394dbcc6268111a8a2f412bf9675f71..0000000000000000000000000000000000000000
--- a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.vagrant.server.src.dvp/src/main/vagrant/acsmi.client.generate.sh
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/bin/bash
-echo "Generation acsmi client jaxrs script"
-#apt-get update
-#apt-get install -y wget
-URL="http://localhost:12080/acsmiservices/v2/api-docs"
-TMP_FILE="/tmp/swagger.json"
-ORIG_FILE="/WP5/ACSmI_discovery/eu.decideh2020.acsmi.backend.services.server/src/main/resources/swagger/swagger.json"
-TMP_DIR="/tmp/eu.decideh2020.acsmi.backend.services.client"
-TARGET_DIR="/WP5/ACSmI_discovery/eu.decideh2020.acsmi.backend.services.client"
-
-echo "URL=$URL"
-#$(curl --output /dev/null --silent --head --fail $URL) it does not work it returns 500
-until [[ $(curl --silent $URL) == *"swagger"* ]]; do
-    printf 'waiting for acsmi'
-    sleep 5
-done
-wget -q -O $TMP_FILE $URL
-
-if [[ $(diff $TMP_FILE $ORIG_FILE 2>&1) == "" ]]; then
-	printf 'swagger is equal'
-	exit 0
-fi
-
-# si no es igual tengo que sustituirlo y generar el cliente
-mkdir -p ${ORIG_FILE%/*}
-cp $TMP_FILE $ORIG_FILE
-
-if !  $( java -version 2>&1 >/dev/null | grep -q "Runtime Environment" ) ; then
-	apt-get update
-	apt-get install -y default-jdk
-fi
-
-java -jar /swagger-codegen/modules/swagger-codegen-cli/target/swagger-codegen-cli.jar generate -i $ORIG_FILE -l jaxrs-cxf-client -o $TMP_DIR -c /vagrant/config.json
-
-CHANGED=0
-
-if ! [[ $(diff $TMP_DIR/pom.xml $TARGET_DIR/pom.xml 2>&1) == "" ]]; then
-	printf 'pom.xml is different'
-	cp $TMP_DIR/pom.xml $TARGET_DIR/pom.xml
-	CHANGED=1
-fi
-
-if ! [[ $(diff $TMP_DIR/src/gen/java $TARGET_DIR/src/gen/java 2>&1) == "" ]]; then
-	printf 'code is different'
-	rm -rf $TARGET_DIR/src/gen/java
-	cp -rp $TMP_DIR/src/gen/java $TARGET_DIR/src/gen/java
-	CHANGED=1
-fi
-
-if ((CHANGED)); then
-	cd /WP5
-	git add ${TARGET_DIR#$*/*/}
-	git -c user.email="$GIT_USER_EMAIL" -c user.name="$GIT_USER_NAME" commit -m "adds changed version of acsmi client"
-fi
diff --git a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.vagrant.server.src.dvp/src/main/vagrant/addEnvironmentVariable.sh b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.vagrant.server.src.dvp/src/main/vagrant/addEnvironmentVariable.sh
new file mode 100644
index 0000000000000000000000000000000000000000..b56d2f411b100e85b662ab8498f8af2bdfea852d
--- /dev/null
+++ b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.vagrant.server.src.dvp/src/main/vagrant/addEnvironmentVariable.sh
@@ -0,0 +1,9 @@
+#!/bin/bash -e
+if [ -z "$1" ]
+then
+	echo "\$var is empty"
+	exit
+fi
+
+sed -i "/$1/d" /etc/environment
+echo $1 >> /etc/environment
diff --git a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.vagrant.server.src.dvp/src/main/vagrant/buildImage.sh b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.vagrant.server.src.dvp/src/main/vagrant/buildImage.sh
new file mode 100644
index 0000000000000000000000000000000000000000..8f8b4d5787d92df0a354fab72d5ffd70a347da38
--- /dev/null
+++ b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.vagrant.server.src.dvp/src/main/vagrant/buildImage.sh
@@ -0,0 +1,12 @@
+#!/bin/bash -e
+
+if [ $# -lt 3 ]; then
+    echo "Arguments required: imageName imageVersion [buildParams]"
+fi
+
+targetDockerfileFolder=$1
+imageName=$2
+imageVersion=$3
+buildParams=$4
+
+docker build $targetDockerfileFolder -t $imageName:$imageVersion $buildParams --build-arg VERSION=$imageVersion
diff --git a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.vagrant.server.src.dvp/src/main/vagrant/config.json b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.vagrant.server.src.dvp/src/main/vagrant/config.json
deleted file mode 100644
index 149d0a315b5fb047adedbb13c144c46e375c77d2..0000000000000000000000000000000000000000
--- a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.vagrant.server.src.dvp/src/main/vagrant/config.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
-  "apiPackage": "eu.decideh2020.ACSmI.client.api",
-  "modelPackage": "eu.decideh2020.ACSmI.client.model",
-  "groupId": "eu.decideh2020",
-  "artifactId": "ACSmI-client"
-}
\ No newline at end of file
diff --git a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.vagrant.server.src.dvp/src/main/vagrant/copyResourcesToDockerfileFromGit.sh b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.vagrant.server.src.dvp/src/main/vagrant/copyResourcesToDockerfileFromGit.sh
new file mode 100644
index 0000000000000000000000000000000000000000..f1a41dadd0f587ab84ec276bbbf5e76ba0e51cca
--- /dev/null
+++ b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.vagrant.server.src.dvp/src/main/vagrant/copyResourcesToDockerfileFromGit.sh
@@ -0,0 +1,12 @@
+#!/bin/bash -e
+
+if [ $# -lt 2 ]; then
+    echo "Arguments required: Repo targetFolder"
+fi
+
+sourceFolder=$1
+targetFolder=$2
+
+sourceDirName=$(dirname $targetFolder)
+mkdir -p $sourceDirName
+cp -r $sourceFolder $targetFolder
\ No newline at end of file
diff --git a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.vagrant.server.src.dvp/src/main/vagrant/getDockerfileFromGit.sh b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.vagrant.server.src.dvp/src/main/vagrant/getDockerfileFromGit.sh
new file mode 100644
index 0000000000000000000000000000000000000000..4d8e9a8bd703e5405e8ce834743af2e078c24da9
--- /dev/null
+++ b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.vagrant.server.src.dvp/src/main/vagrant/getDockerfileFromGit.sh
@@ -0,0 +1,61 @@
+#!/bin/bash -e
+function fileAge
+{
+    local fileMod
+    if fileMod=$(stat -c %Y -- "$1")
+    then
+        echo $(( $(date +%s) - $fileMod ))
+    else
+        echo 0
+    fi
+}
+
+function installGit 
+{
+	#we setup de registry beforehand
+	if ! git_loc="$(type -p "git")" || [[ -z $git_loc ]]; then
+		LASTUPDATE=$(fileAge /var/cache/apt/pkgcache.bin)
+		echo apt-get update if $LASTUPDATE \< 604800 \(one week\)
+		if [ "$LASTUPDATE" -gt "604800" ] ||[ "$LASTUPDATE" -eq "0" ]; 
+		then
+			echo updating
+			apt-get update
+		fi
+		apt-get install -y git
+	fi
+}
+
+if [ $# -lt 3 ]; then
+    echo "Arguments required: Repo targetFolder Version [gitUser] [gitPassword]"
+fi
+
+repo=$1
+targetFolder=$2
+version=$3
+gitUserEncoded=$4
+gitPasswordEncoded=$5
+repofix=repo
+
+if [[ ! -z "$gitUserEncoded" ]] && [[ ! -z "$gitPasswordEncoded" ]]   
+then 
+	repofix=${repo/https:\/\//https:\/\/$gitUserEncoded:$gitPasswordEncoded@}
+fi
+installGit
+
+mkdir -p /git  > /dev/null 2>&1 || true
+
+echo "downloading $repo to $targetFolder"
+
+if [ -d "$targetFolder" ]; then
+	git -C $targetFolder checkout --force
+	git -C $targetFolder pull $repofix
+else
+   git clone $repofix $targetFolder
+fi
+
+if [ "$version" != "latest" ]; then
+	git -C $targetFolder checkout $version
+else
+	git -C $targetFolder checkout master
+fi
+
diff --git a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.vagrant.server.src.dvp/src/main/vagrant/preDockerSetup.sh b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.vagrant.server.src.dvp/src/main/vagrant/preDockerSetup.sh
new file mode 100644
index 0000000000000000000000000000000000000000..5f0cc0f3937ccf88affbeb6ce7613667390738b5
--- /dev/null
+++ b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.vagrant.server.src.dvp/src/main/vagrant/preDockerSetup.sh
@@ -0,0 +1,10 @@
+#!/bin/bash -e
+echo 'Dpkg::Options {"--force-confdef"; "--force-confold";}' > /etc/apt/apt.conf.d/local
+echo 'DOCKER_OPTS="--config-file=/etc/docker/daemon.json"' > /etc/default/docker
+
+mkdir -p /etc/docker
+
+# this is not really necesary right know except the part of the dns possibly
+if [ ! -f /etc/docker/daemon.json ]; then
+	echo '{"bip": "172.18.0.1/24","fixed-cidr": "172.18.0.0/24", "dns": ["10.0.2.3"]}' > /etc/docker/daemon.json
+fi
diff --git a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.vagrant.server.src.dvp/src/main/vagrant/provideImage.sh b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.vagrant.server.src.dvp/src/main/vagrant/provideImage.sh
new file mode 100644
index 0000000000000000000000000000000000000000..767a4ad49aa5ca10562d27b341beab933c557e15
--- /dev/null
+++ b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.vagrant.server.src.dvp/src/main/vagrant/provideImage.sh
@@ -0,0 +1,23 @@
+#!/bin/bash -e
+
+if [ $# -lt 2 ]; then
+    echo "Arguments required: imageName imageVersion"
+fi
+
+imageName=$1
+imageVersion=$2
+
+mkdir -p /vagrant/.vagrant > /dev/null 2>&1 || true
+docker image ls --format  '{{ .Repository }} {{ .Tag }}' > /vagrant/.vagrant/images.lst || true
+if grep -q -e "$imageName\s*$imageVersion" "/vagrant/.vagrant/images.lst"; then
+	echo Image $imageName:$imageVersion already provided
+else
+	echo docker pull $imageName:$imageVersion
+	! docker pull $imageName:$imageVersion 
+	docker image ls --format  '{{ .Repository }} {{ .Tag }}' > /vagrant/.vagrant/images.lst || true
+	if ! grep -q -e "$imageName\s*$imageVersion" "/vagrant/.vagrant/images.lst"; then
+		echo pull $imageName:$imageVersion failed you will need either to fix ImageName and Version or Mark it for built
+		exit 1
+	fi
+fi
+
diff --git a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.vagrant.server.src.dvp/src/main/vagrant/pushImageToArtifactory.sh b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.vagrant.server.src.dvp/src/main/vagrant/pushImageToArtifactory.sh
new file mode 100644
index 0000000000000000000000000000000000000000..6fabddf4519a7ad8802e64105c92e84642301e4f
--- /dev/null
+++ b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.vagrant.server.src.dvp/src/main/vagrant/pushImageToArtifactory.sh
@@ -0,0 +1,15 @@
+#!/bin/bash -e
+
+if [ $# -lt 5 ]; then
+    echo "Arguments required: Repo ImageName Version artifactoryUser artifactory password"
+fi
+
+repo=$1
+imageName=$2
+imageVersion=$3
+artifactoryUserName=$4
+artifactoryApiKey=$5
+
+docker login -u $artifactoryUserName -p $artifactoryApiKey $repo
+docker tag $imageName:$imageVersion $repo/$imageName:$imageVersion
+docker push $repo/$imageName:$imageVersion
diff --git a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.vagrant.server.src.dvp/src/main/vagrant/setupDebianSources.sh b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.vagrant.server.src.dvp/src/main/vagrant/setupDebianSources.sh
new file mode 100644
index 0000000000000000000000000000000000000000..ecc26c4a13f1079caca8105647675a53c1e5cbc1
--- /dev/null
+++ b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.vagrant.server.src.dvp/src/main/vagrant/setupDebianSources.sh
@@ -0,0 +1,46 @@
+#!/bin/bash -e
+
+if [ $# -lt 4 ]; then
+    echo "Arguments required: useDebianBinaryCache debianRepoUrl artifactoryUserNameEncoded artifactoryApiKeyEncoded"
+fi
+
+useDebianBinaryCache=$1
+debianRepoUrl=$2
+artifactoryUserNameEncoded=$3
+artifactoryApiKeyEncoded=$4
+
+if [ "$useDebianBinaryCache" == "Y" ] 
+then
+	# we recover the folder of the script this do not work with symlinks https://stackoverflow.com/questions/59895/get-the-source-directory-of-a-bash-script-from-within-the-script-itself
+	if [ ! -f /etc/apt/sources.list.original ]; then
+		echo "save previous configuration"
+		cp -p /etc/apt/sources.list /etc/apt/sources.list.original
+	fi
+	
+	if ! grep -q "$debianRepoUrl" /etc/apt/sources.list
+	then 
+		
+		# apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 9E7A9B1D990CF897
+		apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 9E7A9B1D990CF897  || true
+
+		cat << EOF > /etc/apt/sources.list
+deb [trusted=yes] https://$artifactoryUserNameEncoded:$artifactoryApiKeyEncoded@$debianRepoUrl bionic main restricted universe multiverse
+# not required for my need and they make the update to look
+# deb http://security.ubuntu.com/ubuntu bionic-security main restricted universe multiverse
+# deb [trusted=yes] https://$artifactoryUserNameEncoded:$artifactoryApiKeyEncoded@$debianRepoUrl/all-debian-dev bionic-updates main restricted universe multiverse
+# deb [trusted=yes] https://$artifactoryUserNameEncoded:$artifactoryApiKeyEncoded@$debianRepoUrl/all-debian-dev bionic-backports main restricted universe multiverse
+# deb [trusted=yes] https://$artifactoryUserNameEncoded:$artifactoryApiKeyEncoded@$debianRepoUrl/all-debian-dev bionic-security main restricted universe multiverse
+EOF
+		apt-get update
+	fi
+else
+	if grep -q "$debianRepoUrl" /etc/apt/sources.list
+	then
+		if [ -f /etc/apt/sources.list.original ]; then
+			echo "recovering previous configuration"
+			cp -p /etc/apt/sources.list.original /etc/apt/sources.list
+		fi
+		apt-get update
+	fi
+fi
+
diff --git a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.vagrant.server.src.dvp/src/main/vagrant/setupDockerMirror.sh b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.vagrant.server.src.dvp/src/main/vagrant/setupDockerMirror.sh
new file mode 100644
index 0000000000000000000000000000000000000000..1181b81f6e80c06e4fc895dbb8ba9731c3bd6ce5
--- /dev/null
+++ b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.vagrant.server.src.dvp/src/main/vagrant/setupDockerMirror.sh
@@ -0,0 +1,111 @@
+#!/bin/bash -e
+function fileAge 
+{
+	local fileMod
+	if fileMod=$(stat -c %Y -- "$1")
+	then
+		echo $(( $(date +%s) - $fileMod ))
+	else
+		echo 0
+	fi
+}
+
+function installJq 
+{
+	#we setup de registry beforehand
+	if ! jq_loc="$(type -p "jq")" || [[ -z $jq_loc ]]; then
+		LASTUPDATE=$(fileAge /var/cache/apt/pkgcache.bin)
+		echo apt-get update if $LASTUPDATE \< 604800 \(one week\)
+		if [ "$LASTUPDATE" -gt "604800" ] ||[ "$LASTUPDATE" -eq "0" ]; 
+		then
+			echo updating
+			apt-get update
+		fi
+		apt-get install -y jq
+	fi
+}
+
+if [ $# -lt 4 ]; then
+    echo "Arguments required: useVagrantBinaryCache dockerRepoHost artifactoryUserName artifactoryApiKey"
+fi
+
+useVagrantBinaryCache=$1
+dockerRepoHost=$2
+artifactoryUserName=$3
+artifactoryApiKey=$4
+SERVICE=docker.service
+docker_registry_mirror_proxy_ip="172.253.0.2"
+reiniciarDocker="N"
+
+if [ "$useVagrantBinaryCache" == "Y" ] 
+then
+	# we recover the folder of the script this do not work with symlinks https://stackoverflow.com/questions/59895/get-the-source-directory-of-a-bash-script-from-within-the-script-itself
+	docker_registry_mirror_proxy_ip="172.253.0.2"
+	docker_registry_mirror_proxy_subnet="172.253.0.0/24"
+	docker_registry_mirror_proxy_gateway="172.253.0.1"
+	docker_registry_mirror_proxy_network="services"
+		
+	if !(grep -q "$docker_registry_mirror_proxy_ip" "/etc/docker/daemon.json"); then
+		#creo una entrada void para el reenviar el repositorio y evitar que descargue
+		sed -i "/registry-1.docker.io/d" /etc/hosts
+		echo "172.253.0.254  registry-1.docker.io #blackhole" >> /etc/hosts
+		
+		cp /etc/docker/daemon.json /etc/docker/daemon.json.old
+		
+		installJq
+		cat /etc/docker/daemon.json.old | jq '. + {"registry-mirrors"} ' | jq ' if ."registry-mirrors"|index("http://'$docker_registry_mirror_proxy_ip'")|not then ."registry-mirrors" +=["http://'$docker_registry_mirror_proxy_ip'"] else . end' | jq '. + {"insecure-registries"} ' | jq ' if ."insecure-registries"|index("http://'$docker_registry_mirror_proxy_ip'")|not then ."insecure-registries" +=["http://'$docker_registry_mirror_proxy_ip'"] else . end' > /etc/docker/daemon.json
+		reiniciarDocker="Y"
+	fi
+	
+	if !( docker ps |  grep -q "$docker.registry.mirror.proxy" ); then
+		#DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"  this not work vagrant puts the scripts in tmp
+		DIR="/vagrant"
+		#we create the network for the proxy
+		docker network create --driver=bridge --subnet=$docker_registry_mirror_proxy_subnet --gateway=$docker_registry_mirror_proxy_gateway $docker_registry_mirror_proxy_network  > /dev/null 2>&1 || true
+		
+		#we download traefik version
+		docker login -u $artifactoryUserName -p $artifactoryApiKey $dockerRepoHost
+		docker pull $dockerRepoHost/traefik:v1.7.7
+		
+		#reemplazo la platilla usare sed porque aunque parece un json es un toml
+		#https://linuxconfig.org/learning-linux-commands-sed
+		registry_base64_credentials=$(echo -n $artifactoryUserName:$artifactoryApiKey | base64 -w0)
+		rm -rf /traefik.toml
+		
+		#echo "registry_base64_credentials= $registry_base64_credentials"
+		sed -e "s/registry_base64_credentials/$registry_base64_credentials/g" -e "s/registry_domain_and_port/$dockerRepoHost/g" $DIR/setupDockerMirror.toml > /traefik.toml
+		
+		#arrancamos traefik con esa configuracion
+		docker rm -f docker.registry.mirror.proxy > /dev/null 2>&1 || true
+		docker run -d --name docker.registry.mirror.proxy --restart=always --network services --ip $docker_registry_mirror_proxy_ip -v /traefik.toml:/etc/traefik/traefik.toml $dockerRepoHost/traefik:v1.7.7 > /dev/null 2>&1 || true
+		
+		URL="http://$docker_registry_mirror_proxy_ip/v2/_catalog"
+		#$(curl --output /dev/null --silent --head --fail $URL) it does not work it returns 500
+		until $(curl --output /dev/null --silent --head --fail $URL); do
+			printf 'waiting for docker registry'
+			echo ''
+			sleep 5
+		done
+		reiniciarDocker="Y"
+	fi
+else
+	if !( grep -q "$docker_registry_mirror_proxy_ip" "/etc/docker/daemon.json" ); then
+		exit 0 # nothing was found
+	fi
+	
+	sed -i "/registry-1.docker.io/d" /etc/hosts
+	cp /etc/docker/daemon.json /etc/docker/daemon.json.old
+	
+	installJq
+	cat /etc/docker/daemon.json.old | jq '. + {"registry-mirrors"} ' | jq ' if ."registry-mirrors"|index("http://'$docker_registry_mirror_proxy_ip'")|not then . else ."registry-mirrors" -=["http://'$docker_registry_mirror_proxy_ip'"] end' | jq '. + {"insecure-registries"} ' | jq ' if ."insecure-registries"|index("http://'$docker_registry_mirror_proxy_ip'")|not then . else ."insecure-registries" -=["http://'$docker_registry_mirror_proxy_ip'"] end' > /etc/docker/daemon.json
+fi
+
+if [ "$reiniciarDocker" == "Y" ]; then
+	if [ "`systemctl is-active $SERVICE`" == "active" ]; then 
+		echo "Restarting $SERVICE"
+		systemctl restart $SERVICE
+		exit 0
+	fi 
+fi
+
+
diff --git a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.vagrant.server.src.dvp/src/main/vagrant/setupDockerMirror.toml b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.vagrant.server.src.dvp/src/main/vagrant/setupDockerMirror.toml
new file mode 100644
index 0000000000000000000000000000000000000000..c129f6b1a450da071a99b85ae97811268c2406d5
--- /dev/null
+++ b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.vagrant.server.src.dvp/src/main/vagrant/setupDockerMirror.toml
@@ -0,0 +1,29 @@
+defaultEntryPoints = ["http"]
+insecureSkipVerify = true
+
+[web]
+# Port for the status page
+address = ":8080"
+
+# Entrypoints, http
+[entryPoints]
+  # http should be redirected to https
+  [entryPoints.http]
+  address = ":80"
+
+[File]
+  [frontends]
+   [frontends.registry]
+    backend = "registry"
+      [frontends.registry.headers.customrequestheaders]
+        Authorization = "Basic registry_base64_credentials"
+      [frontends.registry.routes.test_1]
+      rule = "PathPrefix:/v2"
+
+  [backends]
+    [backends.registry]
+      [backends.registry.servers.server1]
+      url = "https://registry_domain_and_port"
+      weight = 1
+
+
diff --git a/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.vagrant.server.src.dvp/src/main/vagrant/vagrantStatsCollection.sh b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.vagrant.server.src.dvp/src/main/vagrant/vagrantStatsCollection.sh
new file mode 100644
index 0000000000000000000000000000000000000000..a5254cc7728d12515cafc5f7170de73c1c57fc4c
--- /dev/null
+++ b/ADAPT/Monitoring/eu.decideh2020.int.adapt.monitoring.vagrant.server.src.dvp/src/main/vagrant/vagrantStatsCollection.sh
@@ -0,0 +1,54 @@
+#!/bin/bash -e
+function fileAge
+{
+    local fileMod
+    if fileMod=$(stat -c %Y -- "$1")
+    then
+        echo $(( $(date +%s) - $fileMod ))
+    else
+        echo 0
+    fi
+}
+
+function installVnstat 
+{
+	#we setup de registry beforehand
+	if ! vnstat_loc="$(type -p "vnstat")" || [[ -z $vnstat_loc ]]; then
+		LASTUPDATE=$(fileAge /var/cache/apt/pkgcache.bin)
+		echo apt-get update if $LASTUPDATE \< 604800 \(one week\)
+		if [ "$LASTUPDATE" -gt "604800" ] ||[ "$LASTUPDATE" -eq "0" ]; 
+		then
+			echo updating
+			apt-get update
+		fi
+		apt-get install -y vnstat
+	fi
+}
+
+if [ $# -lt 1 ]; then
+    echo "Arguments required: mode statsFile"
+fi
+
+mode=$1
+statsFile=$2
+
+if [ "$mode" == "initiate" ] 
+then
+	installVnstat
+	echo "$(date --rfc-3339=ns)" > /tmp/provisionStarted.tmp
+	service vnstat stop 
+	vnstat  --delete --force  > /dev/null 2>&1 || true
+	vnstat  --create -i enp0s3  > /dev/null 2>&1 || true
+	service vnstat start
+else
+	if [ "$mode" == "finalize" ] 
+	then
+		startDate=$(cat /tmp/provisionStarted.tmp)
+		endDate=$(date --rfc-3339=ns)
+		vnstat -u
+		logLine="$startDate: Provision finalize at $endDate, information exchanged $(vnstat --oneline | cut -d';' -f 6)"
+		echo $logLine
+		echo $logLine >> $statsFile
+	fi
+fi
+
diff --git a/ADAPT/Monitoring/eu.decideh2020.violationhandler.client/src/gen/java/eu/decideh2020/violationhandler/client/api/TestApi.java b/ADAPT/Monitoring/eu.decideh2020.violationhandler.client/src/gen/java/eu/decideh2020/violationhandler/client/api/TestApi.java
deleted file mode 100644
index db9e45eda0c7456c88a21c12538506106a284318..0000000000000000000000000000000000000000
--- a/ADAPT/Monitoring/eu.decideh2020.violationhandler.client/src/gen/java/eu/decideh2020/violationhandler/client/api/TestApi.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package eu.decideh2020.violationhandler.client.api;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.List;
-import java.util.Map;
-import javax.ws.rs.*;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.MediaType;
-import org.apache.cxf.jaxrs.ext.multipart.*;
-
-import eu.decideh2020.violationhandler.client.model.ModelApiResponse;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiResponses;
-import io.swagger.annotations.ApiResponse;
-import io.swagger.jaxrs.PATCH;
-
-/**
- * Violation Handler
- *
- * <p>This is the API documentation for Violation Handler service of DECIDE h2020 european project
- *
- */
-@Path("/")
-@Api(value = "/", description = "")
-public interface TestApi  {
-
-    /**
-     * Test the Hello World API service
-     *
-     * Test the Hello World API service
-     *
-     */
-    @GET
-    @Path("/hello")
-    @Produces({ "application/xml", "application/json" })
-    @ApiOperation(value = "Test the Hello World API service", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class) })
-    public ModelApiResponse hello();
-}
-
diff --git a/ADAPT/Monitoring/eu.decideh2020.violationhandler.client/src/gen/java/eu/decideh2020/violationhandler/client/api/ViolationsApi.java b/ADAPT/Monitoring/eu.decideh2020.violationhandler.client/src/gen/java/eu/decideh2020/violationhandler/client/api/ViolationsApi.java
index 021ec8c0d95795db38583f1c06d9ee83402f5ee3..c0101ecefe8a838377e00a6d1625415fe5b3a53e 100644
--- a/ADAPT/Monitoring/eu.decideh2020.violationhandler.client/src/gen/java/eu/decideh2020/violationhandler/client/api/ViolationsApi.java
+++ b/ADAPT/Monitoring/eu.decideh2020.violationhandler.client/src/gen/java/eu/decideh2020/violationhandler/client/api/ViolationsApi.java
@@ -83,7 +83,25 @@ public interface ViolationsApi  {
     @ApiResponses(value = { 
         @ApiResponse(code = 200, message = "successful operation", response = Violation.class, responseContainer = "array") })
     public List<Violation> getViolationsByUri(@QueryParam("uri")String uri);
+    
+    // New code for user and application
+    
+    /**
+     * Get all violations for given user and application
+     *
+     * Get all violations for given user and application
+     *
+     */
+    @GET
+    @Path("/violation/getViolationsByUserApp")
+    @Produces({ "application/xml", "application/json" })
+    @ApiOperation(value = "Get all violations for given user and application", tags={  })
+    @ApiResponses(value = { 
+        @ApiResponse(code = 200, message = "successful operation", response = Violation.class, responseContainer = "array") })
+    public List<Violation> getViolationsByUserApp(@QueryParam("user")String user, @QueryParam("app")String app);
 
+    // End of new code
+    
     /**
      * Report a new violation
      *
diff --git a/ADAPT/Monitoring/eu.decideh2020.violationhandler.client/src/gen/java/eu/decideh2020/violationhandler/client/model/Violation.java b/ADAPT/Monitoring/eu.decideh2020.violationhandler.client/src/gen/java/eu/decideh2020/violationhandler/client/model/Violation.java
index e67a428758b65a86426171b9866a10f37ae8916c..d51a29d173a42f990ff54ec904d9baaa8b64b5d8 100644
--- a/ADAPT/Monitoring/eu.decideh2020.violationhandler.client/src/gen/java/eu/decideh2020/violationhandler/client/model/Violation.java
+++ b/ADAPT/Monitoring/eu.decideh2020.violationhandler.client/src/gen/java/eu/decideh2020/violationhandler/client/model/Violation.java
@@ -1,6 +1,5 @@
 package eu.decideh2020.violationhandler.client.model;
 
-
 import io.swagger.annotations.ApiModelProperty;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -11,198 +10,281 @@ import javax.xml.bind.annotation.XmlEnum;
 import javax.xml.bind.annotation.XmlEnumValue;
 import com.fasterxml.jackson.annotation.JsonProperty;
 
-public class Violation  {
-  
-  @ApiModelProperty(value = "")
-  private Long id = null;
-
-  @ApiModelProperty(value = "Uri of the application description location")
- /**
-   * Uri of the application description location  
-  **/
-  private String appDescUri = null;
-
-  @ApiModelProperty(value = "Id of the serice where violation occurs")
- /**
-   * Id of the serice where violation occurs  
-  **/
-  private String serviceId = null;
-
-  @ApiModelProperty(value = "Affected NFR name")
- /**
-   * Affected NFR name  
-  **/
-  private String nfr = null;
-
-  @ApiModelProperty(value = "Status of the violation")
- /**
-   * Status of the violation  
-  **/
-  private String status = null;
-
-  @ApiModelProperty(value = "Violation source type, SLA (0) or CSP (1)")
- /**
-   * Violation source type, SLA (0) or CSP (1)  
-  **/
-  private Integer type = null;
-
-  @ApiModelProperty(value = "Timestamp with the violation monitoring time")
- /**
-   * Timestamp with the violation monitoring time  
-  **/
-  private Long timestamp = null;
- /**
-   * Get id
-   * @return id
-  **/
-  @JsonProperty("id")
-  public Long getId() {
-    return id;
-  }
-
-  public void setId(Long id) {
-    this.id = id;
-  }
-
-  public Violation id(Long id) {
-    this.id = id;
-    return this;
-  }
-
- /**
-   * Uri of the application description location
-   * @return appDescUri
-  **/
-  @JsonProperty("app_desc_uri")
-  public String getAppDescUri() {
-    return appDescUri;
-  }
-
-  public void setAppDescUri(String appDescUri) {
-    this.appDescUri = appDescUri;
-  }
-
-  public Violation appDescUri(String appDescUri) {
-    this.appDescUri = appDescUri;
-    return this;
-  }
-
- /**
-   * Id of the serice where violation occurs
-   * @return serviceId
-  **/
-  @JsonProperty("service_id")
-  public String getServiceId() {
-    return serviceId;
-  }
-
-  public void setServiceId(String serviceId) {
-    this.serviceId = serviceId;
-  }
-
-  public Violation serviceId(String serviceId) {
-    this.serviceId = serviceId;
-    return this;
-  }
-
- /**
-   * Affected NFR name
-   * @return nfr
-  **/
-  @JsonProperty("nfr")
-  public String getNfr() {
-    return nfr;
-  }
-
-  public void setNfr(String nfr) {
-    this.nfr = nfr;
-  }
-
-  public Violation nfr(String nfr) {
-    this.nfr = nfr;
-    return this;
-  }
-
- /**
-   * Status of the violation
-   * @return status
-  **/
-  @JsonProperty("status")
-  public String getStatus() {
-    return status;
-  }
-
-  public void setStatus(String status) {
-    this.status = status;
-  }
-
-  public Violation status(String status) {
-    this.status = status;
-    return this;
-  }
-
- /**
-   * Violation source type, SLA (0) or CSP (1)
-   * @return type
-  **/
-  @JsonProperty("type")
-  public Integer getType() {
-    return type;
-  }
-
-  public void setType(Integer type) {
-    this.type = type;
-  }
-
-  public Violation type(Integer type) {
-    this.type = type;
-    return this;
-  }
-
- /**
-   * Timestamp with the violation monitoring time
-   * @return timestamp
-  **/
-  @JsonProperty("timestamp")
-  public Long getTimestamp() {
-    return timestamp;
-  }
-
-  public void setTimestamp(Long timestamp) {
-    this.timestamp = timestamp;
-  }
-
-  public Violation timestamp(Long timestamp) {
-    this.timestamp = timestamp;
-    return this;
-  }
-
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("class Violation {\n");
-    
-    sb.append("    id: ").append(toIndentedString(id)).append("\n");
-    sb.append("    appDescUri: ").append(toIndentedString(appDescUri)).append("\n");
-    sb.append("    serviceId: ").append(toIndentedString(serviceId)).append("\n");
-    sb.append("    nfr: ").append(toIndentedString(nfr)).append("\n");
-    sb.append("    status: ").append(toIndentedString(status)).append("\n");
-    sb.append("    type: ").append(toIndentedString(type)).append("\n");
-    sb.append("    timestamp: ").append(toIndentedString(timestamp)).append("\n");
-    sb.append("}");
-    return sb.toString();
-  }
-
-  /**
-   * Convert the given object to string with each line indented by 4 spaces
-   * (except the first line).
-   */
-  private static String toIndentedString(java.lang.Object o) {
-    if (o == null) {
-      return "null";
-    }
-    return o.toString().replace("\n", "\n    ");
-  }
+import eu.decideh2020.adapt.violationhandler.server.model.Violation;
+
+public class Violation {
+
+	@ApiModelProperty(value = "")
+	private Long id = null;
+
+	@ApiModelProperty(value = "Uri of the application description location")
+	/**
+	 * Uri of the application description location
+	 **/
+	private String appDescUri = null;
+	
+	@ApiModelProperty(value = "Id of the user")
+	/**
+	 * Id of the user
+	 **/
+	private String user = null;
+	
+	@ApiModelProperty(value = "Id of the application")
+	/**
+	 * Id of the application
+	 **/
+	private String app = null;
+
+	@ApiModelProperty(value = "Id of the serice where violation occurs")
+	/**
+	 * Id of the serice where violation occurs
+	 **/
+	private String serviceId = null;
+
+	@ApiModelProperty(value = "Affected NFR name")
+	/**
+	 * Affected NFR name
+	 **/
+	private String nfr = null;
+
+	@ApiModelProperty(value = "Status of the violation")
+	/**
+	 * Status of the violation
+	 **/
+	private String status = null;
+
+	@ApiModelProperty(value = "Violation source type, SLA (0), CSP (1) or Microservice(2)")
+	/**
+	 * Violation source type, SLA (0), CSP (1) or Microservice(2)
+	 **/
+	private Integer type = null;
+
+	@ApiModelProperty(value = "Timestamp with the violation monitoring time")
+	/**
+	 * Timestamp with the violation monitoring time
+	 **/
+	private Long timestamp = null;
+
+	@ApiModelProperty(value = "Notification email")
+	private String email = null;
+
+	/**
+	 * Get id
+	 * 
+	 * @return id
+	 **/
+	@JsonProperty("id")
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public Violation id(Long id) {
+		this.id = id;
+		return this;
+	}
+	
+	/**
+	   * Id of the user
+	   * @return user
+	  **/
+	  
+	  @JsonProperty("user")
+	  public String getUser() {
+		  return user;
+	  }
+	  
+	  public void setUser(String user) {
+		    this.user = user;
+		  }
+	  
+	  public Violation user(String user) {
+		  this.user = user;
+		  return this;
+	  }
+	  
+	  /**
+	   * Id of the application
+	   * @return app
+	  **/
+	  
+	  @JsonProperty("app")
+	  public String getApp() {
+		  return user;
+	  }
+	  
+	  public void setApp(String app) {
+		    this.app = app;
+		  }
+	  
+	  public Violation app(String app) {
+		  this.app = app;
+		  return this;
+	  }
+
+	/**
+	 * Uri of the application description location
+	 * 
+	 * @return appDescUri
+	 **/
+	@JsonProperty("app_desc_uri")
+	public String getAppDescUri() {
+		return appDescUri;
+	}
+
+	public void setAppDescUri(String appDescUri) {
+		this.appDescUri = appDescUri;
+	}
+
+	public Violation appDescUri(String appDescUri) {
+		this.appDescUri = appDescUri;
+		return this;
+	}
+
+	/**
+	 * Id of the serice where violation occurs
+	 * 
+	 * @return serviceId
+	 **/
+	@JsonProperty("service_id")
+	public String getServiceId() {
+		return serviceId;
+	}
+
+	public void setServiceId(String serviceId) {
+		this.serviceId = serviceId;
+	}
+
+	public Violation serviceId(String serviceId) {
+		this.serviceId = serviceId;
+		return this;
+	}
+
+	/**
+	 * Affected NFR name
+	 * 
+	 * @return nfr
+	 **/
+	@JsonProperty("nfr")
+	public String getNfr() {
+		return nfr;
+	}
+
+	public void setNfr(String nfr) {
+		this.nfr = nfr;
+	}
+
+	public Violation nfr(String nfr) {
+		this.nfr = nfr;
+		return this;
+	}
+
+	/**
+	 * Status of the violation
+	 * 
+	 * @return status
+	 **/
+	@JsonProperty("status")
+	public String getStatus() {
+		return status;
+	}
+
+	public void setStatus(String status) {
+		this.status = status;
+	}
+
+	public Violation status(String status) {
+		this.status = status;
+		return this;
+	}
+
+	/**
+	 * Violation source type, SLA (0) or CSP (1)
+	 * 
+	 * @return type
+	 **/
+	@JsonProperty("type")
+	public Integer getType() {
+		return type;
+	}
+
+	public void setType(Integer type) {
+		this.type = type;
+	}
+
+	public Violation type(Integer type) {
+		this.type = type;
+		return this;
+	}
+
+	/**
+	 * Timestamp with the violation monitoring time
+	 * 
+	 * @return timestamp
+	 **/
+	@JsonProperty("timestamp")
+	public Long getTimestamp() {
+		return timestamp;
+	}
+
+	public void setTimestamp(Long timestamp) {
+		this.timestamp = timestamp;
+	}
+
+	public Violation timestamp(Long timestamp) {
+		this.timestamp = timestamp;
+		return this;
+	}
+
+	/**
+	 * Email with the violation Notification email
+	 * 
+	 * @return email
+	 **/
+	@JsonProperty("email")
+	public String getEmail() {
+		return email;
+	}
+
+	public void setEmail(String email) {
+		this.email = email;
+	}
+
+	public Violation email(String email) {
+		this.email = email;
+		return this;
+	}
+
+	@Override
+	public String toString() {
+		StringBuilder sb = new StringBuilder();
+	    sb.append("class Violation {\n");
+	    
+	    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+	    sb.append("    user: ").append(toIndentedString(user)).append("\n");
+	    sb.append("    app: ").append(toIndentedString(app)).append("\n");
+	    sb.append("    appDescUri: ").append(toIndentedString(appDescUri)).append("\n");
+	    sb.append("    serviceId: ").append(toIndentedString(serviceId)).append("\n");
+	    sb.append("    nfr: ").append(toIndentedString(nfr)).append("\n");
+	    sb.append("    status: ").append(toIndentedString(status)).append("\n");
+	    sb.append("    type: ").append(toIndentedString(type)).append("\n");
+	    sb.append("    timestamp: ").append(toIndentedString(timestamp)).append("\n");
+	    sb.append("    email: ").append(toIndentedString(email)).append("\n");
+	    sb.append("}");
+	    return sb.toString();
+	}
+
+	/**
+	 * Convert the given object to string with each line indented by 4 spaces
+	 * (except the first line).
+	 */
+	private static String toIndentedString(java.lang.Object o) {
+		if (o == null) {
+			return "null";
+		}
+		return o.toString().replace("\n", "\n    ");
+	}
 }
-
diff --git a/ADAPT/ViolationsHandler/Dockerfile b/ADAPT/ViolationsHandler/Dockerfile
index 258d8430cb00f4dc3cdfd46696b7d316ed50efc6..88ce70345417a3af0cce85f20e31afa4e4698a4b 100644
--- a/ADAPT/ViolationsHandler/Dockerfile
+++ b/ADAPT/ViolationsHandler/Dockerfile
@@ -1,18 +1,18 @@
-FROM maven:3.5.3-jdk-8 as builder
-
-ARG GIT_CREDENTIALS
-
-#Private gitlab
-#ARG APPMANAGER_VERSION=7de6f86cbc701ea55db3083a023a12876682a856
-
-#Public gitlab
-ARG APPMANAGER_VERSION=78d49c32579c91a916a6ed1a9e510839c3d1eb3c
-
-COPY init-public.sh /init-public.sh
-RUN chmod +x /init-public.sh && \
-    sh ./init-public.sh 
-
-WORKDIR /WP4/Adapt_violation_handlers/eu.decideh2020.adapt.violationhandler.server
-CMD ["java","-Djava.security.egd=file:/dev/./urandom","-jar","target/violationhandler-1.0.0.jar"]
-
+FROM maven:3.5.3-jdk-8 as builder
+
+ARG GIT_CREDENTIALS
+
+#Private gitlab
+ARG APPMANAGER_VERSION=deb7f85fd7421857234b1f8d80df3be13fbac6c6
+
+#Public gitlab
+#ARG APPMANAGER_VERSION=78d49c32579c91a916a6ed1a9e510839c3d1eb3c
+
+COPY init.sh /init.sh
+RUN chmod +x /init.sh && \
+    sh ./init.sh 
+
+WORKDIR /WP4/Adapt_violation_handlers/eu.decideh2020.adapt.violationhandler.server
+CMD ["java","-Djava.security.egd=file:/dev/./urandom","-jar","target/violationhandler-1.0.0.jar"]
+
 EXPOSE 5000
\ No newline at end of file
diff --git a/ADAPT/ViolationsHandler/docker-compose-public.yml b/ADAPT/ViolationsHandler/docker-compose-public.yml
index 0966e5161949421018b14933d5ff51597c2901c4..2328735c4ddb0fcb6c6929f216cb52b6961f2715 100644
--- a/ADAPT/ViolationsHandler/docker-compose-public.yml
+++ b/ADAPT/ViolationsHandler/docker-compose-public.yml
@@ -1,22 +1,22 @@
-version: "3"
-services:          
-    mysql_vh:
-        image: mysql:5.5.59
-        container_name: mysql_vh
-        environment:
-            MYSQL_ROOT_PASSWORD: root
-            MYSQL_USER: admin
-            MYSQL_PASSWORD: decide
-            MYSQL_DATABASE: db_violations 
-        ports:
-            - 3306:3306
-    violationhandler:
-        build: ./
-        container_name: violationhandler
-        depends_on:
-            - mysql_vh
-        ports:
-            - 5000:5000
-networks:
-  decide: 
+version: "3"
+services:          
+    mysql_vh:
+        image: mysql:5.5.59
+        container_name: mysql_vh
+        environment:
+            MYSQL_ROOT_PASSWORD: root
+            MYSQL_USER: admin
+            MYSQL_PASSWORD: decide
+            MYSQL_DATABASE: db_violations 
+        ports:
+            - 3306:3306
+    violationhandler:
+        build: ./
+        container_name: violationhandler
+        depends_on:
+            - mysql_vh
+        ports:
+            - 5000:5000
+networks:
+  decide: 
     external: true
\ No newline at end of file
diff --git a/ADAPT/ViolationsHandler/docker-compose-release.yml b/ADAPT/ViolationsHandler/docker-compose-release.yml
index a48a8a52dd401e8d2e3e642c360cdb6d53a25a48..01c7ec24c72671887ea73dbc6d62fd5c5d66aa97 100644
--- a/ADAPT/ViolationsHandler/docker-compose-release.yml
+++ b/ADAPT/ViolationsHandler/docker-compose-release.yml
@@ -1,25 +1,25 @@
-version: "3"
-services:          
-    mysql_vh:
-        image: mysql:5.5.59
-        container_name: mysql_vh
-        environment:
-            MYSQL_ROOT_PASSWORD: root
-            MYSQL_USER: admin
-            MYSQL_PASSWORD: decide
-            MYSQL_DATABASE: db_violations 
-        ports:
-            - 3406:3306
-    violationhandler:
-        build: 
-            context: .
-            args:
-                GIT_CREDENTIALS: $GIT_CREDENTIALS
-        container_name: violationhandler
-        depends_on:
-            - mysql_vh
-        ports:
-            - 8095:5000
-networks:
-  decide: 
-    external: true
+version: "3"
+services:          
+    mysql_vh:
+        image: mysql:5.5.59
+        container_name: mysql_vh
+        environment:
+            MYSQL_ROOT_PASSWORD: root
+            MYSQL_USER: admin
+            MYSQL_PASSWORD: decide
+            MYSQL_DATABASE: db_violations 
+        ports:
+            - 3406:3306
+    violationhandler:
+        build: 
+            context: .
+            args:
+                GIT_CREDENTIALS: $GIT_CREDENTIALS
+        container_name: violationhandler
+        depends_on:
+            - mysql_vh
+        ports:
+            - 8095:5000
+networks:
+  decide: 
+    external: true
\ No newline at end of file
diff --git a/ADAPT/ViolationsHandler/docker-compose.yml b/ADAPT/ViolationsHandler/docker-compose.yml
index 031c77eeae5645a9dbb9730d70cf95bd54cf95f9..23679d68cd3eb46d16166c5f10a59fd60cc92a82 100644
--- a/ADAPT/ViolationsHandler/docker-compose.yml
+++ b/ADAPT/ViolationsHandler/docker-compose.yml
@@ -1,21 +1,21 @@
-version: "3"
-services:          
-    mysql_vh:
-        image: mysql:5.5.59
-        container_name: mysql_vh
-        environment:
-            MYSQL_ROOT_PASSWORD: root
-            MYSQL_USER: admin
-            MYSQL_PASSWORD: decide
-            MYSQL_DATABASE: db_violations 
-        ports:
-            - 3306:3306
-    violationhandler:
-        build: ./eu.decideh2020.adapt.violationhandler.server
-        #image: violationhandler:latest
-        container_name: violationhandler
-        depends_on:
-            - mysql_vh
-        ports:
-            - 5000:5000
+version: "3"
+services:          
+    mysql_vh:
+        image: mysql:5.5.59
+        container_name: mysql_vh
+        environment:
+            MYSQL_ROOT_PASSWORD: root
+            MYSQL_USER: admin
+            MYSQL_PASSWORD: decide
+            MYSQL_DATABASE: db_violations 
+        ports:
+            - 3306:3306
+    violationhandler:
+        build: ./eu.decideh2020.adapt.violationhandler.server
+        #image: violationhandler:latest
+        container_name: violationhandler
+        depends_on:
+            - mysql_vh
+        ports:
+            - 5000:5000
         
\ No newline at end of file
diff --git a/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/pom.xml b/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/pom.xml
index 340bb26018f59282b5c1c93ed8994fca4a02a8d4..205bf06b0e7f9d0588bc4964b218cd45d733c5df 100644
--- a/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/pom.xml
+++ b/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/pom.xml
@@ -1,121 +1,161 @@
-<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/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <groupId>eu.decideh2020.adapt</groupId>
-    <artifactId>violationhandler</artifactId>
-    <packaging>jar</packaging>
-    <name>violationhandler</name>
-    <version>1.0.0</version>
-    <properties>
-        <java.version>1.7</java.version>
-        <maven.compiler.source>${java.version}</maven.compiler.source>
-        <maven.compiler.target>${java.version}</maven.compiler.target>
-        <springfox-version>2.7.0</springfox-version>
-    </properties>
-    <parent>
-        <groupId>org.springframework.boot</groupId>
-        <artifactId>spring-boot-starter-parent</artifactId>
-        <version>1.5.9.RELEASE</version>
-    </parent>
-    <build>        
-        <plugins>
-	        <plugin>
-			    <groupId>org.codehaus.mojo</groupId>
-			    <artifactId>build-helper-maven-plugin</artifactId>
-			    <version>3.0.0</version>
-			    <executions>
-			        <execution>
-			            <phase>generate-sources</phase>
-			            <goals>
-			                <goal>add-source</goal>
-			            </goals>
-			            <configuration>
-			                <sources>
-			                    <source>src/gen</source>
-			                </sources>
-			            </configuration>
-			        </execution>
-			    </executions>
+<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/maven-v4_0_0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<groupId>eu.decideh2020.adapt</groupId>
+	<artifactId>violationhandler</artifactId>
+	<packaging>jar</packaging>
+	<name>violationhandler</name>
+	<version>1.0.0</version>
+	<properties>
+		<java.version>1.7</java.version>
+		<maven.compiler.source>${java.version}</maven.compiler.source>
+		<maven.compiler.target>${java.version}</maven.compiler.target>
+		<springfox-version>2.7.0</springfox-version>
+	</properties>
+	<parent>
+		<groupId>org.springframework.boot</groupId>
+		<artifactId>spring-boot-starter-parent</artifactId>
+		<version>1.5.9.RELEASE</version>
+	</parent>
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.codehaus.mojo</groupId>
+				<artifactId>build-helper-maven-plugin</artifactId>
+				<version>3.0.0</version>
+				<executions>
+					<execution>
+						<phase>generate-sources</phase>
+						<goals>
+							<goal>add-source</goal>
+						</goals>
+						<configuration>
+							<sources>
+								<source>src/gen</source>
+							</sources>
+						</configuration>
+					</execution>
+				</executions>
 			</plugin>
-            <plugin>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-maven-plugin</artifactId>             
-                <configuration>
-                	<sources>
-            			<source>src/main/java</source>
-        			</sources>
-                </configuration>
-                <executions>	                              
-                    <execution>
-                        <goals>
-                            <goal>repackage</goal>
-                        </goals>
-                    </execution>
-                </executions>               
-            </plugin>         		            
-        </plugins>
-    </build>
-    <dependencies>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-web</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-tomcat</artifactId>
-        </dependency>
-        <!--SpringFox dependencies -->
-        <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-swagger2</artifactId>
-            <version>${springfox-version}</version>
-        </dependency>
-        <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-swagger-ui</artifactId>
-            <version>${springfox-version}</version>
-        </dependency>
-        <dependency>
-            <groupId>com.github.joschi.jackson</groupId>
-            <artifactId>jackson-datatype-threetenbp</artifactId>
-            <version>2.6.4</version>
-        </dependency>
-        
-        <dependency>
-	        <groupId>org.json</groupId>
-	        <artifactId>json</artifactId>
-	        <version>20160810</version>
+			<plugin>
+				<groupId>org.springframework.boot</groupId>
+				<artifactId>spring-boot-maven-plugin</artifactId>
+				<configuration>
+					<sources>
+						<source>src/main/java</source>
+					</sources>
+				</configuration>
+				<executions>
+					<execution>
+						<goals>
+							<goal>repackage</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+	</build>
+	<dependencies>
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-web</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-tomcat</artifactId>
+		</dependency>
+		<!--SpringFox dependencies -->
+		<dependency>
+			<groupId>io.springfox</groupId>
+			<artifactId>springfox-swagger2</artifactId>
+			<version>${springfox-version}</version>
+		</dependency>
+		<dependency>
+			<groupId>io.springfox</groupId>
+			<artifactId>springfox-swagger-ui</artifactId>
+			<version>${springfox-version}</version>
+		</dependency>
+		<dependency>
+			<groupId>com.github.joschi.jackson</groupId>
+			<artifactId>jackson-datatype-threetenbp</artifactId>
+			<version>2.6.4</version>
+		</dependency>
+
+		<dependency>
+			<groupId>org.json</groupId>
+			<artifactId>json</artifactId>
+			<version>20160810</version>
+			<scope>compile</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>eu.DECIDEh2020</groupId>
+			<artifactId>app-controller</artifactId>
+			<version>0.0.16-SNAPSHOT</version>
+		</dependency>
+		
+		<dependency>
+			<groupId>eu.decideh2020</groupId>
+			<artifactId>optimus-client</artifactId>
+			<version>2.0.0</version>
+		</dependency>
+
+		<dependency>
+	        <groupId>com.fasterxml.jackson.jaxrs</groupId>
+	        <artifactId>jackson-jaxrs-json-provider</artifactId>
+	        <version>2.9.1</version>
 	        <scope>compile</scope>
 	    </dependency>
-        
-        <dependency>
-		    <groupId>eu.DECIDEh2020</groupId>
-		    <artifactId>app-controller</artifactId>
-		    <version>0.0.12</version>
+		
+		<!-- CXF Client -->
+	    <dependency>
+	        <groupId>org.apache.cxf</groupId>
+	        <artifactId>cxf-rt-rs-client</artifactId>
+	        <version>3.2.1</version>
+	    </dependency>
+	    
+	    <dependency>
+		    <groupId>javax.ws.rs</groupId>
+		    <artifactId>javax.ws.rs-api</artifactId>
+		    <version>2.1</version>
 		</dependency>
-		        
-    <!-- Bean Validation API support -->
-        <dependency>
-            <groupId>javax.validation</groupId>
-            <artifactId>validation-api</artifactId>
-        </dependency>
-        
-        <!-- JPA Data (We are going to use Repositories, Entities, Hibernate, etc...) -->
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-data-jpa</artifactId>
-        </dependency>
 
-        <!-- Use MySQL Connector-J -->
-        <dependency>
-            <groupId>mysql</groupId>
-            <artifactId>mysql-connector-java</artifactId>
+		<!-- Bean Validation API support -->
+		<dependency>
+			<groupId>javax.validation</groupId>
+			<artifactId>validation-api</artifactId>
+		</dependency>
+
+		<!-- JPA Data (We are going to use Repositories, Entities, Hibernate, etc...) -->
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-data-jpa</artifactId>
+		</dependency>
+
+		<!-- Use MySQL Connector-J -->
+		<dependency>
+			<groupId>mysql</groupId>
+			<artifactId>mysql-connector-java</artifactId>
+		</dependency>
+
+		<!-- Email library -->
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-mail</artifactId>
+			<version>2.0.1.RELEASE</version>
+		</dependency>
+		
+		<!--  Vault -->
+		<dependency>
+            <groupId>org.springframework.vault</groupId>
+            <artifactId>spring-vault-core</artifactId>
+            <version>1.1.1.RELEASE</version>
         </dependency>
         
-        <!-- Email library -->
+  		<!--  MongoDB -->
         <dependency>
-		    <groupId>org.springframework.boot</groupId>
-		    <artifactId>spring-boot-starter-mail</artifactId>
-		    <version>2.0.1.RELEASE</version>
-		</dependency>
-    </dependencies>
+           <groupId>org.springframework.boot</groupId>
+           <artifactId>spring-boot-starter-data-mongodb</artifactId>
+       </dependency>
+	</dependencies>
 </project>
diff --git a/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/gen/eu/decideh2020/adapt/violationhandler/server/api/HelloApi.java b/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/gen/eu/decideh2020/adapt/violationhandler/server/api/HelloApi.java
deleted file mode 100644
index 5850be825c01356409121e6719170b88b655f640..0000000000000000000000000000000000000000
--- a/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/gen/eu/decideh2020/adapt/violationhandler/server/api/HelloApi.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * NOTE: This class is auto generated by the swagger code generator program (2.3.1).
- * https://github.com/swagger-api/swagger-codegen
- * Do not edit the class manually.
- */
-package eu.decideh2020.adapt.violationhandler.server.api;
-
-import io.swagger.annotations.*;
-import org.springframework.http.ResponseEntity;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestHeader;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RequestPart;
-import org.springframework.web.multipart.MultipartFile;
-
-import eu.decideh2020.adapt.violationhandler.server.model.ModelApiResponse;
-
-import javax.validation.Valid;
-import javax.validation.constraints.*;
-import java.util.List;
-@javax.annotation.Generated(value = "io.swagger.codegen.languages.SpringCodegen", date = "2018-11-14T16:47:06.121Z")
-
-@Api(value = "hello", description = "the hello API")
-public interface HelloApi {
-
-    @ApiOperation(value = "Test the Hello World API service", nickname = "hello", notes = "Test the Hello World API service", response = ModelApiResponse.class, tags={ "test", })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class) })
-    @RequestMapping(value = "/hello",
-        produces = { "application/json" }, 
-        method = RequestMethod.GET)
-    ResponseEntity<ModelApiResponse> hello();
-
-}
diff --git a/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/gen/eu/decideh2020/adapt/violationhandler/server/api/ViolationApi.java b/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/gen/eu/decideh2020/adapt/violationhandler/server/api/ViolationApi.java
index e305963b59d192b3e96664c3974036f7c1fd9148..0879972a553d20f165e3305a5aed53f46e920c11 100644
--- a/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/gen/eu/decideh2020/adapt/violationhandler/server/api/ViolationApi.java
+++ b/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/gen/eu/decideh2020/adapt/violationhandler/server/api/ViolationApi.java
@@ -5,23 +5,24 @@
  */
 package eu.decideh2020.adapt.violationhandler.server.api;
 
-import io.swagger.annotations.*;
+import java.util.List;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+
 import org.springframework.http.ResponseEntity;
-import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestHeader;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RequestPart;
-import org.springframework.web.multipart.MultipartFile;
 
 import eu.decideh2020.adapt.violationhandler.server.model.Violation;
-
-import javax.validation.Valid;
-import javax.validation.constraints.*;
-import java.util.List;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
 @javax.annotation.Generated(value = "io.swagger.codegen.languages.SpringCodegen", date = "2018-11-14T16:47:06.121Z")
 
 @Api(value = "violation", description = "the violation API")
@@ -61,8 +62,19 @@ public interface ViolationApi {
     @RequestMapping(value = "/violation/getViolationsByUri",
         produces = { "application/json" }, 
         method = RequestMethod.GET)
-    ResponseEntity<List<Violation>> getViolationsByUri(@NotNull @ApiParam(value = "URI of the application description repository", required = true) @Valid @RequestParam(value = "uri", required = true) String uri);
-
+    ResponseEntity<List<Violation>> getViolationsByUri(@NotNull @ApiParam(value = "URI of the application description repository", required = false) @Valid @RequestParam(value = "uri", required = true) String uri);
+    
+    //New code for user and app
+    
+    @ApiOperation(value = "Get all violations for given user and application", nickname = "getViolationsByUserApp", notes = "Get all violations for given user and application", response = Violation.class, responseContainer = "List", tags={ "violations", })
+    @ApiResponses(value = { 
+        @ApiResponse(code = 200, message = "successful operation", response = Violation.class, responseContainer = "List") })
+    @RequestMapping(value = "/violation/getViolationsByUserApp",
+        produces = { "application/json" }, 
+        method = RequestMethod.GET)
+    ResponseEntity<List<Violation>> getViolationsByUserApp(@NotNull @ApiParam(value = "Id of the user", required = true) @Valid @RequestParam(value = "user", required = true)   String user, @NotNull @ApiParam(value = "Id of the application", required = true) @Valid @RequestParam(value = "app", required = true) String app);
+    
+    // End of new code
 
     @ApiOperation(value = "Report a new violation", nickname = "reportViolation", notes = "Report a new violation in the system", response = Violation.class, tags={ "violations", })
     @ApiResponses(value = { 
diff --git a/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/gen/eu/decideh2020/adapt/violationhandler/server/model/ModelApiResponse.java b/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/gen/eu/decideh2020/adapt/violationhandler/server/model/ModelApiResponse.java
index 1f214436f6b976022cf6a29e1405148706a60e4f..cb35ac851fa74fdcb6d2318020330a30ecffb7e2 100644
--- a/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/gen/eu/decideh2020/adapt/violationhandler/server/model/ModelApiResponse.java
+++ b/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/gen/eu/decideh2020/adapt/violationhandler/server/model/ModelApiResponse.java
@@ -2,12 +2,9 @@ package eu.decideh2020.adapt.violationhandler.server.model;
 
 import java.util.Objects;
 import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonCreator;
-import io.swagger.annotations.ApiModel;
+
 import io.swagger.annotations.ApiModelProperty;
 import org.springframework.validation.annotation.Validated;
-import javax.validation.Valid;
-import javax.validation.constraints.*;
 
 /**
  * ModelApiResponse
diff --git a/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/gen/eu/decideh2020/adapt/violationhandler/server/model/Violation.java b/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/gen/eu/decideh2020/adapt/violationhandler/server/model/Violation.java
index 9164ac02e658eac86e0797f57aa4958d0fd065e5..d89349834240fc9d1cc1519e48ae78eee32ba490 100644
--- a/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/gen/eu/decideh2020/adapt/violationhandler/server/model/Violation.java
+++ b/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/gen/eu/decideh2020/adapt/violationhandler/server/model/Violation.java
@@ -2,23 +2,19 @@ package eu.decideh2020.adapt.violationhandler.server.model;
 
 import java.util.Date;
 import java.util.Objects;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonCreator;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-
-import org.springframework.data.annotation.CreatedDate;
-import org.springframework.validation.annotation.Validated;
 
 import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
 import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.PrePersist;
-import javax.persistence.Temporal;
-import javax.persistence.TemporalType;
-import javax.validation.Valid;
-import javax.validation.constraints.*;
+
+import org.springframework.validation.annotation.Validated;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 
 /**
  * Violation
@@ -34,9 +30,17 @@ public class Violation   {
   @JsonProperty("id")
   @ApiModelProperty(dataType = "java.lang.Long", required = false)
   private Integer id = null;
-
+  
+  @JsonProperty("user")
+  @ApiModelProperty(value = "Id of the user", dataType = "java.lang.String", example="John", required = true)
+  private String user = null;
+  
+  @JsonProperty("app")
+  @ApiModelProperty(value = "Id of the application", dataType = "java.lang.String", example="a1b2c3d4e5f6", required = true)
+  private String app = null;
+  
   @JsonProperty("app_desc_uri")
-  @ApiModelProperty(value = "Uri of the application description location", dataType = "java.lang.String", example="http://github.com/my-user/my-project", required = true)
+  @ApiModelProperty(value = "Uri of the application description location", dataType = "java.lang.String", example="http://github.com/my-user/my-project", required = false, hidden = true)
   private String appDescUri = null;
 
   @JsonProperty("service_id")
@@ -52,7 +56,7 @@ public class Violation   {
   private String status = null;
 
   @JsonProperty("type")
-  @ApiModelProperty(value = "Violation source type, SLA (0) or CSP (1)", dataType = "java.lang.String", example="0", required = true)
+  @ApiModelProperty(value = "Violation source type: SLA (0), CSP (1) or Microservice(2)", dataType = "java.lang.String", example="0", required = true)
   private Integer type = null;
 
   @JsonProperty("timestamp")
@@ -60,7 +64,7 @@ public class Violation   {
   private Long timestamp = null;
   
   @JsonProperty("email")
-  @ApiModelProperty(value = "Notification email", dataType = "java.lang.String", example = "abc123@gmail.com", required = true)
+  @ApiModelProperty(value = "Notification email", dataType = "java.lang.String", example = "abc123@gmail.com", required = true, hidden = true)
   private String email = null;
   
 
@@ -88,17 +92,53 @@ public class Violation   {
   public void setId(Integer id) {
     this.id = id;
   }
-
-  public Violation appDescUri(String appDescUri) {
-    this.appDescUri = appDescUri;
-    return this;
+  
+  /**
+   * Id of the user
+   * @return user
+  **/
+  
+  public Violation user(String user) {
+	  this.user = user;
+	  return this;
   }
-
+  
+  public String getUser() {
+	  return user;
+  }
+  
+  public void setUser(String user) {
+	    this.user = user;
+	  }
+  
+  /**
+   * Id of the application
+   * @return app
+  **/
+  
+  public Violation app(String app) {
+	  this.app = app;
+	  return this;
+  }
+  
+  public String getApp() {
+	  return app;
+  }
+  
+  public void setApp(String app) {
+	    this.app = app;
+	  }
+  
   /**
    * Uri of the application description location
    * @return appDescUri
   **/
 
+  public Violation appDescUri(String appDescUri) {
+    this.appDescUri = appDescUri;
+    return this;
+  }
+  
   public String getAppDescUri() {
     return appDescUri;
   }
@@ -107,16 +147,17 @@ public class Violation   {
     this.appDescUri = appDescUri;
   }
 
-  public Violation serviceId(String serviceId) {
-    this.serviceId = serviceId;
-    return this;
-  }
 
   /**
    * Id of the serice where violation occurs
    * @return serviceId
   **/
 
+  public Violation serviceId(String serviceId) {
+    this.serviceId = serviceId;
+    return this;
+  }
+
   public String getServiceId() {
     return serviceId;
   }
@@ -125,16 +166,16 @@ public class Violation   {
     this.serviceId = serviceId;
   }
 
-  public Violation nfr(String nfr) {
-    this.nfr = nfr;
-    return this;
-  }
-
   /**
    * Affected NFR name
    * @return nfr
   **/
 
+  public Violation nfr(String nfr) {
+    this.nfr = nfr;
+    return this;
+  }
+  
   public String getNfr() {
     return nfr;
   }
@@ -143,16 +184,16 @@ public class Violation   {
     this.nfr = nfr;
   }
 
-  public Violation status(String status) {
-    this.status = status;
-    return this;
-  }
-
   /**
    * Status of the violation
    * @return status
   **/
 
+  public Violation status(String status) {
+    this.status = status;
+    return this;
+  }
+
   public String getStatus() {
     return status;
   }
@@ -161,16 +202,16 @@ public class Violation   {
     this.status = status;
   }
 
-  public Violation type(Integer type) {
-    this.type = type;
-    return this;
-  }
-
   /**
    * Violation source type, SLA (0) or CSP (1)
    * @return type
   **/
 
+  public Violation type(Integer type) {
+    this.type = type;
+    return this;
+  }
+
   public Integer getType() {
     return type;
   }
@@ -179,16 +220,16 @@ public class Violation   {
     this.type = type;
   }
 
-  public Violation timestamp(Long timestamp) {
-    this.timestamp = timestamp;
-    return this;
-  }
-
   /**
    * Timestamp with the violation monitoring time
    * @return timestamp
   **/
 
+  public Violation timestamp(Long timestamp) {
+    this.timestamp = timestamp;
+    return this;
+  }
+
   public Long getTimestamp() {
     return timestamp;
   }
@@ -196,8 +237,18 @@ public class Violation   {
   public void setTimestamp(Long timestamp) {
     this.timestamp = timestamp;
   }
-
-
+  
+  /**
+	 * Email with the violation Notification email
+	 * 
+	 * @return email
+	 **/
+
+  public Violation email(String email) {
+		this.email = email;
+		return this;
+	}
+  
   public String getEmail() {
 	return email;
   }
@@ -216,6 +267,8 @@ public class Violation   {
     }
     Violation violation = (Violation) o;
     return Objects.equals(this.id, violation.id) &&
+		Objects.equals(this.user, violation.user) &&
+		Objects.equals(this.app, violation.app) &&
         Objects.equals(this.appDescUri, violation.appDescUri) &&
         Objects.equals(this.serviceId, violation.serviceId) &&
         Objects.equals(this.nfr, violation.nfr) &&
@@ -227,7 +280,7 @@ public class Violation   {
 
   @Override
   public int hashCode() {
-    return Objects.hash(id, appDescUri, serviceId, nfr, status, type, timestamp);
+    return Objects.hash(id, user, app, appDescUri, email, serviceId, nfr, status, type, timestamp);
   }
 
   @Override
@@ -236,6 +289,8 @@ public class Violation   {
     sb.append("class Violation {\n");
     
     sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    user: ").append(toIndentedString(user)).append("\n");
+    sb.append("    app: ").append(toIndentedString(app)).append("\n");
     sb.append("    appDescUri: ").append(toIndentedString(appDescUri)).append("\n");
     sb.append("    serviceId: ").append(toIndentedString(serviceId)).append("\n");
     sb.append("    nfr: ").append(toIndentedString(nfr)).append("\n");
diff --git a/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/main/java/eu/decideh2020/adapt/violationhandler/server/controllers/HelloApiController.java b/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/main/java/eu/decideh2020/adapt/violationhandler/server/controllers/HelloApiController.java
deleted file mode 100644
index 20eebf8814ed278d019f8068421cbfb3f55602a7..0000000000000000000000000000000000000000
--- a/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/main/java/eu/decideh2020/adapt/violationhandler/server/controllers/HelloApiController.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package eu.decideh2020.adapt.violationhandler.server.controllers;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-
-import eu.decideh2020.adapt.violationhandler.server.api.HelloApi;
-import eu.decideh2020.adapt.violationhandler.server.model.ModelApiResponse;
-import io.swagger.annotations.*;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestHeader;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RequestPart;
-import org.springframework.web.multipart.MultipartFile;
-
-import javax.validation.constraints.*;
-import javax.validation.Valid;
-import javax.servlet.http.HttpServletRequest;
-import java.io.IOException;
-import java.util.List;
-@javax.annotation.Generated(value = "io.swagger.codegen.languages.SpringCodegen", date = "2018-11-14T16:47:06.121Z")
-
-@Controller
-public class HelloApiController implements HelloApi {
-
-    private static final Logger log = LoggerFactory.getLogger(HelloApiController.class);
-
-    private final ObjectMapper objectMapper;
-
-    private final HttpServletRequest request;
-
-    @org.springframework.beans.factory.annotation.Autowired
-    public HelloApiController(ObjectMapper objectMapper, HttpServletRequest request) {
-        this.objectMapper = objectMapper;
-        this.request = request;
-    }
-
-    public ResponseEntity<ModelApiResponse> hello() {
-        String accept = request.getHeader("Accept");
-        /*if (accept != null && accept.contains("application/xml")) {
-            try {
-                return new ResponseEntity<ModelApiResponse>(objectMapper.readValue("<null>  <code>123</code>  <type>aeiou</type>  <message>aeiou</message></null>", ModelApiResponse.class), HttpStatus.NOT_IMPLEMENTED);
-            } catch (IOException e) {
-                log.error("Couldn't serialize response for content type application/xml", e);
-                return new ResponseEntity<ModelApiResponse>(HttpStatus.INTERNAL_SERVER_ERROR);
-            }
-        }*/
-
-        //if (accept != null && accept.contains("application/json")) {
-            try {
-                return new ResponseEntity<ModelApiResponse>(objectMapper.readValue("{  \"code\" : 0,  \"type\" : \"type\",  \"message\" : \"Hello World!\"}", ModelApiResponse.class), HttpStatus.NOT_IMPLEMENTED);
-            } catch (IOException e) {
-                log.error("Couldn't serialize response for content type application/json", e);
-                return new ResponseEntity<ModelApiResponse>(HttpStatus.INTERNAL_SERVER_ERROR);
-            }
-        //}
-
-        //return new ResponseEntity<ModelApiResponse>(HttpStatus.NOT_IMPLEMENTED);
-    }
-
-}
diff --git a/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/main/java/eu/decideh2020/adapt/violationhandler/server/controllers/ViolationApiController.java b/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/main/java/eu/decideh2020/adapt/violationhandler/server/controllers/ViolationApiController.java
index 21061d8052ecca2bb8185f94c84208b8e409d10d..da2646a5fd5b5a8b09c193f0c7e1acff52a30373 100644
--- a/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/main/java/eu/decideh2020/adapt/violationhandler/server/controllers/ViolationApiController.java
+++ b/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/main/java/eu/decideh2020/adapt/violationhandler/server/controllers/ViolationApiController.java
@@ -5,27 +5,28 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import eu.decideh2020.adapt.violationhandler.server.api.ViolationApi;
 import eu.decideh2020.adapt.violationhandler.server.model.Violation;
 import eu.decideh2020.adapt.violationhandler.server.modules.DecisionManagerImpl;
-import eu.decideh2020.adapt.violationhandler.server.modules.NotificationManagerImpl;
 import eu.decideh2020.adapt.violationhandler.server.repository.ViolationRepository;
+import eu.decideh2020.adapt.violationhandler.server.util.VaultManager;
+import eu.decideh2020.adapt.violationhandler.server.util.MongoManager;
+
 import io.swagger.annotations.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestHeader;
 import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RequestPart;
-import org.springframework.web.multipart.MultipartFile;
+
 
 import javax.validation.constraints.*;
 import javax.validation.Valid;
 import javax.servlet.http.HttpServletRequest;
-import java.io.IOException;
 import java.util.List;
+import java.util.Map;
 @javax.annotation.Generated(value = "io.swagger.codegen.languages.SpringCodegen", date = "2018-11-14T16:47:06.121Z")
 
 @Controller
@@ -33,8 +34,6 @@ public class ViolationApiController implements ViolationApi {
 
     private static final Logger log = LoggerFactory.getLogger(ViolationApiController.class);
 
-    private final ObjectMapper objectMapper;
-
     private final HttpServletRequest request;
     
     @Autowired
@@ -42,10 +41,15 @@ public class ViolationApiController implements ViolationApi {
     
     @Autowired
     private DecisionManagerImpl decisionManager;
-
-	@Autowired
-	private NotificationManagerImpl notificationManager;
     
+    @Autowired
+	Environment env;
+    
+    private final ObjectMapper objectMapper;
+    
+    private VaultManager vaultManager = new VaultManager();
+    private MongoManager mongoManager = new MongoManager();
+        
     @Autowired
     public ViolationApiController(ObjectMapper objectMapper, HttpServletRequest request) {
         this.objectMapper = objectMapper;
@@ -95,7 +99,7 @@ public class ViolationApiController implements ViolationApi {
         return new ResponseEntity<List<Violation>>(HttpStatus.NOT_IMPLEMENTED);
     }
 
-    public ResponseEntity<List<Violation>> getViolationsByUri(@NotNull @ApiParam(value = "URI of the application description repository", required = true) @Valid @RequestParam(value = "uri", required = true) String uri) {
+    public ResponseEntity<List<Violation>> getViolationsByUri(@NotNull @ApiParam(value = "URI of the application description repository", required = false) @Valid @RequestParam(value = "uri", required = true) String uri) {
         String accept = request.getHeader("Accept");
         if (accept != null && accept.contains("application/json")) {
             try {
@@ -108,20 +112,47 @@ public class ViolationApiController implements ViolationApi {
 
         return new ResponseEntity<List<Violation>>(HttpStatus.NOT_IMPLEMENTED);
     }
+    
+    // New code for getting List<Violation> based on user and app
+    
+    
+    public ResponseEntity<List<Violation>> getViolationsByUserApp(@NotNull @ApiParam(value = "Id of the user", required = true)  @Valid @RequestParam(value = "user", required = true) String user, @NotNull @ApiParam(value = "Id of the application", required = true) @Valid @RequestParam(value = "app", required = true) String app) {
+        String accept = request.getHeader("Accept");
+        if (accept != null && accept.contains("application/json")) {
+            try {
+                return new ResponseEntity<List<Violation>>(violationRepository.findViolationsByUserApp(user, app), HttpStatus.OK);
+            } catch (Exception e) {
+                log.error("Couldn't serialize response for content type application/json", e);
+                return new ResponseEntity<List<Violation>>(HttpStatus.INTERNAL_SERVER_ERROR);
+            }
+        }
+
+        return new ResponseEntity<List<Violation>>(HttpStatus.NOT_IMPLEMENTED);
+    }
+    
+    // End of new code
 
     public ResponseEntity<Violation> reportViolation(@ApiParam(value = "Violation that wants to be reported" ,required=true )  @Valid @RequestBody Violation violation) {
         String accept = request.getHeader("Accept");
         Violation savedViolation = null;
         if (accept != null && accept.contains("application/json")) {
             try {
+            	String user = violation.getUser();
+    			String app = violation.getApp();
+    			
+    			Map<String, String> appDescAndToken = vaultManager.readVault(env.getProperty("decide.vh.vaultUrl"), env.getProperty("decide.vh.vaultToken"), user, app);
+    			String appDescUri = appDescAndToken.get("app_desc_uri");
+    			if(violation.getEmail() == null) {
+        			String email = mongoManager.findEmailByUsername(user,env.getProperty("decide.vh.mongoDbUrl"));
+        			violation.setEmail(email);
+    			}
     			System.out.println("#################################");
-    			System.out.println("Violation Reported: " + violation.getAppDescUri());
+    			System.out.println("Violation Reported: " + appDescUri );
+    			violation.setAppDescUri(appDescUri);
             	savedViolation = violationRepository.save(violation);
     			System.out.println("Violation Saved with ID: " + savedViolation.getId());
-            	//Send email
-        		notificationManager.sendEmail(violation);
             	//Decide 
-            	decisionManager.decideViolation(violation);
+            	decisionManager.decideViolation(violation, appDescAndToken);
             	//Action
                 return new ResponseEntity<Violation>(savedViolation, HttpStatus.OK);
             } catch (Exception e) {
diff --git a/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/main/java/eu/decideh2020/adapt/violationhandler/server/modules/ActionManagerImpl.java b/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/main/java/eu/decideh2020/adapt/violationhandler/server/modules/ActionManagerImpl.java
index 09b6d7cda719c67558d217aec8686dc9575e8d0d..bc604191f197b01dff821567b9101ce0a2824ed8 100644
--- a/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/main/java/eu/decideh2020/adapt/violationhandler/server/modules/ActionManagerImpl.java
+++ b/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/main/java/eu/decideh2020/adapt/violationhandler/server/modules/ActionManagerImpl.java
@@ -1,23 +1,62 @@
 package eu.decideh2020.adapt.violationhandler.server.modules;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import org.springframework.stereotype.Service;
 
+import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
+
+import org.apache.cxf.jaxrs.client.JAXRSClientFactory;
+import org.apache.cxf.jaxrs.client.ClientConfiguration;
+import org.apache.cxf.jaxrs.client.WebClient;
+
 import eu.decideh2020.adapt.violationhandler.server.model.Violation;
+import eu.decideh2020.optimus.client.api.DefaultApi;
+import eu.decideh2020.optimus.client.model.ReturnedSimulation;
+import eu.decideh2020.optimus.client.model.Simulation;
 
 @Service
-public class ActionManagerImpl implements ActionManager{
-
+public class ActionManagerImpl implements ActionManager {
+	
 	@Override
 	public void beginRedeployment(Violation violation) {
-		//TODO: Call OPTIMUS - create new simulation
 		System.out.println("Redeployment process started.");
-		System.out.println("Call OPTIMUS (not implemented yet)");
-
-		//TODO: Adapt? Deploy when schema is ready.
+		System.out.println("Call OPTIMUS");
+		// Create a Simulation Object
+		Simulation simL = new Simulation();
+		// Assign a value to Appurl property.
+		simL.setAppurl(violation.getAppDescUri());
+		// Assign the value “VH” to the caller property
+		simL.setCaller("VH");
+		// Connection instructions
+		JacksonJsonProvider provider = new JacksonJsonProvider();
+		List providers = new ArrayList();
+		providers.add(provider);
+		DefaultApi apiInstance = JAXRSClientFactory.create("http://85.91.40.245:8090/optimussimulation/", DefaultApi.class, providers);
+		org.apache.cxf.jaxrs.client.Client client = WebClient.client(apiInstance);
+		ClientConfiguration config = WebClient.getConfig(client);
+		List<ReturnedSimulation> response = new ArrayList<ReturnedSimulation>();
+		response = apiInstance.createsSimulationUsingPOST(simL);
+		// In this moment the response is a list of simulations but just with an
+		// element. I have to re-analyze this aspect.
+		Integer id = response.get(0).getSimid();
+		// If VH needs to know when the simulation finishes
+		// this process (my way of do it I mean) can be improved
+		String status = response.get(0).getStatus();
+		while (status.equals("started")) {
+			List<ReturnedSimulation> response2 = new ArrayList<ReturnedSimulation>();
+			response2 = apiInstance.getSimulationUsingGET(id);
+			status = response2.get(0).getStatus();
+		}
+		// If the simulation finished, the schema should be stored in the DECIDE.json in
+		// the gitURL repo.
+		System.out.println("Call OPTIMUS END");
+		// TODO: Adapt? Deploy when schema is ready.
 	}
-	
+
 }
 
-interface ActionManager{
+interface ActionManager {
 	public void beginRedeployment(Violation violation);
 }
diff --git a/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/main/java/eu/decideh2020/adapt/violationhandler/server/modules/DecisionManagerImpl.java b/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/main/java/eu/decideh2020/adapt/violationhandler/server/modules/DecisionManagerImpl.java
index fe492e93666f03aa1216b179f23295b326ed2aae..915ad738812e95796e8d7672b24a89a4d1141b06 100644
--- a/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/main/java/eu/decideh2020/adapt/violationhandler/server/modules/DecisionManagerImpl.java
+++ b/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/main/java/eu/decideh2020/adapt/violationhandler/server/modules/DecisionManagerImpl.java
@@ -2,16 +2,16 @@ package eu.decideh2020.adapt.violationhandler.server.modules;
 
 import java.io.IOException;
 import java.nio.file.Paths;
+import java.util.Map;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.core.env.Environment;
 
 import eu.DECIDEh2020.appManager.AppManager;
 import eu.DECIDEh2020.appManager.exceptions.AppManagerException;
-import eu.DECIDEh2020.appManager.exceptions.DECIDEValidationException;
 import eu.DECIDEh2020.appManager.models.AppDescription;
 import eu.decideh2020.adapt.violationhandler.server.model.Violation;
-import eu.decideh2020.adapt.violationhandler.server.util.Constants;
 
 
 @Service
@@ -22,24 +22,37 @@ public class DecisionManagerImpl implements DecisionManager {
 	
 	@Autowired
 	NotificationManagerImpl notificationManager;
+	
+	@Autowired
+	Environment env;
 
 	@Override
-	public void decideViolation(Violation violation) {
-		// TODO Auto-generated method stub
+	public void decideViolation(Violation violation, Map<String, String> appDescAndToken) {
 		AppManager appManager = null;
 		AppDescription appDescription = null;
+		
+		//New variables
+		String gitToken = null;
+		//End of new variables
 
-		try {
-			appManager = AppManager.open(violation.getAppDescUri(), Constants.gitToken, Paths.get(Constants.REPOSITORY_PATH));
+		try {			
+			
+			//New code for vault access
+			gitToken = appDescAndToken.get("token_git");		
+			// End of new code
+			
+			appManager = AppManager.open(violation.getAppDescUri(), gitToken, Paths.get(env.getProperty("decide.vh.REPOSITORY_PATH")));
 			appManager.sync();
 			appDescription = appManager.getAppDescription();
 			
 			boolean highTechnologicalRisk = appDescription.getHighTechnologicalRisk();
 			System.out.println("High Technological Risk: " + highTechnologicalRisk);
-			if(highTechnologicalRisk) {
+			if(highTechnologicalRisk || violation.getType() == 2) {
 				//Notify email high risk detected
 				notificationManager.sendUrgentEmail(violation, appDescription);
 			}else {
+				//Send email
+				notificationManager.sendEmail(violation);
 				//Begin redeployment
 				actionManager.beginRedeployment(violation);
 			}
@@ -50,9 +63,10 @@ public class DecisionManagerImpl implements DecisionManager {
 			System.out.println("Error reading the Application description");
 			e.printStackTrace();
 		}
-	}	
+	}
+
 }
 
 interface DecisionManager{
-	public abstract void decideViolation(Violation violation);
+	public abstract void decideViolation(Violation violation, Map<String, String> appDescAndToken);
 }
diff --git a/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/main/java/eu/decideh2020/adapt/violationhandler/server/modules/NotificationManagerImpl.java b/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/main/java/eu/decideh2020/adapt/violationhandler/server/modules/NotificationManagerImpl.java
index cce2c658753269b4bf15c3eaeadc13f41b4cfbd4..5802eb644d4f9c3be775125df679a66d451ca01c 100644
--- a/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/main/java/eu/decideh2020/adapt/violationhandler/server/modules/NotificationManagerImpl.java
+++ b/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/main/java/eu/decideh2020/adapt/violationhandler/server/modules/NotificationManagerImpl.java
@@ -2,13 +2,11 @@ package eu.decideh2020.adapt.violationhandler.server.modules;
 
 import java.util.Properties;
 
-import javax.mail.PasswordAuthentication;
-import javax.mail.Session;
 import javax.mail.internet.AddressException;
 import javax.mail.internet.InternetAddress;
 
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Bean;
+import org.springframework.core.env.Environment;
 import org.springframework.mail.SimpleMailMessage;
 import org.springframework.mail.javamail.JavaMailSender;
 import org.springframework.mail.javamail.JavaMailSenderImpl;
@@ -16,24 +14,23 @@ import org.springframework.stereotype.Service;
 
 import eu.DECIDEh2020.appManager.models.AppDescription;
 import eu.decideh2020.adapt.violationhandler.server.model.Violation;
-import eu.decideh2020.adapt.violationhandler.server.util.Constants;
 
 @Service
 public class NotificationManagerImpl implements NotificationManager{
-
-	@Autowired
-	JavaMailSender emailSender;
 	
+	@Autowired
+	Environment env;
+    
 	@Override
 	public void sendEmail(Violation violation) {
-		// TODO:AppDescription - Get developer email. 
+		JavaMailSender emailSender = this.getJavaMailSender();
 		//Check email address is OK
 		if(isValidEmailAddress(violation.getEmail())){
 			SimpleMailMessage message = new SimpleMailMessage(); 
 			
 			message.setFrom("violationhandler@gmail.com");
 	        message.setTo(violation.getEmail()); //Extract from app desc
-	        message.setSubject("Violation handler - DECIDE: New violation detected in your application"); 
+	        message.setSubject("Violation handler - DECIDE: New violation detected in your application. A redeployment has been done."); 
 	        message.setText(violation.toString());
 	        
 	        emailSender.send(message);
@@ -43,8 +40,9 @@ public class NotificationManagerImpl implements NotificationManager{
 	
 	@Override
 	public void sendUrgentEmail(Violation violation, AppDescription appDescription) {
+		JavaMailSender emailSender = this.getJavaMailSender();
 		//Check email address is OK
-		if(isValidEmailAddress(violation.getEmail())){
+		if(violation.getEmail() != null && !violation.getEmail().isEmpty() && isValidEmailAddress(violation.getEmail())){
 			SimpleMailMessage message = new SimpleMailMessage(); 
 			
 			message.setFrom("violationhandler@gmail.com");
@@ -57,15 +55,13 @@ public class NotificationManagerImpl implements NotificationManager{
 		}
 	}
 	
-	@Bean
 	public JavaMailSender getJavaMailSender() {
 		JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
-		//mailSender.setHost("smtp.gmail.com");
 		mailSender.setHost("smtp.gmail.com");
 	    mailSender.setPort(465);
-	     
-	    mailSender.setUsername(Constants.VIOLATION_HANDLER_EMAIL);// DECIDE VH mail account
-	    mailSender.setPassword(Constants.VIOLATION_HANDLER_PASSWORD); //DECIDE VH mail account
+	    
+	    mailSender.setUsername(env.getProperty("decide.vh.VIOLATION_HANDLER_EMAIL"));// DECIDE VH mail account
+	    mailSender.setPassword(env.getProperty("decide.vh.VIOLATION_HANDLER_PASSWORD")); //DECIDE VH mail account
 	     
 	    Properties props = mailSender.getJavaMailProperties();
 	    props.put("mail.transport.protocol", "smtp");
diff --git a/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/main/java/eu/decideh2020/adapt/violationhandler/server/repository/ViolationRepository.java b/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/main/java/eu/decideh2020/adapt/violationhandler/server/repository/ViolationRepository.java
index 9b81b31326d599588388dab238677f3f8081eb43..e6e61fa716d7f52ed6d7a042a280974af3f55853 100644
--- a/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/main/java/eu/decideh2020/adapt/violationhandler/server/repository/ViolationRepository.java
+++ b/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/main/java/eu/decideh2020/adapt/violationhandler/server/repository/ViolationRepository.java
@@ -18,4 +18,11 @@ public interface ViolationRepository extends CrudRepository<Violation, Integer>
 	
 	@Query(value="SELECT * FROM violation WHERE app_desc_uri = ?1",nativeQuery=true)
 	List<Violation> findViolationsByUri(String appDescUri);
+	
+	//New code for user and application
+	
+	@Query(value="SELECT * FROM violation WHERE user = ?1 AND app = ?2",nativeQuery=true)
+	List<Violation> findViolationsByUserApp(String user, String app);
+	
+	//End of new code
 }
diff --git a/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/main/java/eu/decideh2020/adapt/violationhandler/server/util/Constants.java b/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/main/java/eu/decideh2020/adapt/violationhandler/server/util/Constants.java
deleted file mode 100644
index 1a3a097808fd45e23c4baffeeff1b6381dedf34c..0000000000000000000000000000000000000000
--- a/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/main/java/eu/decideh2020/adapt/violationhandler/server/util/Constants.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package eu.decideh2020.adapt.violationhandler.server.util;
-
-public class Constants {
-	//Local DECIDE.json
-	//String gitRef="https://git.code.tecnalia.com/decide/adapt-do-demo/blob/master/Socks-shop/DECIDE.json";
-	
-	//https://git.code.tecnalia.com/decide/SockShop_AppDescription
-	public static String gitToken="a_CDddDa21qvznTPbsG7";
-	//public static String gitToken="093b2995e77e9ccefdb3a8a93d997b8f58d315f0";
-	//Change in the future and extract form the app description.
-	public static String userEmail="antonio.fernandez@experis.es";//TODO:Extract this from app desc or violation
-	
-	public static String VIOLATION_HANDLER_EMAIL = "violationhandler@gmail.com";
-	public static String VIOLATION_HANDLER_PASSWORD = "d3c1d32018";
-	
-	//public static String gitToken="093b2995e77e9ccefdb3a8a93d997b8f58d315f0";
-	
-	public static final String REPOSITORY_PATH = "src/main/resources/decide-projects/";
-	
-	//URL
-	public static final String optimusUrl = "http://85.91.40.245:8090/optimussimulation";
-
-
-}
diff --git a/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/main/java/eu/decideh2020/adapt/violationhandler/server/util/MongoManager.java b/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/main/java/eu/decideh2020/adapt/violationhandler/server/util/MongoManager.java
new file mode 100644
index 0000000000000000000000000000000000000000..22d094ddcae9904a52ef3352975f5e157e2a6447
--- /dev/null
+++ b/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/main/java/eu/decideh2020/adapt/violationhandler/server/util/MongoManager.java
@@ -0,0 +1,37 @@
+package eu.decideh2020.adapt.violationhandler.server.util;
+import static com.mongodb.client.model.Filters.eq;
+
+import org.bson.Document;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
+
+import com.mongodb.MongoClient;
+import com.mongodb.MongoClientURI;
+import com.mongodb.client.MongoCollection;
+import com.mongodb.client.MongoDatabase;
+
+public class MongoManager {
+	
+	@Autowired
+	Environment env;
+	
+	public String findEmailByUsername (String user, String mongoUrl) {
+		String email = null;
+		try {
+			MongoClient mongoClient = new MongoClient(new MongoClientURI(mongoUrl));
+			MongoDatabase decideapp = mongoClient.getDatabase("decideapp");
+			MongoCollection<Document> users = decideapp.getCollection("user");
+			
+			Document cursor = (Document) users.find(eq("username", user)).first();
+			
+			email = (String) cursor.get("email");
+			
+		
+			mongoClient.close();
+	
+		} catch (Exception e) {
+			email = null;
+		}
+		return email;
+	}
+}
diff --git a/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/main/java/eu/decideh2020/adapt/violationhandler/server/util/VaultManager.java b/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/main/java/eu/decideh2020/adapt/violationhandler/server/util/VaultManager.java
new file mode 100644
index 0000000000000000000000000000000000000000..d13b5ef0d3eaaec0ff93a33b960cd8c2582df1ce
--- /dev/null
+++ b/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/main/java/eu/decideh2020/adapt/violationhandler/server/util/VaultManager.java
@@ -0,0 +1,28 @@
+package eu.decideh2020.adapt.violationhandler.server.util;
+
+import java.net.URI;
+import java.util.Map;
+
+import org.springframework.vault.authentication.TokenAuthentication;
+import org.springframework.vault.client.VaultEndpoint;
+import org.springframework.vault.core.VaultTemplate;
+import org.springframework.vault.support.VaultResponseSupport;
+
+public class VaultManager {
+	
+	//Read Vault
+	
+	public Map<String, String> readVault(String vaultUrl, String vaultToken, String userId, String appId) {
+	       Map<String, String> data = null;
+	        try {
+	            VaultEndpoint endpoint = VaultEndpoint.from(new URI(vaultUrl));
+	            VaultTemplate vaultTemplate = new VaultTemplate(endpoint, new TokenAuthentication(vaultToken));
+	            VaultResponseSupport<Map> response = vaultTemplate.read("kv/"+ userId + "/" + appId, Map.class);
+	            data = response.getData();
+	        } catch (Exception e) {
+	            data = null;
+	        }        
+	        return data;
+	    } 
+
+}
diff --git a/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/main/resources/application.properties b/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/main/resources/application.properties
index 52f0239fd31f6d3d90cd5734f41ae3a365e817ca..a5e579f56785627d7e8b758651046f3c87af738d 100644
--- a/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/main/resources/application.properties
+++ b/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/src/main/resources/application.properties
@@ -6,6 +6,19 @@ spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=false
 
 spring.jpa.hibernate.ddl-auto=update
 spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect
-spring.datasource.url=jdbc:mysql://mysql_vh:3306/db_violations?useSSL=false
-spring.datasource.username=admin
-spring.datasource.password=decide
+spring.datasource.url=jdbc:mysql://localhost:3306/db_violations?useSSL=false
+spring.datasource.username=root
+spring.datasource.password=root
+
+spring.data.mongodb.host=192.168.1.155
+spring.data.mongodb.port=27017
+spring.data.mongodb.database=decideapp
+
+decide.vh.REPOSITORY_PATH = src/main/resources/decide-projects
+decide.vh.VIOLATION_HANDLER_EMAIL = violationhandler@gmail.com
+decide.vh.VIOLATION_HANDLER_PASSWORD = d3c1d32018
+decide.vh.gitToken = 1SqFF3zmxmS5CXTx8Ntf
+decide.vh.vaultUrl = http://192.168.1.155:1234
+decide.vh.vaultToken = decide
+decide.vh.mongoDbUrl = mongodb://192.168.1.155:27017
+decide.vh.optimusUrl = http://85.91.40.245:8090/optimussimulation
\ No newline at end of file
diff --git a/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/target/classes/eu/decideh2020/adapt/violationhandler/server/api/HelloApi.class b/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/target/classes/eu/decideh2020/adapt/violationhandler/server/api/HelloApi.class
deleted file mode 100644
index 4a62182d5a615fa342fce90f60b8576be16fcdaa..0000000000000000000000000000000000000000
Binary files a/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/target/classes/eu/decideh2020/adapt/violationhandler/server/api/HelloApi.class and /dev/null differ
diff --git a/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/target/classes/eu/decideh2020/adapt/violationhandler/server/controllers/HelloApiController.class b/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/target/classes/eu/decideh2020/adapt/violationhandler/server/controllers/HelloApiController.class
deleted file mode 100644
index 0cbe2204c1553dd8c75ed1b1d4f23736f5f67f0f..0000000000000000000000000000000000000000
Binary files a/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/target/classes/eu/decideh2020/adapt/violationhandler/server/controllers/HelloApiController.class and /dev/null differ
diff --git a/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/target/classes/eu/decideh2020/adapt/violationhandler/server/util/Constants.class b/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/target/classes/eu/decideh2020/adapt/violationhandler/server/util/Constants.class
deleted file mode 100644
index fbd92d1e1872a3914c3d622ab6e3c39dde5bca17..0000000000000000000000000000000000000000
Binary files a/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server/target/classes/eu/decideh2020/adapt/violationhandler/server/util/Constants.class and /dev/null differ
diff --git a/ADAPT/ViolationsHandler/init-public.sh b/ADAPT/ViolationsHandler/init-public.sh
index 09e64279929d0b8cffda5804577354418b698685..ffa9b2a002d9e61b321ea56b64dc5e83c2a34c98 100644
--- a/ADAPT/ViolationsHandler/init-public.sh
+++ b/ADAPT/ViolationsHandler/init-public.sh
@@ -1,9 +1,9 @@
-#!/bin/sh
-git clone https://git.code.tecnalia.com/DECIDE_Public/DECIDE_Components.git
-cd DECIDE_Components/AppManager
-git checkout $APPMANAGER_VERSION
-mvn install -DskipTests=true
-
-cd /
-cd DECIDE_Components/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server
-mvn package
+#!/bin/sh
+git clone https://git.code.tecnalia.com/DECIDE_Public/DECIDE_Components.git
+cd DECIDE_Components/AppManager
+git checkout $APPMANAGER_VERSION
+mvn install -DskipTests=true
+
+cd /
+cd DECIDE_Components/ADAPT/ViolationsHandler/eu.decideh2020.adapt.violationhandler.server
+mvn package
diff --git a/ADAPT/ViolationsHandler/init.sh b/ADAPT/ViolationsHandler/init.sh
index 41a997ea04efbe6ca802f08788fc250c0b76749b..d352fa46a481e3210aca84ec5b835414cafc6156 100644
--- a/ADAPT/ViolationsHandler/init.sh
+++ b/ADAPT/ViolationsHandler/init.sh
@@ -1,9 +1,19 @@
 #!/bin/sh
+echo "AppController"
+pwd
 git clone https://$GIT_CREDENTIALS@git.code.tecnalia.com/decide/AppController.git
 cd AppController
 git checkout $APPMANAGER_VERSION
 mvn install -DskipTests=true
 
+echo "WP3"
+pwd
+cd ..
+pwd
+git clone https://$GIT_CREDENTIALS@git.code.tecnalia.com/decide/WP3.git
+cd WP3/Optimus/eu.decideh2020.optimus.client
+mvn install -DskipTests=true
+
 cd /
 git clone https://$GIT_CREDENTIALS@git.code.tecnalia.com/decide/WP4.git
 cd WP4/Adapt_violation_handlers/eu.decideh2020.adapt.violationhandler.server
diff --git a/ARCHITECT/architect-ui/.gitignore b/ARCHITECT/architect-ui/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..185e6631928dca2f51224e61a3861cc88fa2b74e
--- /dev/null
+++ b/ARCHITECT/architect-ui/.gitignore
@@ -0,0 +1,21 @@
+.DS_Store
+node_modules
+/dist
+
+# local env files
+.env.local
+.env.*.local
+
+# Log files
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# Editor directories and files
+.idea
+.vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw*
diff --git a/ARCHITECT/architect-ui/.gitlab-ci.yml b/ARCHITECT/architect-ui/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..c080ad9e0cd58c1e810db6ca693f94ec03f5df00
--- /dev/null
+++ b/ARCHITECT/architect-ui/.gitlab-ci.yml
@@ -0,0 +1,39 @@
+stages:
+  - build
+  - deploy
+
+cache:
+  paths:
+    - node_modules
+
+build:
+  stage: build
+  tags:
+    - docker
+  image: node:8-alpine
+  script:
+    - npm install
+    - npm run build
+    - tar -zcvf dist.tar.gz dist
+    - cd dist && tar czf ../dist.tar.gz .
+  only:
+    - master
+  artifacts:
+    paths:
+      - dist.tar.gz
+
+register:
+  stage: deploy
+  tags:
+    - openshift
+  image: docker:stable
+  variables:
+    DOCKER_DRIVER: overlay2
+  services:
+    - docker:dind
+  only:
+    - master
+  script:
+    - docker login -u "gitlab-ci-token" -p "$CI_JOB_TOKEN" $CI_REGISTRY
+    - docker build --pull -t "$CI_REGISTRY_IMAGE" .
+    - docker push "$CI_REGISTRY_IMAGE"
diff --git a/ARCHITECT/architect-ui/Dockerfile b/ARCHITECT/architect-ui/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..adc75dad0ac4b14bc032a86d3fe9de1f739d7459
--- /dev/null
+++ b/ARCHITECT/architect-ui/Dockerfile
@@ -0,0 +1,17 @@
+FROM nginx:1.15-alpine
+
+MAINTAINER benjamin.dittwald@fokus.fraunhofer.de
+
+ADD dist.tar.gz /usr/share/nginx/html/
+COPY nginx.vh.default.conf /etc/nginx/conf.d/default.conf
+
+# The following steps are needed because of the OpenShift security constraints
+# Create some temp folders for later permission granting
+RUN mkdir /var/cache/nginx/uwsgi_temp && \
+    mkdir /var/cache/nginx/client_temp && \
+    mkdir /var/cache/nginx/proxy_temp && \
+    mkdir /var/cache/nginx/fastcgi_temp && \
+    mkdir /var/cache/nginx/scgi_temp && \
+    chmod g+rwx /var/cache/nginx /var/run /var/log/nginx /var/cache/nginx/client_temp
+
+EXPOSE 8080
diff --git a/ARCHITECT/architect-ui/LICENSE.txt b/ARCHITECT/architect-ui/LICENSE.txt
new file mode 100644
index 0000000000000000000000000000000000000000..1a5effe455affae45fa3bb7a9a870f498aa7a656
--- /dev/null
+++ b/ARCHITECT/architect-ui/LICENSE.txt
@@ -0,0 +1,666 @@
+Copyright (C) 2018 Fraunhofer FOKUS.
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE Version 3.
+
+                    GNU AFFERO GENERAL PUBLIC LICENSE
+                       Version 3, 19 November 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU Affero General Public License is a free, copyleft license for
+software and other kinds of works, specifically designed to ensure
+cooperation with the community in the case of network server software.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+our General Public Licenses are intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  Developers that use our General Public Licenses protect your rights
+with two steps: (1) assert copyright on the software, and (2) offer
+you this License which gives you legal permission to copy, distribute
+and/or modify the software.
+
+  A secondary benefit of defending all users' freedom is that
+improvements made in alternate versions of the program, if they
+receive widespread use, become available for other developers to
+incorporate.  Many developers of free software are heartened and
+encouraged by the resulting cooperation.  However, in the case of
+software used on network servers, this result may fail to come about.
+The GNU General Public License permits making a modified version and
+letting the public access it on a server without ever releasing its
+source code to the public.
+
+  The GNU Affero General Public License is designed specifically to
+ensure that, in such cases, the modified source code becomes available
+to the community.  It requires the operator of a network server to
+provide the source code of the modified version running there to the
+users of that server.  Therefore, public use of a modified version, on
+a publicly accessible server, gives the public access to the source
+code of the modified version.
+
+  An older license, called the Affero General Public License and
+published by Affero, was designed to accomplish similar goals.  This is
+a different license, not a version of the Affero GPL, but Affero has
+released a new version of the Affero GPL which permits relicensing under
+this license.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU Affero General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Remote Network Interaction; Use with the GNU General Public License.
+
+  Notwithstanding any other provision of this License, if you modify the
+Program, your modified version must prominently offer all users
+interacting with it remotely through a computer network (if your version
+supports such interaction) an opportunity to receive the Corresponding
+Source of your version by providing access to the Corresponding Source
+from a network server at no charge, through some standard or customary
+means of facilitating copying of software.  This Corresponding Source
+shall include the Corresponding Source for any work covered by version 3
+of the GNU General Public License that is incorporated pursuant to the
+following paragraph.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the work with which it is combined will remain governed by version
+3 of the GNU General Public License.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU Affero General Public License from time to time.  Such new versions
+will be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU Affero General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU Affero General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU Affero General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU Affero General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU Affero General Public License for more details.
+
+    You should have received a copy of the GNU Affero General Public License
+    along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If your software can interact with users remotely through a computer
+network, you should also make sure that it provides a way for users to
+get its source.  For example, if your program is a web application, its
+interface could display a "Source" link that leads users to an archive
+of the code.  There are many ways you could offer source, and different
+solutions will be better for different programs; see section 13 for the
+specific requirements.
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU AGPL, see
+<https://www.gnu.org/licenses/>.
diff --git a/ARCHITECT/architect-ui/README.md b/ARCHITECT/architect-ui/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..f87cabdd96ee960659753cd5e6219cff881553c5
--- /dev/null
+++ b/ARCHITECT/architect-ui/README.md
@@ -0,0 +1,40 @@
+# DECIDE ARCHITECT Frontend
+
+## Setup the project
+Install <a href="https://nodejs.org/en/">Node.js and NPM</a> on your system.
+
+<br>
+
+### Clone the architect-ui repository:
+
+    $ git clone https://gitlab.fokus.fraunhofer.de/DECIDE/architect-ui.git
+
+<br>
+
+### Install NPM packages:
+
+    $ cd architect-ui
+    $ npm install
+
+<br>
+
+### Configure URI of the Cloud Pattern Compendium Service in `app-config.json`:
+
+```json
+{
+    "serviceUri": "http://85.91.40.245:8001"
+}
+```
+
+<br>
+
+### Compile and run for development:
+
+    $ npm run serve
+
+
+<br>
+
+### Compile and run for production:
+
+    $ npm run build
diff --git a/ARCHITECT/architect-ui/app-config.json b/ARCHITECT/architect-ui/app-config.json
new file mode 100644
index 0000000000000000000000000000000000000000..092292c474201fd88ff33f20ca9695e88b2921f6
--- /dev/null
+++ b/ARCHITECT/architect-ui/app-config.json
@@ -0,0 +1,5 @@
+{
+    "serviceUri": "http://85.91.40.245:8001",
+    "defaultGitRepo": "https://git.code.tecnalia.com/decide/SockShop_AppDescription.git",
+    "defaultGitToken": "Hz5t-ZiqWm-4JCm__d9u"
+}
\ No newline at end of file
diff --git a/ARCHITECT/architect-ui/architect-ui.iml b/ARCHITECT/architect-ui/architect-ui.iml
new file mode 100644
index 0000000000000000000000000000000000000000..8021953ed9f8cc6cd6d71c79462bad4cd2b5394c
--- /dev/null
+++ b/ARCHITECT/architect-ui/architect-ui.iml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="WEB_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$" />
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>
\ No newline at end of file
diff --git a/ARCHITECT/architect-ui/babel.config.js b/ARCHITECT/architect-ui/babel.config.js
new file mode 100644
index 0000000000000000000000000000000000000000..ba179669a123909a9728283fd9c004c65adb90c5
--- /dev/null
+++ b/ARCHITECT/architect-ui/babel.config.js
@@ -0,0 +1,5 @@
+module.exports = {
+  presets: [
+    '@vue/app'
+  ]
+}
diff --git a/ARCHITECT/architect-ui/httpd.conf b/ARCHITECT/architect-ui/httpd.conf
new file mode 100644
index 0000000000000000000000000000000000000000..ffddf93adc6d5cffd28efb83f4830f98f4e94a40
--- /dev/null
+++ b/ARCHITECT/architect-ui/httpd.conf
@@ -0,0 +1,546 @@
+#
+# This is the main Apache HTTP server configuration file.  It contains the
+# configuration directives that give the server its instructions.
+# See <URL:http://httpd.apache.org/docs/2.4/> for detailed information.
+# In particular, see
+# <URL:http://httpd.apache.org/docs/2.4/mod/directives.html>
+# for a discussion of each configuration directive.
+#
+# Do NOT simply read the instructions in here without understanding
+# what they do.  They're here only as hints or reminders.  If you are unsure
+# consult the online docs. You have been warned.
+#
+# Configuration and logfile names: If the filenames you specify for many
+# of the server's control files begin with "/" (or "drive:/" for Win32), the
+# server will use that explicit path.  If the filenames do *not* begin
+# with "/", the value of ServerRoot is prepended -- so "logs/access_log"
+# with ServerRoot set to "/usr/local/apache2" will be interpreted by the
+# server as "/usr/local/apache2/logs/access_log", whereas "/logs/access_log"
+# will be interpreted as '/logs/access_log'.
+
+#
+# ServerRoot: The top of the directory tree under which the server's
+# configuration, error, and log files are kept.
+#
+# Do not add a slash at the end of the directory path.  If you point
+# ServerRoot at a non-local disk, be sure to specify a local disk on the
+# Mutex directive, if file-based mutexes are used.  If you wish to share the
+# same ServerRoot for multiple httpd daemons, you will need to change at
+# least PidFile.
+#
+ServerRoot "/usr/local/apache2"
+
+#
+# Mutex: Allows you to set the mutex mechanism and mutex file directory
+# for individual mutexes, or change the global defaults
+#
+# Uncomment and change the directory if mutexes are file-based and the default
+# mutex file directory is not on a local disk or is not appropriate for some
+# other reason.
+#
+# Mutex default:logs
+
+#
+# Listen: Allows you to bind Apache to specific IP addresses and/or
+# ports, instead of the default. See also the <VirtualHost>
+# directive.
+#
+# Change this to Listen on specific IP addresses as shown below to
+# prevent Apache from glomming onto all bound IP addresses.
+#
+#Listen 12.34.56.78:80
+Listen 8080
+
+#
+# Dynamic Shared Object (DSO) Support
+#
+# To be able to use the functionality of a module which was built as a DSO you
+# have to place corresponding `LoadModule' lines at this location so the
+# directives contained in it are actually available _before_ they are used.
+# Statically compiled modules (those listed by `httpd -l') do not need
+# to be loaded here.
+#
+# Example:
+# LoadModule foo_module modules/mod_foo.so
+#
+LoadModule mpm_event_module modules/mod_mpm_event.so
+#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
+#LoadModule mpm_worker_module modules/mod_mpm_worker.so
+LoadModule authn_file_module modules/mod_authn_file.so
+#LoadModule authn_dbm_module modules/mod_authn_dbm.so
+#LoadModule authn_anon_module modules/mod_authn_anon.so
+#LoadModule authn_dbd_module modules/mod_authn_dbd.so
+#LoadModule authn_socache_module modules/mod_authn_socache.so
+LoadModule authn_core_module modules/mod_authn_core.so
+LoadModule authz_host_module modules/mod_authz_host.so
+LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
+LoadModule authz_user_module modules/mod_authz_user.so
+#LoadModule authz_dbm_module modules/mod_authz_dbm.so
+#LoadModule authz_owner_module modules/mod_authz_owner.so
+#LoadModule authz_dbd_module modules/mod_authz_dbd.so
+LoadModule authz_core_module modules/mod_authz_core.so
+#LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
+#LoadModule authnz_fcgi_module modules/mod_authnz_fcgi.so
+LoadModule access_compat_module modules/mod_access_compat.so
+LoadModule auth_basic_module modules/mod_auth_basic.so
+#LoadModule auth_form_module modules/mod_auth_form.so
+#LoadModule auth_digest_module modules/mod_auth_digest.so
+#LoadModule allowmethods_module modules/mod_allowmethods.so
+#LoadModule isapi_module modules/mod_isapi.so
+#LoadModule file_cache_module modules/mod_file_cache.so
+#LoadModule cache_module modules/mod_cache.so
+#LoadModule cache_disk_module modules/mod_cache_disk.so
+#LoadModule cache_socache_module modules/mod_cache_socache.so
+#LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
+#LoadModule socache_dbm_module modules/mod_socache_dbm.so
+#LoadModule socache_memcache_module modules/mod_socache_memcache.so
+#LoadModule watchdog_module modules/mod_watchdog.so
+#LoadModule macro_module modules/mod_macro.so
+#LoadModule dbd_module modules/mod_dbd.so
+#LoadModule bucketeer_module modules/mod_bucketeer.so
+#LoadModule dumpio_module modules/mod_dumpio.so
+#LoadModule echo_module modules/mod_echo.so
+#LoadModule example_hooks_module modules/mod_example_hooks.so
+#LoadModule case_filter_module modules/mod_case_filter.so
+#LoadModule case_filter_in_module modules/mod_case_filter_in.so
+#LoadModule example_ipc_module modules/mod_example_ipc.so
+#LoadModule buffer_module modules/mod_buffer.so
+#LoadModule data_module modules/mod_data.so
+#LoadModule ratelimit_module modules/mod_ratelimit.so
+LoadModule reqtimeout_module modules/mod_reqtimeout.so
+#LoadModule ext_filter_module modules/mod_ext_filter.so
+#LoadModule request_module modules/mod_request.so
+#LoadModule include_module modules/mod_include.so
+LoadModule filter_module modules/mod_filter.so
+#LoadModule reflector_module modules/mod_reflector.so
+#LoadModule substitute_module modules/mod_substitute.so
+#LoadModule sed_module modules/mod_sed.so
+#LoadModule charset_lite_module modules/mod_charset_lite.so
+#LoadModule deflate_module modules/mod_deflate.so
+#LoadModule xml2enc_module modules/mod_xml2enc.so
+#LoadModule proxy_html_module modules/mod_proxy_html.so
+LoadModule mime_module modules/mod_mime.so
+#LoadModule ldap_module modules/mod_ldap.so
+LoadModule log_config_module modules/mod_log_config.so
+#LoadModule log_debug_module modules/mod_log_debug.so
+#LoadModule log_forensic_module modules/mod_log_forensic.so
+#LoadModule logio_module modules/mod_logio.so
+#LoadModule lua_module modules/mod_lua.so
+LoadModule env_module modules/mod_env.so
+#LoadModule mime_magic_module modules/mod_mime_magic.so
+#LoadModule cern_meta_module modules/mod_cern_meta.so
+#LoadModule expires_module modules/mod_expires.so
+LoadModule headers_module modules/mod_headers.so
+#LoadModule ident_module modules/mod_ident.so
+#LoadModule usertrack_module modules/mod_usertrack.so
+#LoadModule unique_id_module modules/mod_unique_id.so
+LoadModule setenvif_module modules/mod_setenvif.so
+LoadModule version_module modules/mod_version.so
+#LoadModule remoteip_module modules/mod_remoteip.so
+#LoadModule proxy_module modules/mod_proxy.so
+#LoadModule proxy_connect_module modules/mod_proxy_connect.so
+#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
+#LoadModule proxy_http_module modules/mod_proxy_http.so
+#LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
+#LoadModule proxy_scgi_module modules/mod_proxy_scgi.so
+#LoadModule proxy_fdpass_module modules/mod_proxy_fdpass.so
+#LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
+#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
+#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
+#LoadModule proxy_express_module modules/mod_proxy_express.so
+#LoadModule proxy_hcheck_module modules/mod_proxy_hcheck.so
+#LoadModule session_module modules/mod_session.so
+#LoadModule session_cookie_module modules/mod_session_cookie.so
+#LoadModule session_crypto_module modules/mod_session_crypto.so
+#LoadModule session_dbd_module modules/mod_session_dbd.so
+#LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
+#LoadModule slotmem_plain_module modules/mod_slotmem_plain.so
+#LoadModule ssl_module modules/mod_ssl.so
+#LoadModule optional_hook_export_module modules/mod_optional_hook_export.so
+#LoadModule optional_hook_import_module modules/mod_optional_hook_import.so
+#LoadModule optional_fn_import_module modules/mod_optional_fn_import.so
+#LoadModule optional_fn_export_module modules/mod_optional_fn_export.so
+#LoadModule dialup_module modules/mod_dialup.so
+#LoadModule http2_module modules/mod_http2.so
+#LoadModule proxy_http2_module modules/mod_proxy_http2.so
+#LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
+#LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so
+#LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
+#LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so
+LoadModule unixd_module modules/mod_unixd.so
+#LoadModule heartbeat_module modules/mod_heartbeat.so
+#LoadModule heartmonitor_module modules/mod_heartmonitor.so
+#LoadModule dav_module modules/mod_dav.so
+LoadModule status_module modules/mod_status.so
+LoadModule autoindex_module modules/mod_autoindex.so
+#LoadModule asis_module modules/mod_asis.so
+#LoadModule info_module modules/mod_info.so
+#LoadModule suexec_module modules/mod_suexec.so
+<IfModule !mpm_prefork_module>
+#LoadModule cgid_module modules/mod_cgid.so
+</IfModule>
+<IfModule mpm_prefork_module>
+#LoadModule cgi_module modules/mod_cgi.so
+</IfModule>
+#LoadModule dav_fs_module modules/mod_dav_fs.so
+#LoadModule dav_lock_module modules/mod_dav_lock.so
+#LoadModule vhost_alias_module modules/mod_vhost_alias.so
+#LoadModule negotiation_module modules/mod_negotiation.so
+LoadModule dir_module modules/mod_dir.so
+#LoadModule imagemap_module modules/mod_imagemap.so
+#LoadModule actions_module modules/mod_actions.so
+#LoadModule speling_module modules/mod_speling.so
+#LoadModule userdir_module modules/mod_userdir.so
+LoadModule alias_module modules/mod_alias.so
+LoadModule rewrite_module modules/mod_rewrite.so
+
+<IfModule unixd_module>
+#
+# If you wish httpd to run as a different user or group, you must run
+# httpd as root initially and it will switch.
+#
+# User/Group: The name (or #number) of the user/group to run httpd as.
+# It is usually good practice to create a dedicated user and group for
+# running httpd, as with most system services.
+#
+User daemon
+Group daemon
+
+</IfModule>
+
+# 'Main' server configuration
+#
+# The directives in this section set up the values used by the 'main'
+# server, which responds to any requests that aren't handled by a
+# <VirtualHost> definition.  These values also provide defaults for
+# any <VirtualHost> containers you may define later in the file.
+#
+# All of these directives may appear inside <VirtualHost> containers,
+# in which case these default settings will be overridden for the
+# virtual host being defined.
+#
+
+#
+# ServerAdmin: Your address, where problems with the server should be
+# e-mailed.  This address appears on some server-generated pages, such
+# as error documents.  e.g. admin@your-domain.com
+#
+ServerAdmin you@example.com
+
+#
+# ServerName gives the name and port that the server uses to identify itself.
+# This can often be determined automatically, but we recommend you specify
+# it explicitly to prevent problems during startup.
+#
+# If your host doesn't have a registered DNS name, enter its IP address here.
+#
+#ServerName www.example.com:80
+
+#
+# Deny access to the entirety of your server's filesystem. You must
+# explicitly permit access to web content directories in other
+# <Directory> blocks below.
+#
+<Directory />
+AllowOverride none
+Require all denied
+</Directory>
+
+#
+# Note that from this point forward you must specifically allow
+# particular features to be enabled - so if something's not working as
+# you might expect, make sure that you have specifically enabled it
+# below.
+#
+
+#
+# DocumentRoot: The directory out of which you will serve your
+# documents. By default, all requests are taken from this directory, but
+# symbolic links and aliases may be used to point to other locations.
+#
+DocumentRoot "/usr/local/apache2/htdocs"
+<Directory "/usr/local/apache2/htdocs">
+#
+# Possible values for the Options directive are "None", "All",
+# or any combination of:
+#   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
+#
+# Note that "MultiViews" must be named *explicitly* --- "Options All"
+# doesn't give it to you.
+#
+# The Options directive is both complicated and important.  Please see
+# http://httpd.apache.org/docs/2.4/mod/core.html#options
+# for more information.
+#
+Options Indexes FollowSymLinks
+
+#
+# AllowOverride controls what directives may be placed in .htaccess files.
+# It can be "All", "None", or any combination of the keywords:
+#   AllowOverride FileInfo AuthConfig Limit
+#
+AllowOverride All
+
+#
+# Controls who can get stuff from this server.
+#
+Require all granted
+</Directory>
+
+#
+# DirectoryIndex: sets the file that Apache will serve if a directory
+# is requested.
+#
+<IfModule dir_module>
+DirectoryIndex index.html
+</IfModule>
+
+#
+# The following lines prevent .htaccess and .htpasswd files from being
+# viewed by Web clients.
+#
+<Files ".ht*">
+Require all denied
+</Files>
+
+#
+# ErrorLog: The location of the error log file.
+# If you do not specify an ErrorLog directive within a <VirtualHost>
+# container, error messages relating to that virtual host will be
+# logged here.  If you *do* define an error logfile for a <VirtualHost>
+# container, that host's errors will be logged there and not here.
+#
+ErrorLog /proc/self/fd/2
+
+#
+# LogLevel: Control the number of messages logged to the error_log.
+# Possible values include: debug, info, notice, warn, error, crit,
+# alert, emerg.
+#
+LogLevel warn
+
+<IfModule log_config_module>
+#
+# The following directives define some format nicknames for use with
+# a CustomLog directive (see below).
+#
+LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
+LogFormat "%h %l %u %t \"%r\" %>s %b" common
+
+<IfModule logio_module>
+# You need to enable mod_logio.c to use %I and %O
+LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
+</IfModule>
+
+#
+# The location and format of the access logfile (Common Logfile Format).
+# If you do not define any access logfiles within a <VirtualHost>
+# container, they will be logged here.  Contrariwise, if you *do*
+# define per-<VirtualHost> access logfiles, transactions will be
+# logged therein and *not* in this file.
+#
+CustomLog /proc/self/fd/1 common
+
+#
+# If you prefer a logfile with access, agent, and referer information
+# (Combined Logfile Format) you can use the following directive.
+#
+#CustomLog "logs/access_log" combined
+</IfModule>
+
+<IfModule alias_module>
+#
+# Redirect: Allows you to tell clients about documents that used to
+# exist in your server's namespace, but do not anymore. The client
+# will make a new request for the document at its new location.
+# Example:
+# Redirect permanent /foo http://www.example.com/bar
+
+#
+# Alias: Maps web paths into filesystem paths and is used to
+# access content that does not live under the DocumentRoot.
+# Example:
+# Alias /webpath /full/filesystem/path
+#
+# If you include a trailing / on /webpath then the server will
+# require it to be present in the URL.  You will also likely
+# need to provide a <Directory> section to allow access to
+# the filesystem path.
+
+#
+# ScriptAlias: This controls which directories contain server scripts.
+# ScriptAliases are essentially the same as Aliases, except that
+# documents in the target directory are treated as applications and
+# run by the server when requested rather than as documents sent to the
+# client.  The same rules about trailing "/" apply to ScriptAlias
+# directives as to Alias.
+#
+ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"
+
+</IfModule>
+
+<IfModule cgid_module>
+#
+# ScriptSock: On threaded servers, designate the path to the UNIX
+# socket used to communicate with the CGI daemon of mod_cgid.
+#
+#Scriptsock cgisock
+</IfModule>
+
+#
+# "/usr/local/apache2/cgi-bin" should be changed to whatever your ScriptAliased
+# CGI directory exists, if you have that configured.
+#
+<Directory "/usr/local/apache2/cgi-bin">
+AllowOverride None
+Options None
+Require all granted
+</Directory>
+
+<IfModule headers_module>
+#
+# Avoid passing HTTP_PROXY environment to CGI's on this or any proxied
+# backend servers which have lingering "httpoxy" defects.
+# 'Proxy' request header is undefined by the IETF, not listed by IANA
+#
+RequestHeader unset Proxy early
+</IfModule>
+
+<IfModule mime_module>
+#
+# TypesConfig points to the file containing the list of mappings from
+# filename extension to MIME-type.
+#
+TypesConfig conf/mime.types
+
+#
+# AddType allows you to add to or override the MIME configuration
+# file specified in TypesConfig for specific file types.
+#
+#AddType application/x-gzip .tgz
+#
+# AddEncoding allows you to have certain browsers uncompress
+# information on the fly. Note: Not all browsers support this.
+#
+#AddEncoding x-compress .Z
+#AddEncoding x-gzip .gz .tgz
+#
+# If the AddEncoding directives above are commented-out, then you
+# probably should define those extensions to indicate media types:
+#
+AddType application/x-compress .Z
+AddType application/x-gzip .gz .tgz
+
+#
+# AddHandler allows you to map certain file extensions to "handlers":
+# actions unrelated to filetype. These can be either built into the server
+# or added with the Action directive (see below)
+#
+# To use CGI scripts outside of ScriptAliased directories:
+# (You will also need to add "ExecCGI" to the "Options" directive.)
+#
+#AddHandler cgi-script .cgi
+
+# For type maps (negotiated resources):
+#AddHandler type-map var
+
+#
+# Filters allow you to process content before it is sent to the client.
+#
+# To parse .shtml files for server-side includes (SSI):
+# (You will also need to add "Includes" to the "Options" directive.)
+#
+#AddType text/html .shtml
+#AddOutputFilter INCLUDES .shtml
+</IfModule>
+
+#
+# The mod_mime_magic module allows the server to use various hints from the
+# contents of the file itself to determine its type.  The MIMEMagicFile
+# directive tells the module where the hint definitions are located.
+#
+#MIMEMagicFile conf/magic
+
+#
+# Customizable error responses come in three flavors:
+# 1) plain text 2) local redirects 3) external redirects
+#
+# Some examples:
+#ErrorDocument 500 "The server made a boo boo."
+#ErrorDocument 404 /missing.html
+#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
+#ErrorDocument 402 http://www.example.com/subscription_info.html
+#
+
+#
+# MaxRanges: Maximum number of Ranges in a request before
+# returning the entire resource, or one of the special
+# values 'default', 'none' or 'unlimited'.
+# Default setting is to accept 200 Ranges.
+#MaxRanges unlimited
+
+#
+# EnableMMAP and EnableSendfile: On systems that support it,
+# memory-mapping or the sendfile syscall may be used to deliver
+# files.  This usually improves server performance, but must
+# be turned off when serving from networked-mounted
+# filesystems or if support for these functions is otherwise
+# broken on your system.
+# Defaults: EnableMMAP On, EnableSendfile Off
+#
+#EnableMMAP off
+#EnableSendfile on
+
+# Supplemental configuration
+#
+# The configuration files in the conf/extra/ directory can be
+# included to add extra features or to modify the default configuration of
+# the server, or you may simply copy their contents here and change as
+# necessary.
+
+# Server-pool management (MPM specific)
+#Include conf/extra/httpd-mpm.conf
+
+# Multi-language error messages
+#Include conf/extra/httpd-multilang-errordoc.conf
+
+# Fancy directory listings
+#Include conf/extra/httpd-autoindex.conf
+
+# Language settings
+#Include conf/extra/httpd-languages.conf
+
+# User home directories
+#Include conf/extra/httpd-userdir.conf
+
+# Real-time info on requests and configuration
+#Include conf/extra/httpd-info.conf
+
+# Virtual hosts
+#Include conf/extra/httpd-vhosts.conf
+
+# Local access to the Apache HTTP Server Manual
+#Include conf/extra/httpd-manual.conf
+
+# Distributed authoring and versioning (WebDAV)
+#Include conf/extra/httpd-dav.conf
+
+# Various default settings
+#Include conf/extra/httpd-default.conf
+
+# Configure mod_proxy_html to understand HTML4/XHTML1
+<IfModule proxy_html_module>
+Include conf/extra/proxy-html.conf
+</IfModule>
+
+# Secure (SSL/TLS) connections
+#Include conf/extra/httpd-ssl.conf
+#
+# Note: The following must must be present to support
+#       starting without SSL on platforms with no /dev/random equivalent
+#       but a statically compiled-in mod_ssl.
+#
+<IfModule ssl_module>
+SSLRandomSeed startup builtin
+SSLRandomSeed connect builtin
+</IfModule>
\ No newline at end of file
diff --git a/ARCHITECT/architect-ui/nginx.vh.default.conf b/ARCHITECT/architect-ui/nginx.vh.default.conf
new file mode 100644
index 0000000000000000000000000000000000000000..a39599b3485556a6ea7fdec2be4ccb811de2b262
--- /dev/null
+++ b/ARCHITECT/architect-ui/nginx.vh.default.conf
@@ -0,0 +1,15 @@
+server {
+    listen 8080;
+
+    location / {
+        add_header Access-Control-Allow-Origin *;
+        root   /usr/share/nginx/html;
+        try_files $uri /index.html;
+    }
+
+    error_page   500 502 503 504  /50x.html;
+
+    location = /50x.html {
+        root   /usr/share/nginx/html;
+    }
+}
\ No newline at end of file
diff --git a/ARCHITECT/architect-ui/package-lock.json b/ARCHITECT/architect-ui/package-lock.json
new file mode 100644
index 0000000000000000000000000000000000000000..3640cf139092f7087892439859e6b148e116e1e1
--- /dev/null
+++ b/ARCHITECT/architect-ui/package-lock.json
@@ -0,0 +1,11666 @@
+{
+  "name": "architect",
+  "version": "0.1.0",
+  "lockfileVersion": 1,
+  "requires": true,
+  "dependencies": {
+    "@babel/code-frame": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz",
+      "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==",
+      "dev": true,
+      "requires": {
+        "@babel/highlight": "7.0.0"
+      }
+    },
+    "@babel/core": {
+      "version": "7.3.3",
+      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.3.3.tgz",
+      "integrity": "sha512-w445QGI2qd0E0GlSnq6huRZWPMmQGCp5gd5ZWS4hagn0EiwzxD5QMFkpchyusAyVC1n27OKXzQ0/88aVU9n4xQ==",
+      "dev": true,
+      "requires": {
+        "@babel/code-frame": "7.0.0",
+        "@babel/generator": "7.3.3",
+        "@babel/helpers": "7.3.1",
+        "@babel/parser": "7.3.3",
+        "@babel/template": "7.2.2",
+        "@babel/traverse": "7.2.3",
+        "@babel/types": "7.3.3",
+        "convert-source-map": "1.6.0",
+        "debug": "4.1.1",
+        "json5": "2.1.0",
+        "lodash": "4.17.11",
+        "resolve": "1.10.0",
+        "semver": "5.6.0",
+        "source-map": "0.5.7"
+      }
+    },
+    "@babel/generator": {
+      "version": "7.3.3",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.3.3.tgz",
+      "integrity": "sha512-aEADYwRRZjJyMnKN7llGIlircxTCofm3dtV5pmY6ob18MSIuipHpA2yZWkPlycwu5HJcx/pADS3zssd8eY7/6A==",
+      "dev": true,
+      "requires": {
+        "@babel/types": "7.3.3",
+        "jsesc": "2.5.2",
+        "lodash": "4.17.11",
+        "source-map": "0.5.7",
+        "trim-right": "1.0.1"
+      }
+    },
+    "@babel/helper-annotate-as-pure": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz",
+      "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==",
+      "dev": true,
+      "requires": {
+        "@babel/types": "7.3.3"
+      }
+    },
+    "@babel/helper-builder-binary-assignment-operator-visitor": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz",
+      "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-explode-assignable-expression": "7.1.0",
+        "@babel/types": "7.3.3"
+      }
+    },
+    "@babel/helper-call-delegate": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.1.0.tgz",
+      "integrity": "sha512-YEtYZrw3GUK6emQHKthltKNZwszBcHK58Ygcis+gVUrF4/FmTVr5CCqQNSfmvg2y+YDEANyYoaLz/SHsnusCwQ==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-hoist-variables": "7.0.0",
+        "@babel/traverse": "7.2.3",
+        "@babel/types": "7.3.3"
+      }
+    },
+    "@babel/helper-create-class-features-plugin": {
+      "version": "7.3.2",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.3.2.tgz",
+      "integrity": "sha512-tdW8+V8ceh2US4GsYdNVNoohq5uVwOf9k6krjwW4E1lINcHgttnWcNqgdoessn12dAy8QkbezlbQh2nXISNY+A==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-function-name": "7.1.0",
+        "@babel/helper-member-expression-to-functions": "7.0.0",
+        "@babel/helper-optimise-call-expression": "7.0.0",
+        "@babel/helper-plugin-utils": "7.0.0",
+        "@babel/helper-replace-supers": "7.2.3"
+      }
+    },
+    "@babel/helper-define-map": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz",
+      "integrity": "sha512-yPPcW8dc3gZLN+U1mhYV91QU3n5uTbx7DUdf8NnPbjS0RMwBuHi9Xt2MUgppmNz7CJxTBWsGczTiEp1CSOTPRg==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-function-name": "7.1.0",
+        "@babel/types": "7.3.3",
+        "lodash": "4.17.11"
+      }
+    },
+    "@babel/helper-explode-assignable-expression": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz",
+      "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==",
+      "dev": true,
+      "requires": {
+        "@babel/traverse": "7.2.3",
+        "@babel/types": "7.3.3"
+      }
+    },
+    "@babel/helper-function-name": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz",
+      "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-get-function-arity": "7.0.0",
+        "@babel/template": "7.2.2",
+        "@babel/types": "7.3.3"
+      }
+    },
+    "@babel/helper-get-function-arity": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz",
+      "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==",
+      "dev": true,
+      "requires": {
+        "@babel/types": "7.3.3"
+      }
+    },
+    "@babel/helper-hoist-variables": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0.tgz",
+      "integrity": "sha512-Ggv5sldXUeSKsuzLkddtyhyHe2YantsxWKNi7A+7LeD12ExRDWTRk29JCXpaHPAbMaIPZSil7n+lq78WY2VY7w==",
+      "dev": true,
+      "requires": {
+        "@babel/types": "7.3.3"
+      }
+    },
+    "@babel/helper-member-expression-to-functions": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz",
+      "integrity": "sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==",
+      "dev": true,
+      "requires": {
+        "@babel/types": "7.3.3"
+      }
+    },
+    "@babel/helper-module-imports": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz",
+      "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==",
+      "dev": true,
+      "requires": {
+        "@babel/types": "7.3.3"
+      }
+    },
+    "@babel/helper-module-transforms": {
+      "version": "7.2.2",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.2.2.tgz",
+      "integrity": "sha512-YRD7I6Wsv+IHuTPkAmAS4HhY0dkPobgLftHp0cRGZSdrRvmZY8rFvae/GVu3bD00qscuvK3WPHB3YdNpBXUqrA==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-module-imports": "7.0.0",
+        "@babel/helper-simple-access": "7.1.0",
+        "@babel/helper-split-export-declaration": "7.0.0",
+        "@babel/template": "7.2.2",
+        "@babel/types": "7.3.3",
+        "lodash": "4.17.11"
+      }
+    },
+    "@babel/helper-optimise-call-expression": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz",
+      "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==",
+      "dev": true,
+      "requires": {
+        "@babel/types": "7.3.3"
+      }
+    },
+    "@babel/helper-plugin-utils": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz",
+      "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==",
+      "dev": true
+    },
+    "@babel/helper-regex": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.0.0.tgz",
+      "integrity": "sha512-TR0/N0NDCcUIUEbqV6dCO+LptmmSQFQ7q70lfcEB4URsjD0E1HzicrwUH+ap6BAQ2jhCX9Q4UqZy4wilujWlkg==",
+      "dev": true,
+      "requires": {
+        "lodash": "4.17.11"
+      }
+    },
+    "@babel/helper-remap-async-to-generator": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz",
+      "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-annotate-as-pure": "7.0.0",
+        "@babel/helper-wrap-function": "7.2.0",
+        "@babel/template": "7.2.2",
+        "@babel/traverse": "7.2.3",
+        "@babel/types": "7.3.3"
+      }
+    },
+    "@babel/helper-replace-supers": {
+      "version": "7.2.3",
+      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.2.3.tgz",
+      "integrity": "sha512-GyieIznGUfPXPWu0yLS6U55Mz67AZD9cUk0BfirOWlPrXlBcan9Gz+vHGz+cPfuoweZSnPzPIm67VtQM0OWZbA==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-member-expression-to-functions": "7.0.0",
+        "@babel/helper-optimise-call-expression": "7.0.0",
+        "@babel/traverse": "7.2.3",
+        "@babel/types": "7.3.3"
+      }
+    },
+    "@babel/helper-simple-access": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz",
+      "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==",
+      "dev": true,
+      "requires": {
+        "@babel/template": "7.2.2",
+        "@babel/types": "7.3.3"
+      }
+    },
+    "@babel/helper-split-export-declaration": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz",
+      "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==",
+      "dev": true,
+      "requires": {
+        "@babel/types": "7.3.3"
+      }
+    },
+    "@babel/helper-wrap-function": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz",
+      "integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-function-name": "7.1.0",
+        "@babel/template": "7.2.2",
+        "@babel/traverse": "7.2.3",
+        "@babel/types": "7.3.3"
+      }
+    },
+    "@babel/helpers": {
+      "version": "7.3.1",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.3.1.tgz",
+      "integrity": "sha512-Q82R3jKsVpUV99mgX50gOPCWwco9Ec5Iln/8Vyu4osNIOQgSrd9RFrQeUvmvddFNoLwMyOUWU+5ckioEKpDoGA==",
+      "dev": true,
+      "requires": {
+        "@babel/template": "7.2.2",
+        "@babel/traverse": "7.2.3",
+        "@babel/types": "7.3.3"
+      }
+    },
+    "@babel/highlight": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz",
+      "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==",
+      "dev": true,
+      "requires": {
+        "chalk": "2.4.2",
+        "esutils": "2.0.2",
+        "js-tokens": "4.0.0"
+      }
+    },
+    "@babel/parser": {
+      "version": "7.3.3",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.3.3.tgz",
+      "integrity": "sha512-xsH1CJoln2r74hR+y7cg2B5JCPaTh+Hd+EbBRk9nWGSNspuo6krjhX0Om6RnRQuIvFq8wVXCLKH3kwKDYhanSg==",
+      "dev": true
+    },
+    "@babel/plugin-proposal-async-generator-functions": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz",
+      "integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "7.0.0",
+        "@babel/helper-remap-async-to-generator": "7.1.0",
+        "@babel/plugin-syntax-async-generators": "7.2.0"
+      }
+    },
+    "@babel/plugin-proposal-class-properties": {
+      "version": "7.3.3",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.3.3.tgz",
+      "integrity": "sha512-XO9eeU1/UwGPM8L+TjnQCykuVcXqaO5J1bkRPIygqZ/A2L1xVMJ9aZXrY31c0U4H2/LHKL4lbFQLsxktSrc/Ng==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-create-class-features-plugin": "7.3.2",
+        "@babel/helper-plugin-utils": "7.0.0"
+      }
+    },
+    "@babel/plugin-proposal-decorators": {
+      "version": "7.3.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.3.0.tgz",
+      "integrity": "sha512-3W/oCUmsO43FmZIqermmq6TKaRSYhmh/vybPfVFwQWdSb8xwki38uAIvknCRzuyHRuYfCYmJzL9or1v0AffPjg==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-create-class-features-plugin": "7.3.2",
+        "@babel/helper-plugin-utils": "7.0.0",
+        "@babel/plugin-syntax-decorators": "7.2.0"
+      }
+    },
+    "@babel/plugin-proposal-json-strings": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz",
+      "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "7.0.0",
+        "@babel/plugin-syntax-json-strings": "7.2.0"
+      }
+    },
+    "@babel/plugin-proposal-object-rest-spread": {
+      "version": "7.3.2",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.3.2.tgz",
+      "integrity": "sha512-DjeMS+J2+lpANkYLLO+m6GjoTMygYglKmRe6cDTbFv3L9i6mmiE8fe6B8MtCSLZpVXscD5kn7s6SgtHrDoBWoA==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "7.0.0",
+        "@babel/plugin-syntax-object-rest-spread": "7.2.0"
+      }
+    },
+    "@babel/plugin-proposal-optional-catch-binding": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz",
+      "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "7.0.0",
+        "@babel/plugin-syntax-optional-catch-binding": "7.2.0"
+      }
+    },
+    "@babel/plugin-proposal-unicode-property-regex": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.2.0.tgz",
+      "integrity": "sha512-LvRVYb7kikuOtIoUeWTkOxQEV1kYvL5B6U3iWEGCzPNRus1MzJweFqORTj+0jkxozkTSYNJozPOddxmqdqsRpw==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "7.0.0",
+        "@babel/helper-regex": "7.0.0",
+        "regexpu-core": "4.4.0"
+      }
+    },
+    "@babel/plugin-syntax-async-generators": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz",
+      "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "7.0.0"
+      }
+    },
+    "@babel/plugin-syntax-decorators": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.2.0.tgz",
+      "integrity": "sha512-38QdqVoXdHUQfTpZo3rQwqQdWtCn5tMv4uV6r2RMfTqNBuv4ZBhz79SfaQWKTVmxHjeFv/DnXVC/+agHCklYWA==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "7.0.0"
+      }
+    },
+    "@babel/plugin-syntax-dynamic-import": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz",
+      "integrity": "sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "7.0.0"
+      }
+    },
+    "@babel/plugin-syntax-json-strings": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz",
+      "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "7.0.0"
+      }
+    },
+    "@babel/plugin-syntax-jsx": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz",
+      "integrity": "sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "7.0.0"
+      }
+    },
+    "@babel/plugin-syntax-object-rest-spread": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz",
+      "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "7.0.0"
+      }
+    },
+    "@babel/plugin-syntax-optional-catch-binding": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz",
+      "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "7.0.0"
+      }
+    },
+    "@babel/plugin-transform-arrow-functions": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz",
+      "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "7.0.0"
+      }
+    },
+    "@babel/plugin-transform-async-to-generator": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.2.0.tgz",
+      "integrity": "sha512-CEHzg4g5UraReozI9D4fblBYABs7IM6UerAVG7EJVrTLC5keh00aEuLUT+O40+mJCEzaXkYfTCUKIyeDfMOFFQ==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-module-imports": "7.0.0",
+        "@babel/helper-plugin-utils": "7.0.0",
+        "@babel/helper-remap-async-to-generator": "7.1.0"
+      }
+    },
+    "@babel/plugin-transform-block-scoped-functions": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz",
+      "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "7.0.0"
+      }
+    },
+    "@babel/plugin-transform-block-scoping": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.2.0.tgz",
+      "integrity": "sha512-vDTgf19ZEV6mx35yiPJe4fS02mPQUUcBNwWQSZFXSzTSbsJFQvHt7DqyS3LK8oOWALFOsJ+8bbqBgkirZteD5Q==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "7.0.0",
+        "lodash": "4.17.11"
+      }
+    },
+    "@babel/plugin-transform-classes": {
+      "version": "7.3.3",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.3.3.tgz",
+      "integrity": "sha512-n0CLbsg7KOXsMF4tSTLCApNMoXk0wOPb0DYfsOO1e7SfIb9gOyfbpKI2MZ+AXfqvlfzq2qsflJ1nEns48Caf2w==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-annotate-as-pure": "7.0.0",
+        "@babel/helper-define-map": "7.1.0",
+        "@babel/helper-function-name": "7.1.0",
+        "@babel/helper-optimise-call-expression": "7.0.0",
+        "@babel/helper-plugin-utils": "7.0.0",
+        "@babel/helper-replace-supers": "7.2.3",
+        "@babel/helper-split-export-declaration": "7.0.0",
+        "globals": "11.11.0"
+      }
+    },
+    "@babel/plugin-transform-computed-properties": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz",
+      "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "7.0.0"
+      }
+    },
+    "@babel/plugin-transform-destructuring": {
+      "version": "7.3.2",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.3.2.tgz",
+      "integrity": "sha512-Lrj/u53Ufqxl/sGxyjsJ2XNtNuEjDyjpqdhMNh5aZ+XFOdThL46KBj27Uem4ggoezSYBxKWAil6Hu8HtwqesYw==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "7.0.0"
+      }
+    },
+    "@babel/plugin-transform-dotall-regex": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.2.0.tgz",
+      "integrity": "sha512-sKxnyHfizweTgKZf7XsXu/CNupKhzijptfTM+bozonIuyVrLWVUvYjE2bhuSBML8VQeMxq4Mm63Q9qvcvUcciQ==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "7.0.0",
+        "@babel/helper-regex": "7.0.0",
+        "regexpu-core": "4.4.0"
+      }
+    },
+    "@babel/plugin-transform-duplicate-keys": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz",
+      "integrity": "sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "7.0.0"
+      }
+    },
+    "@babel/plugin-transform-exponentiation-operator": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz",
+      "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-builder-binary-assignment-operator-visitor": "7.1.0",
+        "@babel/helper-plugin-utils": "7.0.0"
+      }
+    },
+    "@babel/plugin-transform-for-of": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.2.0.tgz",
+      "integrity": "sha512-Kz7Mt0SsV2tQk6jG5bBv5phVbkd0gd27SgYD4hH1aLMJRchM0dzHaXvrWhVZ+WxAlDoAKZ7Uy3jVTW2mKXQ1WQ==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "7.0.0"
+      }
+    },
+    "@babel/plugin-transform-function-name": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.2.0.tgz",
+      "integrity": "sha512-kWgksow9lHdvBC2Z4mxTsvc7YdY7w/V6B2vy9cTIPtLEE9NhwoWivaxdNM/S37elu5bqlLP/qOY906LukO9lkQ==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-function-name": "7.1.0",
+        "@babel/helper-plugin-utils": "7.0.0"
+      }
+    },
+    "@babel/plugin-transform-literals": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz",
+      "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "7.0.0"
+      }
+    },
+    "@babel/plugin-transform-modules-amd": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz",
+      "integrity": "sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-module-transforms": "7.2.2",
+        "@babel/helper-plugin-utils": "7.0.0"
+      }
+    },
+    "@babel/plugin-transform-modules-commonjs": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.2.0.tgz",
+      "integrity": "sha512-V6y0uaUQrQPXUrmj+hgnks8va2L0zcZymeU7TtWEgdRLNkceafKXEduv7QzgQAE4lT+suwooG9dC7LFhdRAbVQ==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-module-transforms": "7.2.2",
+        "@babel/helper-plugin-utils": "7.0.0",
+        "@babel/helper-simple-access": "7.1.0"
+      }
+    },
+    "@babel/plugin-transform-modules-systemjs": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.2.0.tgz",
+      "integrity": "sha512-aYJwpAhoK9a+1+O625WIjvMY11wkB/ok0WClVwmeo3mCjcNRjt+/8gHWrB5i+00mUju0gWsBkQnPpdvQ7PImmQ==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-hoist-variables": "7.0.0",
+        "@babel/helper-plugin-utils": "7.0.0"
+      }
+    },
+    "@babel/plugin-transform-modules-umd": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz",
+      "integrity": "sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-module-transforms": "7.2.2",
+        "@babel/helper-plugin-utils": "7.0.0"
+      }
+    },
+    "@babel/plugin-transform-named-capturing-groups-regex": {
+      "version": "7.3.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.3.0.tgz",
+      "integrity": "sha512-NxIoNVhk9ZxS+9lSoAQ/LM0V2UEvARLttEHUrRDGKFaAxOYQcrkN/nLRE+BbbicCAvZPl7wMP0X60HsHE5DtQw==",
+      "dev": true,
+      "requires": {
+        "regexp-tree": "0.1.5"
+      }
+    },
+    "@babel/plugin-transform-new-target": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0.tgz",
+      "integrity": "sha512-yin069FYjah+LbqfGeTfzIBODex/e++Yfa0rH0fpfam9uTbuEeEOx5GLGr210ggOV77mVRNoeqSYqeuaqSzVSw==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "7.0.0"
+      }
+    },
+    "@babel/plugin-transform-object-super": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz",
+      "integrity": "sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "7.0.0",
+        "@babel/helper-replace-supers": "7.2.3"
+      }
+    },
+    "@babel/plugin-transform-parameters": {
+      "version": "7.3.3",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.3.3.tgz",
+      "integrity": "sha512-IrIP25VvXWu/VlBWTpsjGptpomtIkYrN/3aDp4UKm7xK6UxZY88kcJ1UwETbzHAlwN21MnNfwlar0u8y3KpiXw==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-call-delegate": "7.1.0",
+        "@babel/helper-get-function-arity": "7.0.0",
+        "@babel/helper-plugin-utils": "7.0.0"
+      }
+    },
+    "@babel/plugin-transform-regenerator": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0.tgz",
+      "integrity": "sha512-sj2qzsEx8KDVv1QuJc/dEfilkg3RRPvPYx/VnKLtItVQRWt1Wqf5eVCOLZm29CiGFfYYsA3VPjfizTCV0S0Dlw==",
+      "dev": true,
+      "requires": {
+        "regenerator-transform": "0.13.4"
+      }
+    },
+    "@babel/plugin-transform-runtime": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.2.0.tgz",
+      "integrity": "sha512-jIgkljDdq4RYDnJyQsiWbdvGeei/0MOTtSHKO/rfbd/mXBxNpdlulMx49L0HQ4pug1fXannxoqCI+fYSle9eSw==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-module-imports": "7.0.0",
+        "@babel/helper-plugin-utils": "7.0.0",
+        "resolve": "1.10.0",
+        "semver": "5.6.0"
+      }
+    },
+    "@babel/plugin-transform-shorthand-properties": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz",
+      "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "7.0.0"
+      }
+    },
+    "@babel/plugin-transform-spread": {
+      "version": "7.2.2",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz",
+      "integrity": "sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "7.0.0"
+      }
+    },
+    "@babel/plugin-transform-sticky-regex": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz",
+      "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "7.0.0",
+        "@babel/helper-regex": "7.0.0"
+      }
+    },
+    "@babel/plugin-transform-template-literals": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.2.0.tgz",
+      "integrity": "sha512-FkPix00J9A/XWXv4VoKJBMeSkyY9x/TqIh76wzcdfl57RJJcf8CehQ08uwfhCDNtRQYtHQKBTwKZDEyjE13Lwg==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-annotate-as-pure": "7.0.0",
+        "@babel/helper-plugin-utils": "7.0.0"
+      }
+    },
+    "@babel/plugin-transform-typeof-symbol": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz",
+      "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "7.0.0"
+      }
+    },
+    "@babel/plugin-transform-unicode-regex": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.2.0.tgz",
+      "integrity": "sha512-m48Y0lMhrbXEJnVUaYly29jRXbQ3ksxPrS1Tg8t+MHqzXhtBYAvI51euOBaoAlZLPHsieY9XPVMf80a5x0cPcA==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "7.0.0",
+        "@babel/helper-regex": "7.0.0",
+        "regexpu-core": "4.4.0"
+      }
+    },
+    "@babel/polyfill": {
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.4.4.tgz",
+      "integrity": "sha512-WlthFLfhQQhh+A2Gn5NSFl0Huxz36x86Jn+E9OW7ibK8edKPq+KLy4apM1yDpQ8kJOVi1OVjpP4vSDLdrI04dg==",
+      "requires": {
+        "core-js": "2.6.5",
+        "regenerator-runtime": "0.13.2"
+      },
+      "dependencies": {
+        "regenerator-runtime": {
+          "version": "0.13.2",
+          "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz",
+          "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA=="
+        }
+      }
+    },
+    "@babel/preset-env": {
+      "version": "7.3.1",
+      "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.3.1.tgz",
+      "integrity": "sha512-FHKrD6Dxf30e8xgHQO0zJZpUPfVZg+Xwgz5/RdSWCbza9QLNk4Qbp40ctRoqDxml3O8RMzB1DU55SXeDG6PqHQ==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-module-imports": "7.0.0",
+        "@babel/helper-plugin-utils": "7.0.0",
+        "@babel/plugin-proposal-async-generator-functions": "7.2.0",
+        "@babel/plugin-proposal-json-strings": "7.2.0",
+        "@babel/plugin-proposal-object-rest-spread": "7.3.2",
+        "@babel/plugin-proposal-optional-catch-binding": "7.2.0",
+        "@babel/plugin-proposal-unicode-property-regex": "7.2.0",
+        "@babel/plugin-syntax-async-generators": "7.2.0",
+        "@babel/plugin-syntax-json-strings": "7.2.0",
+        "@babel/plugin-syntax-object-rest-spread": "7.2.0",
+        "@babel/plugin-syntax-optional-catch-binding": "7.2.0",
+        "@babel/plugin-transform-arrow-functions": "7.2.0",
+        "@babel/plugin-transform-async-to-generator": "7.2.0",
+        "@babel/plugin-transform-block-scoped-functions": "7.2.0",
+        "@babel/plugin-transform-block-scoping": "7.2.0",
+        "@babel/plugin-transform-classes": "7.3.3",
+        "@babel/plugin-transform-computed-properties": "7.2.0",
+        "@babel/plugin-transform-destructuring": "7.3.2",
+        "@babel/plugin-transform-dotall-regex": "7.2.0",
+        "@babel/plugin-transform-duplicate-keys": "7.2.0",
+        "@babel/plugin-transform-exponentiation-operator": "7.2.0",
+        "@babel/plugin-transform-for-of": "7.2.0",
+        "@babel/plugin-transform-function-name": "7.2.0",
+        "@babel/plugin-transform-literals": "7.2.0",
+        "@babel/plugin-transform-modules-amd": "7.2.0",
+        "@babel/plugin-transform-modules-commonjs": "7.2.0",
+        "@babel/plugin-transform-modules-systemjs": "7.2.0",
+        "@babel/plugin-transform-modules-umd": "7.2.0",
+        "@babel/plugin-transform-named-capturing-groups-regex": "7.3.0",
+        "@babel/plugin-transform-new-target": "7.0.0",
+        "@babel/plugin-transform-object-super": "7.2.0",
+        "@babel/plugin-transform-parameters": "7.3.3",
+        "@babel/plugin-transform-regenerator": "7.0.0",
+        "@babel/plugin-transform-shorthand-properties": "7.2.0",
+        "@babel/plugin-transform-spread": "7.2.2",
+        "@babel/plugin-transform-sticky-regex": "7.2.0",
+        "@babel/plugin-transform-template-literals": "7.2.0",
+        "@babel/plugin-transform-typeof-symbol": "7.2.0",
+        "@babel/plugin-transform-unicode-regex": "7.2.0",
+        "browserslist": "4.4.1",
+        "invariant": "2.2.4",
+        "js-levenshtein": "1.1.6",
+        "semver": "5.6.0"
+      }
+    },
+    "@babel/runtime": {
+      "version": "7.3.1",
+      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.3.1.tgz",
+      "integrity": "sha512-7jGW8ppV0ant637pIqAcFfQDDH1orEPGJb8aXfUozuCU3QqX7rX4DA8iwrbPrR1hcH0FTTHz47yQnk+bl5xHQA==",
+      "dev": true,
+      "requires": {
+        "regenerator-runtime": "0.12.1"
+      }
+    },
+    "@babel/runtime-corejs2": {
+      "version": "7.3.1",
+      "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.3.1.tgz",
+      "integrity": "sha512-YpO13776h3e6Wy8dl2J8T9Qwlvopr+b4trCEhHE+yek6yIqV8sx6g3KozdHMbXeBpjosbPi+Ii5Z7X9oXFHUKA==",
+      "dev": true,
+      "requires": {
+        "core-js": "2.6.5",
+        "regenerator-runtime": "0.12.1"
+      }
+    },
+    "@babel/template": {
+      "version": "7.2.2",
+      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz",
+      "integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==",
+      "dev": true,
+      "requires": {
+        "@babel/code-frame": "7.0.0",
+        "@babel/parser": "7.3.3",
+        "@babel/types": "7.3.3"
+      }
+    },
+    "@babel/traverse": {
+      "version": "7.2.3",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.2.3.tgz",
+      "integrity": "sha512-Z31oUD/fJvEWVR0lNZtfgvVt512ForCTNKYcJBGbPb1QZfve4WGH8Wsy7+Mev33/45fhP/hwQtvgusNdcCMgSw==",
+      "dev": true,
+      "requires": {
+        "@babel/code-frame": "7.0.0",
+        "@babel/generator": "7.3.3",
+        "@babel/helper-function-name": "7.1.0",
+        "@babel/helper-split-export-declaration": "7.0.0",
+        "@babel/parser": "7.3.3",
+        "@babel/types": "7.3.3",
+        "debug": "4.1.1",
+        "globals": "11.11.0",
+        "lodash": "4.17.11"
+      }
+    },
+    "@babel/types": {
+      "version": "7.3.3",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.3.3.tgz",
+      "integrity": "sha512-2tACZ80Wg09UnPg5uGAOUvvInaqLk3l/IAhQzlxLQOIXacr6bMsra5SH6AWw/hIDRCSbCdHP2KzSOD+cT7TzMQ==",
+      "dev": true,
+      "requires": {
+        "esutils": "2.0.2",
+        "lodash": "4.17.11",
+        "to-fast-properties": "2.0.0"
+      }
+    },
+    "@intervolga/optimize-cssnano-plugin": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/@intervolga/optimize-cssnano-plugin/-/optimize-cssnano-plugin-1.0.6.tgz",
+      "integrity": "sha512-zN69TnSr0viRSU6cEDIcuPcP67QcpQ6uHACg58FiN9PDrU6SLyGW3MR4tiISbYxy1kDWAVPwD+XwQTWE5cigAA==",
+      "dev": true,
+      "requires": {
+        "cssnano": "4.1.10",
+        "cssnano-preset-default": "4.0.7",
+        "postcss": "7.0.14"
+      }
+    },
+    "@mrmlnc/readdir-enhanced": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
+      "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
+      "dev": true,
+      "requires": {
+        "call-me-maybe": "1.0.1",
+        "glob-to-regexp": "0.3.0"
+      }
+    },
+    "@nodelib/fs.stat": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz",
+      "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==",
+      "dev": true
+    },
+    "@soda/friendly-errors-webpack-plugin": {
+      "version": "1.7.1",
+      "resolved": "https://registry.npmjs.org/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.1.tgz",
+      "integrity": "sha512-cWKrGaFX+rfbMrAxVv56DzhPNqOJPZuNIS2HGMELtgGzb+vsMzyig9mml5gZ/hr2BGtSLV+dP2LUEuAL8aG2mQ==",
+      "dev": true,
+      "requires": {
+        "chalk": "1.1.3",
+        "error-stack-parser": "2.0.2",
+        "string-width": "2.1.1"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+          "dev": true
+        },
+        "ansi-styles": {
+          "version": "2.2.1",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+          "dev": true
+        },
+        "chalk": {
+          "version": "1.1.3",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "2.2.1",
+            "escape-string-regexp": "1.0.5",
+            "has-ansi": "2.0.0",
+            "strip-ansi": "3.0.1",
+            "supports-color": "2.0.0"
+          }
+        },
+        "strip-ansi": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "2.1.1"
+          }
+        },
+        "supports-color": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+          "dev": true
+        }
+      }
+    },
+    "@types/q": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.1.tgz",
+      "integrity": "sha512-eqz8c/0kwNi/OEHQfvIuJVLTst3in0e7uTKeuY+WL/zfKn0xVujOTp42bS/vUUokhK5P2BppLd9JXMOMHcgbjA==",
+      "dev": true
+    },
+    "@vue/babel-helper-vue-jsx-merge-props": {
+      "version": "1.0.0-beta.2",
+      "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.0.0-beta.2.tgz",
+      "integrity": "sha512-Yj92Q1GcGjjctecBfnBmVqKSlMdyZaVq10hlZB4HSd1DJgu4cWgpEImJSzcJRUCZmas6UigwE7f4IjJuQs+JvQ==",
+      "dev": true
+    },
+    "@vue/babel-plugin-transform-vue-jsx": {
+      "version": "1.0.0-beta.2",
+      "resolved": "https://registry.npmjs.org/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.0.0-beta.2.tgz",
+      "integrity": "sha512-fvAymRZAPHitomRE+jIipWRj0STXNSMqeOSdOFu9Ffjqg9WGOxSdCjORxexManfZ2y5QDv7gzI1xfgprsK3nlw==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-module-imports": "7.0.0",
+        "@babel/plugin-syntax-jsx": "7.2.0",
+        "@vue/babel-helper-vue-jsx-merge-props": "1.0.0-beta.2",
+        "html-tags": "2.0.0",
+        "lodash.kebabcase": "4.1.1",
+        "svg-tags": "1.0.0"
+      }
+    },
+    "@vue/babel-preset-app": {
+      "version": "3.4.1",
+      "resolved": "https://registry.npmjs.org/@vue/babel-preset-app/-/babel-preset-app-3.4.1.tgz",
+      "integrity": "sha512-io04dFwNgAtjT/5c9l69rDjH0HYOamlgafDRaRz69NEvo59dkOELYlB6G1so7S7Nj25El+0iZTTJ9zPN0qLgeA==",
+      "dev": true,
+      "requires": {
+        "@babel/plugin-proposal-class-properties": "7.3.3",
+        "@babel/plugin-proposal-decorators": "7.3.0",
+        "@babel/plugin-syntax-dynamic-import": "7.2.0",
+        "@babel/plugin-syntax-jsx": "7.2.0",
+        "@babel/plugin-transform-runtime": "7.2.0",
+        "@babel/preset-env": "7.3.1",
+        "@babel/runtime": "7.3.1",
+        "@babel/runtime-corejs2": "7.3.1",
+        "@vue/babel-preset-jsx": "1.0.0-beta.2",
+        "babel-plugin-dynamic-import-node": "2.2.0",
+        "core-js": "2.6.5"
+      }
+    },
+    "@vue/babel-preset-jsx": {
+      "version": "1.0.0-beta.2",
+      "resolved": "https://registry.npmjs.org/@vue/babel-preset-jsx/-/babel-preset-jsx-1.0.0-beta.2.tgz",
+      "integrity": "sha512-nZoAKBR/h6iPMQ66ieQcIdlpPBmqhtUUcgjBS541jIVxSog1rwzrc00jlsuecLonzUMWPU0PabyitsG74vhN1w==",
+      "dev": true,
+      "requires": {
+        "@vue/babel-helper-vue-jsx-merge-props": "1.0.0-beta.2",
+        "@vue/babel-plugin-transform-vue-jsx": "1.0.0-beta.2",
+        "@vue/babel-sugar-functional-vue": "1.0.0-beta.2",
+        "@vue/babel-sugar-inject-h": "1.0.0-beta.2",
+        "@vue/babel-sugar-v-model": "1.0.0-beta.2",
+        "@vue/babel-sugar-v-on": "1.0.0-beta.2"
+      }
+    },
+    "@vue/babel-sugar-functional-vue": {
+      "version": "1.0.0-beta.2",
+      "resolved": "https://registry.npmjs.org/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.0.0-beta.2.tgz",
+      "integrity": "sha512-5qvi4hmExgjtrESDk0vflL69dIxkDAukJcYH9o4663E8Nh12Jpbmr+Ja8WmgkAPtTVhk90UVcVUFCCZLHBmhkQ==",
+      "dev": true,
+      "requires": {
+        "@babel/plugin-syntax-jsx": "7.2.0"
+      }
+    },
+    "@vue/babel-sugar-inject-h": {
+      "version": "1.0.0-beta.2",
+      "resolved": "https://registry.npmjs.org/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.0.0-beta.2.tgz",
+      "integrity": "sha512-qGXZ6yE+1trk82xCVJ9j3shsgI+R2ePj3+o8b2Ee7JNaRqQvMfTwpgx5BRlk4q1+CTjvYexdqBS+q4Kg7sSxcg==",
+      "dev": true,
+      "requires": {
+        "@babel/plugin-syntax-jsx": "7.2.0"
+      }
+    },
+    "@vue/babel-sugar-v-model": {
+      "version": "1.0.0-beta.2",
+      "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.0.0-beta.2.tgz",
+      "integrity": "sha512-63US3IMEtATJzzK2le/Na53Sk2bp3LHfwZ8eMFwbTaz6e2qeV9frBl3ZYaha64ghT4IDSbrDXUmm0J09EAzFfA==",
+      "dev": true,
+      "requires": {
+        "@babel/plugin-syntax-jsx": "7.2.0",
+        "@vue/babel-helper-vue-jsx-merge-props": "1.0.0-beta.2",
+        "@vue/babel-plugin-transform-vue-jsx": "1.0.0-beta.2",
+        "camelcase": "5.0.0",
+        "html-tags": "2.0.0",
+        "svg-tags": "1.0.0"
+      }
+    },
+    "@vue/babel-sugar-v-on": {
+      "version": "1.0.0-beta.2",
+      "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.0.0-beta.2.tgz",
+      "integrity": "sha512-XH/m3k11EKdMY0MrTg4+hQv8BFM8juzHT95chYkgxDmvDdVJnSCuf9+mcysEJttWD4PVuUGN7EHoIWsIhC0dRw==",
+      "dev": true,
+      "requires": {
+        "@babel/plugin-syntax-jsx": "7.2.0",
+        "@vue/babel-plugin-transform-vue-jsx": "1.0.0-beta.2",
+        "camelcase": "5.0.0"
+      }
+    },
+    "@vue/cli-overlay": {
+      "version": "3.4.1",
+      "resolved": "https://registry.npmjs.org/@vue/cli-overlay/-/cli-overlay-3.4.1.tgz",
+      "integrity": "sha512-mO0680PClML4lj6ruH+YV3BwPjxvJ4HkgsyMlmCyOZimQBxifvjK/6MX2p179M1QoJtSaz8omRJ7a6/mAP5SXg==",
+      "dev": true
+    },
+    "@vue/cli-plugin-babel": {
+      "version": "3.4.1",
+      "resolved": "https://registry.npmjs.org/@vue/cli-plugin-babel/-/cli-plugin-babel-3.4.1.tgz",
+      "integrity": "sha512-KimYe71sU7elxjUUN4U8+/mggoDSZE9ooYA0CCZdSR+Le0LDF65Kd7PdgE2MODESYCpsMccuA0peM7nVzoBU2A==",
+      "dev": true,
+      "requires": {
+        "@babel/core": "7.3.3",
+        "@vue/babel-preset-app": "3.4.1",
+        "@vue/cli-shared-utils": "3.4.1",
+        "babel-loader": "8.0.5",
+        "webpack": "4.28.4"
+      }
+    },
+    "@vue/cli-plugin-eslint": {
+      "version": "3.4.1",
+      "resolved": "https://registry.npmjs.org/@vue/cli-plugin-eslint/-/cli-plugin-eslint-3.4.1.tgz",
+      "integrity": "sha512-1Ka7PyEatxkpoHEz2u5J/4E2joaUFs0UDrvsKLVbtz05LYpv/HHwFWCmhbZPZ1GSLDeEewwQ11fBgeQZAE5TYw==",
+      "dev": true,
+      "requires": {
+        "@vue/cli-shared-utils": "3.4.1",
+        "babel-eslint": "10.0.1",
+        "eslint": "4.19.1",
+        "eslint-loader": "2.1.2",
+        "eslint-plugin-vue": "4.7.1",
+        "globby": "9.0.0",
+        "webpack": "4.28.4"
+      },
+      "dependencies": {
+        "ajv": {
+          "version": "5.5.2",
+          "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
+          "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "co": "4.6.0",
+            "fast-deep-equal": "1.1.0",
+            "fast-json-stable-stringify": "2.0.0",
+            "json-schema-traverse": "0.3.1"
+          }
+        },
+        "ansi-regex": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+          "dev": true,
+          "optional": true
+        },
+        "cross-spawn": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+          "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "lru-cache": "4.1.5",
+            "shebang-command": "1.2.0",
+            "which": "1.3.1"
+          }
+        },
+        "debug": {
+          "version": "3.2.6",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+          "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "ms": "2.1.1"
+          }
+        },
+        "eslint": {
+          "version": "4.19.1",
+          "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz",
+          "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "ajv": "5.5.2",
+            "babel-code-frame": "6.26.0",
+            "chalk": "2.4.2",
+            "concat-stream": "1.6.2",
+            "cross-spawn": "5.1.0",
+            "debug": "3.2.6",
+            "doctrine": "2.1.0",
+            "eslint-scope": "3.7.3",
+            "eslint-visitor-keys": "1.0.0",
+            "espree": "3.5.4",
+            "esquery": "1.0.1",
+            "esutils": "2.0.2",
+            "file-entry-cache": "2.0.0",
+            "functional-red-black-tree": "1.0.1",
+            "glob": "7.1.3",
+            "globals": "11.11.0",
+            "ignore": "3.3.10",
+            "imurmurhash": "0.1.4",
+            "inquirer": "3.3.0",
+            "is-resolvable": "1.1.0",
+            "js-yaml": "3.12.1",
+            "json-stable-stringify-without-jsonify": "1.0.1",
+            "levn": "0.3.0",
+            "lodash": "4.17.11",
+            "minimatch": "3.0.4",
+            "mkdirp": "0.5.1",
+            "natural-compare": "1.4.0",
+            "optionator": "0.8.2",
+            "path-is-inside": "1.0.2",
+            "pluralize": "7.0.0",
+            "progress": "2.0.3",
+            "regexpp": "1.1.0",
+            "require-uncached": "1.0.3",
+            "semver": "5.6.0",
+            "strip-ansi": "4.0.0",
+            "strip-json-comments": "2.0.1",
+            "table": "4.0.2",
+            "text-table": "0.2.0"
+          }
+        },
+        "eslint-plugin-vue": {
+          "version": "4.7.1",
+          "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-4.7.1.tgz",
+          "integrity": "sha512-esETKhVMI7Vdli70Wt4bvAwnZBJeM0pxVX9Yb0wWKxdCJc2EADalVYK/q2FzMw8oKN0wPMdqVCKS8kmR89recA==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "vue-eslint-parser": "2.0.3"
+          }
+        },
+        "eslint-scope": {
+          "version": "3.7.3",
+          "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz",
+          "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "esrecurse": "4.2.1",
+            "estraverse": "4.2.0"
+          }
+        },
+        "fast-deep-equal": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
+          "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
+          "dev": true,
+          "optional": true
+        },
+        "json-schema-traverse": {
+          "version": "0.3.1",
+          "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
+          "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
+          "dev": true,
+          "optional": true
+        },
+        "lru-cache": {
+          "version": "4.1.5",
+          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+          "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "pseudomap": "1.0.2",
+            "yallist": "2.1.2"
+          }
+        },
+        "strip-ansi": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+          "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "ansi-regex": "3.0.0"
+          }
+        },
+        "yallist": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+          "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+          "dev": true,
+          "optional": true
+        }
+      }
+    },
+    "@vue/cli-service": {
+      "version": "3.4.1",
+      "resolved": "https://registry.npmjs.org/@vue/cli-service/-/cli-service-3.4.1.tgz",
+      "integrity": "sha512-HAF2yeafVJVKiBaapvbVIK4cM+lDU4r6aJzbKLOonzQrnI45T2NLEvYC+9uW7C5LvC1d4g1XUx25Q8ixSBKegQ==",
+      "dev": true,
+      "requires": {
+        "@intervolga/optimize-cssnano-plugin": "1.0.6",
+        "@soda/friendly-errors-webpack-plugin": "1.7.1",
+        "@vue/cli-overlay": "3.4.1",
+        "@vue/cli-shared-utils": "3.4.1",
+        "@vue/component-compiler-utils": "2.6.0",
+        "@vue/preload-webpack-plugin": "1.1.0",
+        "@vue/web-component-wrapper": "1.2.0",
+        "acorn": "6.1.0",
+        "acorn-walk": "6.1.1",
+        "address": "1.0.3",
+        "autoprefixer": "9.4.8",
+        "cache-loader": "2.0.1",
+        "case-sensitive-paths-webpack-plugin": "2.2.0",
+        "chalk": "2.4.2",
+        "clipboardy": "1.2.3",
+        "cliui": "4.1.0",
+        "copy-webpack-plugin": "4.6.0",
+        "css-loader": "1.0.1",
+        "cssnano": "4.1.10",
+        "debug": "4.1.1",
+        "dotenv": "6.2.0",
+        "escape-string-regexp": "1.0.5",
+        "file-loader": "3.0.1",
+        "fs-extra": "7.0.1",
+        "globby": "9.0.0",
+        "hash-sum": "1.0.2",
+        "html-webpack-plugin": "3.2.0",
+        "launch-editor-middleware": "2.2.1",
+        "lodash.defaultsdeep": "4.6.0",
+        "lodash.mapvalues": "4.6.0",
+        "lodash.transform": "4.6.0",
+        "mini-css-extract-plugin": "0.5.0",
+        "minimist": "1.2.0",
+        "ora": "3.1.0",
+        "portfinder": "1.0.20",
+        "postcss-loader": "3.0.0",
+        "read-pkg": "4.0.1",
+        "semver": "5.6.0",
+        "slash": "2.0.0",
+        "source-map-url": "0.4.0",
+        "ssri": "6.0.1",
+        "string.prototype.padend": "3.0.0",
+        "terser-webpack-plugin": "1.2.2",
+        "thread-loader": "2.1.2",
+        "url-loader": "1.1.2",
+        "vue-loader": "15.6.4",
+        "webpack": "4.28.4",
+        "webpack-bundle-analyzer": "3.0.4",
+        "webpack-chain": "4.12.1",
+        "webpack-dev-server": "3.2.0",
+        "webpack-merge": "4.2.1",
+        "yorkie": "2.0.0"
+      },
+      "dependencies": {
+        "acorn": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.0.tgz",
+          "integrity": "sha512-MW/FjM+IvU9CgBzjO3UIPCE2pyEwUsoFl+VGdczOPEdxfGFjuKny/gN54mOuX7Qxmb9Rg9MCn2oKiSUeW+pjrw==",
+          "dev": true
+        }
+      }
+    },
+    "@vue/cli-shared-utils": {
+      "version": "3.4.1",
+      "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-3.4.1.tgz",
+      "integrity": "sha512-IbAQP1J48+q1ChjcHGnE06SdcCEeO77BERcPapjqZl3qJ6aPnq7z8VrNrZxo6oOnBJm7elGOvz4kJ6hirK9aPA==",
+      "dev": true,
+      "requires": {
+        "chalk": "2.4.2",
+        "execa": "1.0.0",
+        "joi": "14.3.1",
+        "launch-editor": "2.2.1",
+        "lru-cache": "5.1.1",
+        "node-ipc": "9.1.1",
+        "opn": "5.4.0",
+        "ora": "3.1.0",
+        "request": "2.88.0",
+        "request-promise-native": "1.0.7",
+        "semver": "5.6.0",
+        "string.prototype.padstart": "3.0.0"
+      }
+    },
+    "@vue/component-compiler-utils": {
+      "version": "2.6.0",
+      "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-2.6.0.tgz",
+      "integrity": "sha512-IHjxt7LsOFYc0DkTncB7OXJL7UzwOLPPQCfEUNyxL2qt+tF12THV+EO33O1G2Uk4feMSWua3iD39Itszx0f0bw==",
+      "dev": true,
+      "requires": {
+        "consolidate": "0.15.1",
+        "hash-sum": "1.0.2",
+        "lru-cache": "4.1.5",
+        "merge-source-map": "1.1.0",
+        "postcss": "7.0.14",
+        "postcss-selector-parser": "5.0.0",
+        "prettier": "1.16.3",
+        "source-map": "0.6.1",
+        "vue-template-es2015-compiler": "1.9.1"
+      },
+      "dependencies": {
+        "lru-cache": {
+          "version": "4.1.5",
+          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+          "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+          "dev": true,
+          "requires": {
+            "pseudomap": "1.0.2",
+            "yallist": "2.1.2"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        },
+        "yallist": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+          "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+          "dev": true
+        }
+      }
+    },
+    "@vue/preload-webpack-plugin": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.1.0.tgz",
+      "integrity": "sha512-rcn2KhSHESBFMPj5vc5X2pI9bcBNQQixvJXhD5gZ4rN2iym/uH2qfDSQfUS5+qwiz0a85TCkeUs6w6jxFDudbw==",
+      "dev": true
+    },
+    "@vue/web-component-wrapper": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/@vue/web-component-wrapper/-/web-component-wrapper-1.2.0.tgz",
+      "integrity": "sha512-Xn/+vdm9CjuC9p3Ae+lTClNutrVhsXpzxvoTXXtoys6kVRX9FkueSUAqSWAyZntmVLlR4DosBV4pH8y5Z/HbUw==",
+      "dev": true
+    },
+    "@webassemblyjs/ast": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.11.tgz",
+      "integrity": "sha512-ZEzy4vjvTzScC+SH8RBssQUawpaInUdMTYwYYLh54/s8TuT0gBLuyUnppKsVyZEi876VmmStKsUs28UxPgdvrA==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/helper-module-context": "1.7.11",
+        "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
+        "@webassemblyjs/wast-parser": "1.7.11"
+      }
+    },
+    "@webassemblyjs/floating-point-hex-parser": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.11.tgz",
+      "integrity": "sha512-zY8dSNyYcgzNRNT666/zOoAyImshm3ycKdoLsyDw/Bwo6+/uktb7p4xyApuef1dwEBo/U/SYQzbGBvV+nru2Xg==",
+      "dev": true
+    },
+    "@webassemblyjs/helper-api-error": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.11.tgz",
+      "integrity": "sha512-7r1qXLmiglC+wPNkGuXCvkmalyEstKVwcueZRP2GNC2PAvxbLYwLLPr14rcdJaE4UtHxQKfFkuDFuv91ipqvXg==",
+      "dev": true
+    },
+    "@webassemblyjs/helper-buffer": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.11.tgz",
+      "integrity": "sha512-MynuervdylPPh3ix+mKZloTcL06P8tenNH3sx6s0qE8SLR6DdwnfgA7Hc9NSYeob2jrW5Vql6GVlsQzKQCa13w==",
+      "dev": true
+    },
+    "@webassemblyjs/helper-code-frame": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.11.tgz",
+      "integrity": "sha512-T8ESC9KMXFTXA5urJcyor5cn6qWeZ4/zLPyWeEXZ03hj/x9weSokGNkVCdnhSabKGYWxElSdgJ+sFa9G/RdHNw==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/wast-printer": "1.7.11"
+      }
+    },
+    "@webassemblyjs/helper-fsm": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.11.tgz",
+      "integrity": "sha512-nsAQWNP1+8Z6tkzdYlXT0kxfa2Z1tRTARd8wYnc/e3Zv3VydVVnaeePgqUzFrpkGUyhUUxOl5ML7f1NuT+gC0A==",
+      "dev": true
+    },
+    "@webassemblyjs/helper-module-context": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.11.tgz",
+      "integrity": "sha512-JxfD5DX8Ygq4PvXDucq0M+sbUFA7BJAv/GGl9ITovqE+idGX+J3QSzJYz+LwQmL7fC3Rs+utvWoJxDb6pmC0qg==",
+      "dev": true
+    },
+    "@webassemblyjs/helper-wasm-bytecode": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.11.tgz",
+      "integrity": "sha512-cMXeVS9rhoXsI9LLL4tJxBgVD/KMOKXuFqYb5oCJ/opScWpkCMEz9EJtkonaNcnLv2R3K5jIeS4TRj/drde1JQ==",
+      "dev": true
+    },
+    "@webassemblyjs/helper-wasm-section": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.11.tgz",
+      "integrity": "sha512-8ZRY5iZbZdtNFE5UFunB8mmBEAbSI3guwbrsCl4fWdfRiAcvqQpeqd5KHhSWLL5wuxo53zcaGZDBU64qgn4I4Q==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.7.11",
+        "@webassemblyjs/helper-buffer": "1.7.11",
+        "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
+        "@webassemblyjs/wasm-gen": "1.7.11"
+      }
+    },
+    "@webassemblyjs/ieee754": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.11.tgz",
+      "integrity": "sha512-Mmqx/cS68K1tSrvRLtaV/Lp3NZWzXtOHUW2IvDvl2sihAwJh4ACE0eL6A8FvMyDG9abes3saB6dMimLOs+HMoQ==",
+      "dev": true,
+      "requires": {
+        "@xtuc/ieee754": "1.2.0"
+      }
+    },
+    "@webassemblyjs/leb128": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.11.tgz",
+      "integrity": "sha512-vuGmgZjjp3zjcerQg+JA+tGOncOnJLWVkt8Aze5eWQLwTQGNgVLcyOTqgSCxWTR4J42ijHbBxnuRaL1Rv7XMdw==",
+      "dev": true,
+      "requires": {
+        "@xtuc/long": "4.2.1"
+      }
+    },
+    "@webassemblyjs/utf8": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.11.tgz",
+      "integrity": "sha512-C6GFkc7aErQIAH+BMrIdVSmW+6HSe20wg57HEC1uqJP8E/xpMjXqQUxkQw07MhNDSDcGpxI9G5JSNOQCqJk4sA==",
+      "dev": true
+    },
+    "@webassemblyjs/wasm-edit": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.11.tgz",
+      "integrity": "sha512-FUd97guNGsCZQgeTPKdgxJhBXkUbMTY6hFPf2Y4OedXd48H97J+sOY2Ltaq6WGVpIH8o/TGOVNiVz/SbpEMJGg==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.7.11",
+        "@webassemblyjs/helper-buffer": "1.7.11",
+        "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
+        "@webassemblyjs/helper-wasm-section": "1.7.11",
+        "@webassemblyjs/wasm-gen": "1.7.11",
+        "@webassemblyjs/wasm-opt": "1.7.11",
+        "@webassemblyjs/wasm-parser": "1.7.11",
+        "@webassemblyjs/wast-printer": "1.7.11"
+      }
+    },
+    "@webassemblyjs/wasm-gen": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.11.tgz",
+      "integrity": "sha512-U/KDYp7fgAZX5KPfq4NOupK/BmhDc5Kjy2GIqstMhvvdJRcER/kUsMThpWeRP8BMn4LXaKhSTggIJPOeYHwISA==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.7.11",
+        "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
+        "@webassemblyjs/ieee754": "1.7.11",
+        "@webassemblyjs/leb128": "1.7.11",
+        "@webassemblyjs/utf8": "1.7.11"
+      }
+    },
+    "@webassemblyjs/wasm-opt": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.11.tgz",
+      "integrity": "sha512-XynkOwQyiRidh0GLua7SkeHvAPXQV/RxsUeERILmAInZegApOUAIJfRuPYe2F7RcjOC9tW3Cb9juPvAC/sCqvg==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.7.11",
+        "@webassemblyjs/helper-buffer": "1.7.11",
+        "@webassemblyjs/wasm-gen": "1.7.11",
+        "@webassemblyjs/wasm-parser": "1.7.11"
+      }
+    },
+    "@webassemblyjs/wasm-parser": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.11.tgz",
+      "integrity": "sha512-6lmXRTrrZjYD8Ng8xRyvyXQJYUQKYSXhJqXOBLw24rdiXsHAOlvw5PhesjdcaMadU/pyPQOJ5dHreMjBxwnQKg==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.7.11",
+        "@webassemblyjs/helper-api-error": "1.7.11",
+        "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
+        "@webassemblyjs/ieee754": "1.7.11",
+        "@webassemblyjs/leb128": "1.7.11",
+        "@webassemblyjs/utf8": "1.7.11"
+      }
+    },
+    "@webassemblyjs/wast-parser": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.11.tgz",
+      "integrity": "sha512-lEyVCg2np15tS+dm7+JJTNhNWq9yTZvi3qEhAIIOaofcYlUp0UR5/tVqOwa/gXYr3gjwSZqw+/lS9dscyLelbQ==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.7.11",
+        "@webassemblyjs/floating-point-hex-parser": "1.7.11",
+        "@webassemblyjs/helper-api-error": "1.7.11",
+        "@webassemblyjs/helper-code-frame": "1.7.11",
+        "@webassemblyjs/helper-fsm": "1.7.11",
+        "@xtuc/long": "4.2.1"
+      }
+    },
+    "@webassemblyjs/wast-printer": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.11.tgz",
+      "integrity": "sha512-m5vkAsuJ32QpkdkDOUPGSltrg8Cuk3KBx4YrmAGQwCZPRdUHXxG4phIOuuycLemHFr74sWL9Wthqss4fzdzSwg==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.7.11",
+        "@webassemblyjs/wast-parser": "1.7.11",
+        "@xtuc/long": "4.2.1"
+      }
+    },
+    "@xtuc/ieee754": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
+      "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
+      "dev": true
+    },
+    "@xtuc/long": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.1.tgz",
+      "integrity": "sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g==",
+      "dev": true
+    },
+    "accepts": {
+      "version": "1.3.5",
+      "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
+      "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
+      "dev": true,
+      "requires": {
+        "mime-types": "2.1.22",
+        "negotiator": "0.6.1"
+      }
+    },
+    "acorn": {
+      "version": "5.7.3",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
+      "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
+      "dev": true
+    },
+    "acorn-dynamic-import": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz",
+      "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==",
+      "dev": true,
+      "requires": {
+        "acorn": "5.7.3"
+      }
+    },
+    "acorn-jsx": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
+      "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "acorn": "3.3.0"
+      },
+      "dependencies": {
+        "acorn": {
+          "version": "3.3.0",
+          "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
+          "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
+          "dev": true,
+          "optional": true
+        }
+      }
+    },
+    "acorn-walk": {
+      "version": "6.1.1",
+      "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz",
+      "integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==",
+      "dev": true
+    },
+    "address": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/address/-/address-1.0.3.tgz",
+      "integrity": "sha512-z55ocwKBRLryBs394Sm3ushTtBeg6VAeuku7utSoSnsJKvKcnXFIyC6vh27n3rXyxSgkJBBCAvyOn7gSUcTYjg==",
+      "dev": true
+    },
+    "ajv": {
+      "version": "6.9.1",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.9.1.tgz",
+      "integrity": "sha512-XDN92U311aINL77ieWHmqCcNlwjoP5cHXDxIxbf2MaPYuCXOHS7gHH8jktxeK5omgd52XbSTX6a4Piwd1pQmzA==",
+      "dev": true,
+      "requires": {
+        "fast-deep-equal": "2.0.1",
+        "fast-json-stable-stringify": "2.0.0",
+        "json-schema-traverse": "0.4.1",
+        "uri-js": "4.2.2"
+      }
+    },
+    "ajv-errors": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
+      "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==",
+      "dev": true
+    },
+    "ajv-keywords": {
+      "version": "3.4.0",
+      "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz",
+      "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==",
+      "dev": true
+    },
+    "alphanum-sort": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz",
+      "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=",
+      "dev": true
+    },
+    "ansi-colors": {
+      "version": "3.2.3",
+      "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz",
+      "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==",
+      "dev": true
+    },
+    "ansi-escapes": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
+      "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
+      "dev": true
+    },
+    "ansi-html": {
+      "version": "0.0.7",
+      "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz",
+      "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=",
+      "dev": true
+    },
+    "ansi-regex": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz",
+      "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==",
+      "dev": true
+    },
+    "ansi-styles": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+      "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+      "dev": true,
+      "requires": {
+        "color-convert": "1.9.3"
+      }
+    },
+    "anymatch": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+      "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+      "dev": true,
+      "requires": {
+        "micromatch": "3.1.10",
+        "normalize-path": "2.1.1"
+      },
+      "dependencies": {
+        "normalize-path": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+          "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+          "dev": true,
+          "requires": {
+            "remove-trailing-separator": "1.1.0"
+          }
+        }
+      }
+    },
+    "aproba": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+      "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
+      "dev": true
+    },
+    "arch": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/arch/-/arch-2.1.1.tgz",
+      "integrity": "sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg==",
+      "dev": true
+    },
+    "argparse": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+      "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+      "dev": true,
+      "requires": {
+        "sprintf-js": "1.0.3"
+      }
+    },
+    "arr-diff": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+      "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+      "dev": true
+    },
+    "arr-flatten": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+      "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+      "dev": true
+    },
+    "arr-union": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+      "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+      "dev": true
+    },
+    "array-filter": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz",
+      "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=",
+      "dev": true
+    },
+    "array-flatten": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+      "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
+      "dev": true
+    },
+    "array-map": {
+      "version": "0.0.0",
+      "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz",
+      "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=",
+      "dev": true
+    },
+    "array-reduce": {
+      "version": "0.0.0",
+      "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz",
+      "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=",
+      "dev": true
+    },
+    "array-union": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+      "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+      "dev": true,
+      "requires": {
+        "array-uniq": "1.0.3"
+      }
+    },
+    "array-uniq": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+      "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+      "dev": true
+    },
+    "array-unique": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+      "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+      "dev": true
+    },
+    "asn1": {
+      "version": "0.2.4",
+      "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
+      "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+      "dev": true,
+      "requires": {
+        "safer-buffer": "2.1.2"
+      }
+    },
+    "asn1.js": {
+      "version": "4.10.1",
+      "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
+      "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
+      "dev": true,
+      "requires": {
+        "bn.js": "4.11.8",
+        "inherits": "2.0.3",
+        "minimalistic-assert": "1.0.1"
+      }
+    },
+    "assert": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz",
+      "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=",
+      "dev": true,
+      "requires": {
+        "util": "0.10.3"
+      },
+      "dependencies": {
+        "inherits": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+          "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
+          "dev": true
+        },
+        "util": {
+          "version": "0.10.3",
+          "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
+          "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+          "dev": true,
+          "requires": {
+            "inherits": "2.0.1"
+          }
+        }
+      }
+    },
+    "assert-plus": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+      "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+      "dev": true
+    },
+    "assign-symbols": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+      "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+      "dev": true
+    },
+    "astral-regex": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
+      "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
+      "dev": true
+    },
+    "async": {
+      "version": "1.5.2",
+      "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+      "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+      "dev": true
+    },
+    "async-each": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
+      "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=",
+      "dev": true
+    },
+    "async-limiter": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
+      "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==",
+      "dev": true
+    },
+    "asynckit": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+      "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+      "dev": true
+    },
+    "atob": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+      "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
+      "dev": true
+    },
+    "autoprefixer": {
+      "version": "9.4.8",
+      "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.4.8.tgz",
+      "integrity": "sha512-DIhd0KMi9Nql3oJkJ2HCeOVihrXFPtWXc6ckwaUNwliDOt9OGr0fk8vV8jCLWXnZc1EXvQ2uLUzGpcPxFAQHEQ==",
+      "dev": true,
+      "requires": {
+        "browserslist": "4.4.1",
+        "caniuse-lite": "1.0.30000938",
+        "normalize-range": "0.1.2",
+        "num2fraction": "1.2.2",
+        "postcss": "7.0.14",
+        "postcss-value-parser": "3.3.1"
+      }
+    },
+    "aws-sign2": {
+      "version": "0.7.0",
+      "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+      "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
+      "dev": true
+    },
+    "aws4": {
+      "version": "1.8.0",
+      "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
+      "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==",
+      "dev": true
+    },
+    "axios": {
+      "version": "0.18.0",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.0.tgz",
+      "integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=",
+      "requires": {
+        "follow-redirects": "1.7.0",
+        "is-buffer": "1.1.6"
+      }
+    },
+    "babel-code-frame": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+      "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+      "dev": true,
+      "requires": {
+        "chalk": "1.1.3",
+        "esutils": "2.0.2",
+        "js-tokens": "3.0.2"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+          "dev": true
+        },
+        "ansi-styles": {
+          "version": "2.2.1",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+          "dev": true
+        },
+        "chalk": {
+          "version": "1.1.3",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "2.2.1",
+            "escape-string-regexp": "1.0.5",
+            "has-ansi": "2.0.0",
+            "strip-ansi": "3.0.1",
+            "supports-color": "2.0.0"
+          }
+        },
+        "js-tokens": {
+          "version": "3.0.2",
+          "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+          "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+          "dev": true
+        },
+        "strip-ansi": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "2.1.1"
+          }
+        },
+        "supports-color": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+          "dev": true
+        }
+      }
+    },
+    "babel-eslint": {
+      "version": "10.0.1",
+      "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.1.tgz",
+      "integrity": "sha512-z7OT1iNV+TjOwHNLLyJk+HN+YVWX+CLE6fPD2SymJZOZQBs+QIexFjhm4keGTm8MW9xr4EC9Q0PbaLB24V5GoQ==",
+      "dev": true,
+      "requires": {
+        "@babel/code-frame": "7.0.0",
+        "@babel/parser": "7.3.3",
+        "@babel/traverse": "7.2.3",
+        "@babel/types": "7.3.3",
+        "eslint-scope": "3.7.1",
+        "eslint-visitor-keys": "1.0.0"
+      },
+      "dependencies": {
+        "eslint-scope": {
+          "version": "3.7.1",
+          "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz",
+          "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=",
+          "dev": true,
+          "requires": {
+            "esrecurse": "4.2.1",
+            "estraverse": "4.2.0"
+          }
+        }
+      }
+    },
+    "babel-loader": {
+      "version": "8.0.5",
+      "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.5.tgz",
+      "integrity": "sha512-NTnHnVRd2JnRqPC0vW+iOQWU5pchDbYXsG2E6DMXEpMfUcQKclF9gmf3G3ZMhzG7IG9ji4coL0cm+FxeWxDpnw==",
+      "dev": true,
+      "requires": {
+        "find-cache-dir": "2.0.0",
+        "loader-utils": "1.2.3",
+        "mkdirp": "0.5.1",
+        "util.promisify": "1.0.0"
+      }
+    },
+    "babel-plugin-dynamic-import-node": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.2.0.tgz",
+      "integrity": "sha512-fP899ELUnTaBcIzmrW7nniyqqdYWrWuJUyPWHxFa/c7r7hS6KC8FscNfLlBNIoPSc55kYMGEEKjPjJGCLbE1qA==",
+      "dev": true,
+      "requires": {
+        "object.assign": "4.1.0"
+      }
+    },
+    "balanced-match": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+      "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+      "dev": true
+    },
+    "base": {
+      "version": "0.11.2",
+      "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+      "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+      "dev": true,
+      "requires": {
+        "cache-base": "1.0.1",
+        "class-utils": "0.3.6",
+        "component-emitter": "1.2.1",
+        "define-property": "1.0.0",
+        "isobject": "3.0.1",
+        "mixin-deep": "1.3.1",
+        "pascalcase": "0.1.1"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "1.0.2"
+          }
+        },
+        "is-accessor-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+          "dev": true,
+          "requires": {
+            "kind-of": "6.0.2"
+          }
+        },
+        "is-data-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+          "dev": true,
+          "requires": {
+            "kind-of": "6.0.2"
+          }
+        },
+        "is-descriptor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+          "dev": true,
+          "requires": {
+            "is-accessor-descriptor": "1.0.0",
+            "is-data-descriptor": "1.0.0",
+            "kind-of": "6.0.2"
+          }
+        }
+      }
+    },
+    "base64-js": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz",
+      "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==",
+      "dev": true
+    },
+    "batch": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
+      "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=",
+      "dev": true
+    },
+    "bcrypt-pbkdf": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+      "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+      "dev": true,
+      "requires": {
+        "tweetnacl": "0.14.5"
+      }
+    },
+    "bfj": {
+      "version": "6.1.1",
+      "resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.1.tgz",
+      "integrity": "sha512-+GUNvzHR4nRyGybQc2WpNJL4MJazMuvf92ueIyA0bIkPRwhhQu3IfZQ2PSoVPpCBJfmoSdOxu5rnotfFLlvYRQ==",
+      "dev": true,
+      "requires": {
+        "bluebird": "3.5.3",
+        "check-types": "7.4.0",
+        "hoopy": "0.1.4",
+        "tryer": "1.0.1"
+      }
+    },
+    "big.js": {
+      "version": "5.2.2",
+      "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
+      "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
+      "dev": true
+    },
+    "binary-extensions": {
+      "version": "1.13.0",
+      "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.0.tgz",
+      "integrity": "sha512-EgmjVLMn22z7eGGv3kcnHwSnJXmFHjISTY9E/S5lIcTD3Oxw05QTcBLNkJFzcb3cNueUdF/IN4U+d78V0zO8Hw==",
+      "dev": true
+    },
+    "bluebird": {
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz",
+      "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==",
+      "dev": true
+    },
+    "bn.js": {
+      "version": "4.11.8",
+      "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+      "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
+      "dev": true
+    },
+    "body-parser": {
+      "version": "1.18.3",
+      "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz",
+      "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=",
+      "dev": true,
+      "requires": {
+        "bytes": "3.0.0",
+        "content-type": "1.0.4",
+        "debug": "2.6.9",
+        "depd": "1.1.2",
+        "http-errors": "1.6.3",
+        "iconv-lite": "0.4.23",
+        "on-finished": "2.3.0",
+        "qs": "6.5.2",
+        "raw-body": "2.3.3",
+        "type-is": "1.6.16"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "iconv-lite": {
+          "version": "0.4.23",
+          "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
+          "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
+          "dev": true,
+          "requires": {
+            "safer-buffer": "2.1.2"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+          "dev": true
+        }
+      }
+    },
+    "bonjour": {
+      "version": "3.5.0",
+      "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz",
+      "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=",
+      "dev": true,
+      "requires": {
+        "array-flatten": "2.1.2",
+        "deep-equal": "1.0.1",
+        "dns-equal": "1.0.0",
+        "dns-txt": "2.0.2",
+        "multicast-dns": "6.2.3",
+        "multicast-dns-service-types": "1.1.0"
+      },
+      "dependencies": {
+        "array-flatten": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz",
+          "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==",
+          "dev": true
+        }
+      }
+    },
+    "boolbase": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+      "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
+      "dev": true
+    },
+    "brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "dev": true,
+      "requires": {
+        "balanced-match": "1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "braces": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+      "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+      "dev": true,
+      "requires": {
+        "arr-flatten": "1.1.0",
+        "array-unique": "0.3.2",
+        "extend-shallow": "2.0.1",
+        "fill-range": "4.0.0",
+        "isobject": "3.0.1",
+        "repeat-element": "1.1.3",
+        "snapdragon": "0.8.2",
+        "snapdragon-node": "2.1.1",
+        "split-string": "3.1.0",
+        "to-regex": "3.0.2"
+      },
+      "dependencies": {
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "0.1.1"
+          }
+        }
+      }
+    },
+    "brorand": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+      "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
+      "dev": true
+    },
+    "browserify-aes": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
+      "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
+      "dev": true,
+      "requires": {
+        "buffer-xor": "1.0.3",
+        "cipher-base": "1.0.4",
+        "create-hash": "1.2.0",
+        "evp_bytestokey": "1.0.3",
+        "inherits": "2.0.3",
+        "safe-buffer": "5.1.2"
+      }
+    },
+    "browserify-cipher": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
+      "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
+      "dev": true,
+      "requires": {
+        "browserify-aes": "1.2.0",
+        "browserify-des": "1.0.2",
+        "evp_bytestokey": "1.0.3"
+      }
+    },
+    "browserify-des": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
+      "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
+      "dev": true,
+      "requires": {
+        "cipher-base": "1.0.4",
+        "des.js": "1.0.0",
+        "inherits": "2.0.3",
+        "safe-buffer": "5.1.2"
+      }
+    },
+    "browserify-rsa": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
+      "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
+      "dev": true,
+      "requires": {
+        "bn.js": "4.11.8",
+        "randombytes": "2.1.0"
+      }
+    },
+    "browserify-sign": {
+      "version": "4.0.4",
+      "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",
+      "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
+      "dev": true,
+      "requires": {
+        "bn.js": "4.11.8",
+        "browserify-rsa": "4.0.1",
+        "create-hash": "1.2.0",
+        "create-hmac": "1.1.7",
+        "elliptic": "6.4.1",
+        "inherits": "2.0.3",
+        "parse-asn1": "5.1.4"
+      }
+    },
+    "browserify-zlib": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
+      "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
+      "dev": true,
+      "requires": {
+        "pako": "1.0.8"
+      }
+    },
+    "browserslist": {
+      "version": "4.4.1",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.4.1.tgz",
+      "integrity": "sha512-pEBxEXg7JwaakBXjATYw/D1YZh4QUSCX/Mnd/wnqSRPPSi1U39iDhDoKGoBUcraKdxDlrYqJxSI5nNvD+dWP2A==",
+      "dev": true,
+      "requires": {
+        "caniuse-lite": "1.0.30000938",
+        "electron-to-chromium": "1.3.113",
+        "node-releases": "1.1.8"
+      }
+    },
+    "buffer": {
+      "version": "4.9.1",
+      "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
+      "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
+      "dev": true,
+      "requires": {
+        "base64-js": "1.3.0",
+        "ieee754": "1.1.12",
+        "isarray": "1.0.0"
+      }
+    },
+    "buffer-from": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+      "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
+      "dev": true
+    },
+    "buffer-indexof": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz",
+      "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==",
+      "dev": true
+    },
+    "buffer-xor": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
+      "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
+      "dev": true
+    },
+    "builtin-status-codes": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
+      "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
+      "dev": true
+    },
+    "bytes": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+      "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
+      "dev": true
+    },
+    "cacache": {
+      "version": "11.3.2",
+      "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.2.tgz",
+      "integrity": "sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==",
+      "dev": true,
+      "requires": {
+        "bluebird": "3.5.3",
+        "chownr": "1.1.1",
+        "figgy-pudding": "3.5.1",
+        "glob": "7.1.3",
+        "graceful-fs": "4.1.15",
+        "lru-cache": "5.1.1",
+        "mississippi": "3.0.0",
+        "mkdirp": "0.5.1",
+        "move-concurrently": "1.0.1",
+        "promise-inflight": "1.0.1",
+        "rimraf": "2.6.3",
+        "ssri": "6.0.1",
+        "unique-filename": "1.1.1",
+        "y18n": "4.0.0"
+      }
+    },
+    "cache-base": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+      "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+      "dev": true,
+      "requires": {
+        "collection-visit": "1.0.0",
+        "component-emitter": "1.2.1",
+        "get-value": "2.0.6",
+        "has-value": "1.0.0",
+        "isobject": "3.0.1",
+        "set-value": "2.0.0",
+        "to-object-path": "0.3.0",
+        "union-value": "1.0.0",
+        "unset-value": "1.0.0"
+      }
+    },
+    "cache-loader": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/cache-loader/-/cache-loader-2.0.1.tgz",
+      "integrity": "sha512-V99T3FOynmGx26Zom+JrVBytLBsmUCzVG2/4NnUKgvXN4bEV42R1ERl1IyiH/cvFIDA1Ytq2lPZ9tXDSahcQpQ==",
+      "dev": true,
+      "requires": {
+        "loader-utils": "1.2.3",
+        "mkdirp": "0.5.1",
+        "neo-async": "2.6.0",
+        "normalize-path": "3.0.0",
+        "schema-utils": "1.0.0"
+      },
+      "dependencies": {
+        "schema-utils": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+          "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+          "dev": true,
+          "requires": {
+            "ajv": "6.9.1",
+            "ajv-errors": "1.0.1",
+            "ajv-keywords": "3.4.0"
+          }
+        }
+      }
+    },
+    "call-me-maybe": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
+      "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=",
+      "dev": true
+    },
+    "caller-callsite": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz",
+      "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=",
+      "dev": true,
+      "requires": {
+        "callsites": "2.0.0"
+      },
+      "dependencies": {
+        "callsites": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
+          "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=",
+          "dev": true
+        }
+      }
+    },
+    "caller-path": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
+      "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "callsites": "0.2.0"
+      }
+    },
+    "callsites": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
+      "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",
+      "dev": true,
+      "optional": true
+    },
+    "camel-case": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz",
+      "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",
+      "dev": true,
+      "requires": {
+        "no-case": "2.3.2",
+        "upper-case": "1.1.3"
+      }
+    },
+    "camelcase": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz",
+      "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==",
+      "dev": true
+    },
+    "caniuse-api": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz",
+      "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==",
+      "dev": true,
+      "requires": {
+        "browserslist": "4.4.1",
+        "caniuse-lite": "1.0.30000938",
+        "lodash.memoize": "4.1.2",
+        "lodash.uniq": "4.5.0"
+      }
+    },
+    "caniuse-lite": {
+      "version": "1.0.30000938",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000938.tgz",
+      "integrity": "sha512-ekW8NQ3/FvokviDxhdKLZZAx7PptXNwxKgXtnR5y+PR3hckwuP3yJ1Ir+4/c97dsHNqtAyfKUGdw8P4EYzBNgw==",
+      "dev": true
+    },
+    "case-sensitive-paths-webpack-plugin": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.2.0.tgz",
+      "integrity": "sha512-u5ElzokS8A1pm9vM3/iDgTcI3xqHxuCao94Oz8etI3cf0Tio0p8izkDYbTIn09uP3yUUr6+veaE6IkjnTYS46g==",
+      "dev": true
+    },
+    "caseless": {
+      "version": "0.12.0",
+      "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+      "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+      "dev": true
+    },
+    "chalk": {
+      "version": "2.4.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+      "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+      "dev": true,
+      "requires": {
+        "ansi-styles": "3.2.1",
+        "escape-string-regexp": "1.0.5",
+        "supports-color": "5.5.0"
+      }
+    },
+    "chardet": {
+      "version": "0.4.2",
+      "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz",
+      "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=",
+      "dev": true,
+      "optional": true
+    },
+    "check-types": {
+      "version": "7.4.0",
+      "resolved": "https://registry.npmjs.org/check-types/-/check-types-7.4.0.tgz",
+      "integrity": "sha512-YbulWHdfP99UfZ73NcUDlNJhEIDgm9Doq9GhpyXbF+7Aegi3CVV7qqMCKTTqJxlvEvnQBp9IA+dxsGN6xK/nSg==",
+      "dev": true
+    },
+    "chokidar": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.2.tgz",
+      "integrity": "sha512-IwXUx0FXc5ibYmPC2XeEj5mpXoV66sR+t3jqu2NS2GYwCktt3KF1/Qqjws/NkegajBA4RbZ5+DDwlOiJsxDHEg==",
+      "dev": true,
+      "requires": {
+        "anymatch": "2.0.0",
+        "async-each": "1.0.1",
+        "braces": "2.3.2",
+        "fsevents": "1.2.7",
+        "glob-parent": "3.1.0",
+        "inherits": "2.0.3",
+        "is-binary-path": "1.0.1",
+        "is-glob": "4.0.0",
+        "normalize-path": "3.0.0",
+        "path-is-absolute": "1.0.1",
+        "readdirp": "2.2.1",
+        "upath": "1.1.0"
+      }
+    },
+    "chownr": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz",
+      "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==",
+      "dev": true
+    },
+    "chrome-trace-event": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz",
+      "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==",
+      "dev": true,
+      "requires": {
+        "tslib": "1.9.3"
+      }
+    },
+    "ci-info": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz",
+      "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==",
+      "dev": true
+    },
+    "cipher-base": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
+      "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
+      "dev": true,
+      "requires": {
+        "inherits": "2.0.3",
+        "safe-buffer": "5.1.2"
+      }
+    },
+    "circular-json": {
+      "version": "0.3.3",
+      "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz",
+      "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==",
+      "dev": true,
+      "optional": true
+    },
+    "class-utils": {
+      "version": "0.3.6",
+      "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+      "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+      "dev": true,
+      "requires": {
+        "arr-union": "3.1.0",
+        "define-property": "0.2.5",
+        "isobject": "3.0.1",
+        "static-extend": "0.1.2"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "0.1.6"
+          }
+        }
+      }
+    },
+    "clean-css": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz",
+      "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==",
+      "dev": true,
+      "requires": {
+        "source-map": "0.6.1"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        }
+      }
+    },
+    "cli-cursor": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+      "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+      "dev": true,
+      "requires": {
+        "restore-cursor": "2.0.0"
+      }
+    },
+    "cli-spinners": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz",
+      "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==",
+      "dev": true
+    },
+    "cli-width": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
+      "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
+      "dev": true
+    },
+    "clipboardy": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-1.2.3.tgz",
+      "integrity": "sha512-2WNImOvCRe6r63Gk9pShfkwXsVtKCroMAevIbiae021mS850UkWPbevxsBz3tnvjZIEGvlwaqCPsw+4ulzNgJA==",
+      "dev": true,
+      "requires": {
+        "arch": "2.1.1",
+        "execa": "0.8.0"
+      },
+      "dependencies": {
+        "cross-spawn": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+          "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+          "dev": true,
+          "requires": {
+            "lru-cache": "4.1.5",
+            "shebang-command": "1.2.0",
+            "which": "1.3.1"
+          }
+        },
+        "execa": {
+          "version": "0.8.0",
+          "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz",
+          "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=",
+          "dev": true,
+          "requires": {
+            "cross-spawn": "5.1.0",
+            "get-stream": "3.0.0",
+            "is-stream": "1.1.0",
+            "npm-run-path": "2.0.2",
+            "p-finally": "1.0.0",
+            "signal-exit": "3.0.2",
+            "strip-eof": "1.0.0"
+          }
+        },
+        "get-stream": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+          "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+          "dev": true
+        },
+        "lru-cache": {
+          "version": "4.1.5",
+          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+          "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+          "dev": true,
+          "requires": {
+            "pseudomap": "1.0.2",
+            "yallist": "2.1.2"
+          }
+        },
+        "yallist": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+          "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+          "dev": true
+        }
+      }
+    },
+    "cliui": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz",
+      "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
+      "dev": true,
+      "requires": {
+        "string-width": "2.1.1",
+        "strip-ansi": "4.0.0",
+        "wrap-ansi": "2.1.0"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+          "dev": true
+        },
+        "strip-ansi": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+          "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "3.0.0"
+          }
+        }
+      }
+    },
+    "clone": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
+      "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
+      "dev": true
+    },
+    "co": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+      "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+      "dev": true
+    },
+    "coa": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz",
+      "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==",
+      "dev": true,
+      "requires": {
+        "@types/q": "1.5.1",
+        "chalk": "2.4.2",
+        "q": "1.5.1"
+      }
+    },
+    "code-point-at": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+      "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+      "dev": true
+    },
+    "collection-visit": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+      "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+      "dev": true,
+      "requires": {
+        "map-visit": "1.0.0",
+        "object-visit": "1.0.1"
+      }
+    },
+    "color": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/color/-/color-3.1.0.tgz",
+      "integrity": "sha512-CwyopLkuRYO5ei2EpzpIh6LqJMt6Mt+jZhO5VI5f/wJLZriXQE32/SSqzmrh+QB+AZT81Cj8yv+7zwToW8ahZg==",
+      "dev": true,
+      "requires": {
+        "color-convert": "1.9.3",
+        "color-string": "1.5.3"
+      }
+    },
+    "color-convert": {
+      "version": "1.9.3",
+      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+      "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+      "dev": true,
+      "requires": {
+        "color-name": "1.1.3"
+      }
+    },
+    "color-name": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+      "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+      "dev": true
+    },
+    "color-string": {
+      "version": "1.5.3",
+      "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz",
+      "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==",
+      "dev": true,
+      "requires": {
+        "color-name": "1.1.3",
+        "simple-swizzle": "0.2.2"
+      }
+    },
+    "colors": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
+      "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=",
+      "dev": true
+    },
+    "combined-stream": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz",
+      "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==",
+      "dev": true,
+      "requires": {
+        "delayed-stream": "1.0.0"
+      }
+    },
+    "commander": {
+      "version": "2.17.1",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
+      "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==",
+      "dev": true
+    },
+    "commondir": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+      "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
+      "dev": true
+    },
+    "component-emitter": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+      "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+      "dev": true
+    },
+    "compressible": {
+      "version": "2.0.16",
+      "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.16.tgz",
+      "integrity": "sha512-JQfEOdnI7dASwCuSPWIeVYwc/zMsu/+tRhoUvEfXz2gxOA2DNjmG5vhtFdBlhWPPGo+RdT9S3tgc/uH5qgDiiA==",
+      "dev": true,
+      "requires": {
+        "mime-db": "1.38.0"
+      }
+    },
+    "compression": {
+      "version": "1.7.3",
+      "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.3.tgz",
+      "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==",
+      "dev": true,
+      "requires": {
+        "accepts": "1.3.5",
+        "bytes": "3.0.0",
+        "compressible": "2.0.16",
+        "debug": "2.6.9",
+        "on-headers": "1.0.2",
+        "safe-buffer": "5.1.2",
+        "vary": "1.1.2"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+          "dev": true
+        }
+      }
+    },
+    "concat-map": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+      "dev": true
+    },
+    "concat-stream": {
+      "version": "1.6.2",
+      "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+      "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+      "dev": true,
+      "requires": {
+        "buffer-from": "1.1.1",
+        "inherits": "2.0.3",
+        "readable-stream": "2.3.6",
+        "typedarray": "0.0.6"
+      }
+    },
+    "connect-history-api-fallback": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz",
+      "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==",
+      "dev": true
+    },
+    "console-browserify": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
+      "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
+      "dev": true,
+      "requires": {
+        "date-now": "0.1.4"
+      }
+    },
+    "consolidate": {
+      "version": "0.15.1",
+      "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz",
+      "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==",
+      "dev": true,
+      "requires": {
+        "bluebird": "3.5.3"
+      }
+    },
+    "constants-browserify": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
+      "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
+      "dev": true
+    },
+    "content-disposition": {
+      "version": "0.5.2",
+      "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
+      "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=",
+      "dev": true
+    },
+    "content-type": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
+      "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
+      "dev": true
+    },
+    "convert-source-map": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz",
+      "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==",
+      "dev": true,
+      "requires": {
+        "safe-buffer": "5.1.2"
+      }
+    },
+    "cookie": {
+      "version": "0.3.1",
+      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
+      "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=",
+      "dev": true
+    },
+    "cookie-signature": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+      "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=",
+      "dev": true
+    },
+    "copy-concurrently": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
+      "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
+      "dev": true,
+      "requires": {
+        "aproba": "1.2.0",
+        "fs-write-stream-atomic": "1.0.10",
+        "iferr": "0.1.5",
+        "mkdirp": "0.5.1",
+        "rimraf": "2.6.3",
+        "run-queue": "1.0.3"
+      }
+    },
+    "copy-descriptor": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+      "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+      "dev": true
+    },
+    "copy-webpack-plugin": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.6.0.tgz",
+      "integrity": "sha512-Y+SQCF+0NoWQryez2zXn5J5knmr9z/9qSQt7fbL78u83rxmigOy8X5+BFn8CFSuX+nKT8gpYwJX68ekqtQt6ZA==",
+      "dev": true,
+      "requires": {
+        "cacache": "10.0.4",
+        "find-cache-dir": "1.0.0",
+        "globby": "7.1.1",
+        "is-glob": "4.0.0",
+        "loader-utils": "1.2.3",
+        "minimatch": "3.0.4",
+        "p-limit": "1.3.0",
+        "serialize-javascript": "1.6.1"
+      },
+      "dependencies": {
+        "cacache": {
+          "version": "10.0.4",
+          "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz",
+          "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==",
+          "dev": true,
+          "requires": {
+            "bluebird": "3.5.3",
+            "chownr": "1.1.1",
+            "glob": "7.1.3",
+            "graceful-fs": "4.1.15",
+            "lru-cache": "4.1.5",
+            "mississippi": "2.0.0",
+            "mkdirp": "0.5.1",
+            "move-concurrently": "1.0.1",
+            "promise-inflight": "1.0.1",
+            "rimraf": "2.6.3",
+            "ssri": "5.3.0",
+            "unique-filename": "1.1.1",
+            "y18n": "4.0.0"
+          }
+        },
+        "find-cache-dir": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz",
+          "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=",
+          "dev": true,
+          "requires": {
+            "commondir": "1.0.1",
+            "make-dir": "1.3.0",
+            "pkg-dir": "2.0.0"
+          }
+        },
+        "find-up": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+          "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+          "dev": true,
+          "requires": {
+            "locate-path": "2.0.0"
+          }
+        },
+        "globby": {
+          "version": "7.1.1",
+          "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz",
+          "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=",
+          "dev": true,
+          "requires": {
+            "array-union": "1.0.2",
+            "dir-glob": "2.2.2",
+            "glob": "7.1.3",
+            "ignore": "3.3.10",
+            "pify": "3.0.0",
+            "slash": "1.0.0"
+          }
+        },
+        "locate-path": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+          "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+          "dev": true,
+          "requires": {
+            "p-locate": "2.0.0",
+            "path-exists": "3.0.0"
+          }
+        },
+        "lru-cache": {
+          "version": "4.1.5",
+          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+          "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+          "dev": true,
+          "requires": {
+            "pseudomap": "1.0.2",
+            "yallist": "2.1.2"
+          }
+        },
+        "mississippi": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz",
+          "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==",
+          "dev": true,
+          "requires": {
+            "concat-stream": "1.6.2",
+            "duplexify": "3.7.1",
+            "end-of-stream": "1.4.1",
+            "flush-write-stream": "1.1.1",
+            "from2": "2.3.0",
+            "parallel-transform": "1.1.0",
+            "pump": "2.0.1",
+            "pumpify": "1.5.1",
+            "stream-each": "1.2.3",
+            "through2": "2.0.5"
+          }
+        },
+        "p-limit": {
+          "version": "1.3.0",
+          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+          "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+          "dev": true,
+          "requires": {
+            "p-try": "1.0.0"
+          }
+        },
+        "p-locate": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+          "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+          "dev": true,
+          "requires": {
+            "p-limit": "1.3.0"
+          }
+        },
+        "p-try": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
+          "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
+          "dev": true
+        },
+        "pkg-dir": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
+          "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
+          "dev": true,
+          "requires": {
+            "find-up": "2.1.0"
+          }
+        },
+        "pump": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
+          "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
+          "dev": true,
+          "requires": {
+            "end-of-stream": "1.4.1",
+            "once": "1.4.0"
+          }
+        },
+        "slash": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
+          "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
+          "dev": true
+        },
+        "ssri": {
+          "version": "5.3.0",
+          "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz",
+          "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==",
+          "dev": true,
+          "requires": {
+            "safe-buffer": "5.1.2"
+          }
+        },
+        "yallist": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+          "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+          "dev": true
+        }
+      }
+    },
+    "core-js": {
+      "version": "2.6.5",
+      "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.5.tgz",
+      "integrity": "sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A=="
+    },
+    "core-util-is": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+      "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+      "dev": true
+    },
+    "cosmiconfig": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.1.0.tgz",
+      "integrity": "sha512-kCNPvthka8gvLtzAxQXvWo4FxqRB+ftRZyPZNuab5ngvM9Y7yw7hbEysglptLgpkGX9nAOKTBVkHUAe8xtYR6Q==",
+      "dev": true,
+      "requires": {
+        "import-fresh": "2.0.0",
+        "is-directory": "0.3.1",
+        "js-yaml": "3.12.1",
+        "lodash.get": "4.4.2",
+        "parse-json": "4.0.0"
+      }
+    },
+    "create-ecdh": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
+      "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
+      "dev": true,
+      "requires": {
+        "bn.js": "4.11.8",
+        "elliptic": "6.4.1"
+      }
+    },
+    "create-hash": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
+      "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
+      "dev": true,
+      "requires": {
+        "cipher-base": "1.0.4",
+        "inherits": "2.0.3",
+        "md5.js": "1.3.5",
+        "ripemd160": "2.0.2",
+        "sha.js": "2.4.11"
+      }
+    },
+    "create-hmac": {
+      "version": "1.1.7",
+      "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
+      "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
+      "dev": true,
+      "requires": {
+        "cipher-base": "1.0.4",
+        "create-hash": "1.2.0",
+        "inherits": "2.0.3",
+        "ripemd160": "2.0.2",
+        "safe-buffer": "5.1.2",
+        "sha.js": "2.4.11"
+      }
+    },
+    "cross-spawn": {
+      "version": "6.0.5",
+      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+      "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+      "dev": true,
+      "requires": {
+        "nice-try": "1.0.5",
+        "path-key": "2.0.1",
+        "semver": "5.6.0",
+        "shebang-command": "1.2.0",
+        "which": "1.3.1"
+      }
+    },
+    "crypto-browserify": {
+      "version": "3.12.0",
+      "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
+      "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
+      "dev": true,
+      "requires": {
+        "browserify-cipher": "1.0.1",
+        "browserify-sign": "4.0.4",
+        "create-ecdh": "4.0.3",
+        "create-hash": "1.2.0",
+        "create-hmac": "1.1.7",
+        "diffie-hellman": "5.0.3",
+        "inherits": "2.0.3",
+        "pbkdf2": "3.0.17",
+        "public-encrypt": "4.0.3",
+        "randombytes": "2.1.0",
+        "randomfill": "1.0.4"
+      }
+    },
+    "css-color-names": {
+      "version": "0.0.4",
+      "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz",
+      "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=",
+      "dev": true
+    },
+    "css-declaration-sorter": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz",
+      "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==",
+      "dev": true,
+      "requires": {
+        "postcss": "7.0.14",
+        "timsort": "0.3.0"
+      }
+    },
+    "css-loader": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-1.0.1.tgz",
+      "integrity": "sha512-+ZHAZm/yqvJ2kDtPne3uX0C+Vr3Zn5jFn2N4HywtS5ujwvsVkyg0VArEXpl3BgczDA8anieki1FIzhchX4yrDw==",
+      "dev": true,
+      "requires": {
+        "babel-code-frame": "6.26.0",
+        "css-selector-tokenizer": "0.7.1",
+        "icss-utils": "2.1.0",
+        "loader-utils": "1.2.3",
+        "lodash": "4.17.11",
+        "postcss": "6.0.23",
+        "postcss-modules-extract-imports": "1.2.1",
+        "postcss-modules-local-by-default": "1.2.0",
+        "postcss-modules-scope": "1.1.0",
+        "postcss-modules-values": "1.3.0",
+        "postcss-value-parser": "3.3.1",
+        "source-list-map": "2.0.1"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "6.0.23",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
+          "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
+          "dev": true,
+          "requires": {
+            "chalk": "2.4.2",
+            "source-map": "0.6.1",
+            "supports-color": "5.5.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        }
+      }
+    },
+    "css-select": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.0.2.tgz",
+      "integrity": "sha512-dSpYaDVoWaELjvZ3mS6IKZM/y2PMPa/XYoEfYNZePL4U/XgyxZNroHEHReDx/d+VgXh9VbCTtFqLkFbmeqeaRQ==",
+      "dev": true,
+      "requires": {
+        "boolbase": "1.0.0",
+        "css-what": "2.1.3",
+        "domutils": "1.7.0",
+        "nth-check": "1.0.2"
+      }
+    },
+    "css-select-base-adapter": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz",
+      "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==",
+      "dev": true
+    },
+    "css-selector-tokenizer": {
+      "version": "0.7.1",
+      "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz",
+      "integrity": "sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA==",
+      "dev": true,
+      "requires": {
+        "cssesc": "0.1.0",
+        "fastparse": "1.1.2",
+        "regexpu-core": "1.0.0"
+      },
+      "dependencies": {
+        "cssesc": {
+          "version": "0.1.0",
+          "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz",
+          "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=",
+          "dev": true
+        },
+        "jsesc": {
+          "version": "0.5.0",
+          "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+          "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
+          "dev": true
+        },
+        "regexpu-core": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz",
+          "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=",
+          "dev": true,
+          "requires": {
+            "regenerate": "1.4.0",
+            "regjsgen": "0.2.0",
+            "regjsparser": "0.1.5"
+          }
+        },
+        "regjsgen": {
+          "version": "0.2.0",
+          "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz",
+          "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=",
+          "dev": true
+        },
+        "regjsparser": {
+          "version": "0.1.5",
+          "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz",
+          "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
+          "dev": true,
+          "requires": {
+            "jsesc": "0.5.0"
+          }
+        }
+      }
+    },
+    "css-tree": {
+      "version": "1.0.0-alpha.28",
+      "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.28.tgz",
+      "integrity": "sha512-joNNW1gCp3qFFzj4St6zk+Wh/NBv0vM5YbEreZk0SD4S23S+1xBKb6cLDg2uj4P4k/GUMlIm6cKIDqIG+vdt0w==",
+      "dev": true,
+      "requires": {
+        "mdn-data": "1.1.4",
+        "source-map": "0.5.7"
+      }
+    },
+    "css-unit-converter": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.1.tgz",
+      "integrity": "sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY=",
+      "dev": true
+    },
+    "css-url-regex": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/css-url-regex/-/css-url-regex-1.1.0.tgz",
+      "integrity": "sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w=",
+      "dev": true
+    },
+    "css-what": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz",
+      "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==",
+      "dev": true
+    },
+    "cssesc": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz",
+      "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==",
+      "dev": true
+    },
+    "cssnano": {
+      "version": "4.1.10",
+      "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz",
+      "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==",
+      "dev": true,
+      "requires": {
+        "cosmiconfig": "5.1.0",
+        "cssnano-preset-default": "4.0.7",
+        "is-resolvable": "1.1.0",
+        "postcss": "7.0.14"
+      }
+    },
+    "cssnano-preset-default": {
+      "version": "4.0.7",
+      "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz",
+      "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==",
+      "dev": true,
+      "requires": {
+        "css-declaration-sorter": "4.0.1",
+        "cssnano-util-raw-cache": "4.0.1",
+        "postcss": "7.0.14",
+        "postcss-calc": "7.0.1",
+        "postcss-colormin": "4.0.3",
+        "postcss-convert-values": "4.0.1",
+        "postcss-discard-comments": "4.0.2",
+        "postcss-discard-duplicates": "4.0.2",
+        "postcss-discard-empty": "4.0.1",
+        "postcss-discard-overridden": "4.0.1",
+        "postcss-merge-longhand": "4.0.11",
+        "postcss-merge-rules": "4.0.3",
+        "postcss-minify-font-values": "4.0.2",
+        "postcss-minify-gradients": "4.0.2",
+        "postcss-minify-params": "4.0.2",
+        "postcss-minify-selectors": "4.0.2",
+        "postcss-normalize-charset": "4.0.1",
+        "postcss-normalize-display-values": "4.0.2",
+        "postcss-normalize-positions": "4.0.2",
+        "postcss-normalize-repeat-style": "4.0.2",
+        "postcss-normalize-string": "4.0.2",
+        "postcss-normalize-timing-functions": "4.0.2",
+        "postcss-normalize-unicode": "4.0.1",
+        "postcss-normalize-url": "4.0.1",
+        "postcss-normalize-whitespace": "4.0.2",
+        "postcss-ordered-values": "4.1.2",
+        "postcss-reduce-initial": "4.0.3",
+        "postcss-reduce-transforms": "4.0.2",
+        "postcss-svgo": "4.0.2",
+        "postcss-unique-selectors": "4.0.1"
+      }
+    },
+    "cssnano-util-get-arguments": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz",
+      "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=",
+      "dev": true
+    },
+    "cssnano-util-get-match": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz",
+      "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=",
+      "dev": true
+    },
+    "cssnano-util-raw-cache": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz",
+      "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==",
+      "dev": true,
+      "requires": {
+        "postcss": "7.0.14"
+      }
+    },
+    "cssnano-util-same-parent": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz",
+      "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==",
+      "dev": true
+    },
+    "csso": {
+      "version": "3.5.1",
+      "resolved": "https://registry.npmjs.org/csso/-/csso-3.5.1.tgz",
+      "integrity": "sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg==",
+      "dev": true,
+      "requires": {
+        "css-tree": "1.0.0-alpha.29"
+      },
+      "dependencies": {
+        "css-tree": {
+          "version": "1.0.0-alpha.29",
+          "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.29.tgz",
+          "integrity": "sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==",
+          "dev": true,
+          "requires": {
+            "mdn-data": "1.1.4",
+            "source-map": "0.5.7"
+          }
+        }
+      }
+    },
+    "cyclist": {
+      "version": "0.2.2",
+      "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz",
+      "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=",
+      "dev": true
+    },
+    "dashdash": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+      "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+      "dev": true,
+      "requires": {
+        "assert-plus": "1.0.0"
+      }
+    },
+    "date-now": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
+      "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=",
+      "dev": true
+    },
+    "de-indent": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz",
+      "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=",
+      "dev": true
+    },
+    "debug": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+      "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+      "dev": true,
+      "requires": {
+        "ms": "2.1.1"
+      }
+    },
+    "decamelize": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz",
+      "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==",
+      "dev": true,
+      "requires": {
+        "xregexp": "4.0.0"
+      }
+    },
+    "decode-uri-component": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+      "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+      "dev": true
+    },
+    "deep-equal": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
+      "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=",
+      "dev": true
+    },
+    "deep-is": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+      "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+      "dev": true
+    },
+    "deepmerge": {
+      "version": "1.5.2",
+      "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz",
+      "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==",
+      "dev": true
+    },
+    "default-gateway": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-3.1.0.tgz",
+      "integrity": "sha512-MRhxv1cqdpKZh93zMFBkXcZfr2QFasrDlxjGa+M22Hv9EBmdWCccFe03KqSnkPLpYXlFhrR152kDX99S//3/Xw==",
+      "dev": true,
+      "requires": {
+        "execa": "1.0.0",
+        "idb-connector": "1.1.8",
+        "ip-regex": "2.1.0"
+      }
+    },
+    "defaults": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
+      "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
+      "dev": true,
+      "requires": {
+        "clone": "1.0.4"
+      }
+    },
+    "define-properties": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
+      "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
+      "dev": true,
+      "requires": {
+        "object-keys": "1.1.0"
+      }
+    },
+    "define-property": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+      "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+      "dev": true,
+      "requires": {
+        "is-descriptor": "1.0.2",
+        "isobject": "3.0.1"
+      },
+      "dependencies": {
+        "is-accessor-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+          "dev": true,
+          "requires": {
+            "kind-of": "6.0.2"
+          }
+        },
+        "is-data-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+          "dev": true,
+          "requires": {
+            "kind-of": "6.0.2"
+          }
+        },
+        "is-descriptor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+          "dev": true,
+          "requires": {
+            "is-accessor-descriptor": "1.0.0",
+            "is-data-descriptor": "1.0.0",
+            "kind-of": "6.0.2"
+          }
+        }
+      }
+    },
+    "del": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz",
+      "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=",
+      "dev": true,
+      "requires": {
+        "globby": "6.1.0",
+        "is-path-cwd": "1.0.0",
+        "is-path-in-cwd": "1.0.1",
+        "p-map": "1.2.0",
+        "pify": "3.0.0",
+        "rimraf": "2.6.3"
+      },
+      "dependencies": {
+        "globby": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
+          "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
+          "dev": true,
+          "requires": {
+            "array-union": "1.0.2",
+            "glob": "7.1.3",
+            "object-assign": "4.1.1",
+            "pify": "2.3.0",
+            "pinkie-promise": "2.0.1"
+          },
+          "dependencies": {
+            "pify": {
+              "version": "2.3.0",
+              "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+              "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+              "dev": true
+            }
+          }
+        }
+      }
+    },
+    "delayed-stream": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+      "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+      "dev": true
+    },
+    "depd": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+      "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+      "dev": true
+    },
+    "des.js": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz",
+      "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
+      "dev": true,
+      "requires": {
+        "inherits": "2.0.3",
+        "minimalistic-assert": "1.0.1"
+      }
+    },
+    "destroy": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+      "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
+      "dev": true
+    },
+    "detect-node": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz",
+      "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==",
+      "dev": true
+    },
+    "diffie-hellman": {
+      "version": "5.0.3",
+      "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
+      "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
+      "dev": true,
+      "requires": {
+        "bn.js": "4.11.8",
+        "miller-rabin": "4.0.1",
+        "randombytes": "2.1.0"
+      }
+    },
+    "dir-glob": {
+      "version": "2.2.2",
+      "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz",
+      "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==",
+      "dev": true,
+      "requires": {
+        "path-type": "3.0.0"
+      }
+    },
+    "dns-equal": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz",
+      "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=",
+      "dev": true
+    },
+    "dns-packet": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz",
+      "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==",
+      "dev": true,
+      "requires": {
+        "ip": "1.1.5",
+        "safe-buffer": "5.1.2"
+      }
+    },
+    "dns-txt": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz",
+      "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=",
+      "dev": true,
+      "requires": {
+        "buffer-indexof": "1.1.1"
+      }
+    },
+    "doctrine": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+      "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "esutils": "2.0.2"
+      }
+    },
+    "dom-converter": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz",
+      "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==",
+      "dev": true,
+      "requires": {
+        "utila": "0.4.0"
+      }
+    },
+    "dom-serializer": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz",
+      "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==",
+      "dev": true,
+      "requires": {
+        "domelementtype": "1.3.1",
+        "entities": "1.1.2"
+      }
+    },
+    "domain-browser": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
+      "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
+      "dev": true
+    },
+    "domelementtype": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
+      "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==",
+      "dev": true
+    },
+    "domhandler": {
+      "version": "2.4.2",
+      "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
+      "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
+      "dev": true,
+      "requires": {
+        "domelementtype": "1.3.1"
+      }
+    },
+    "domutils": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz",
+      "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==",
+      "dev": true,
+      "requires": {
+        "dom-serializer": "0.1.1",
+        "domelementtype": "1.3.1"
+      }
+    },
+    "dot-prop": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz",
+      "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==",
+      "dev": true,
+      "requires": {
+        "is-obj": "1.0.1"
+      }
+    },
+    "dotenv": {
+      "version": "6.2.0",
+      "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz",
+      "integrity": "sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==",
+      "dev": true
+    },
+    "duplexer": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
+      "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=",
+      "dev": true
+    },
+    "duplexify": {
+      "version": "3.7.1",
+      "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
+      "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
+      "dev": true,
+      "requires": {
+        "end-of-stream": "1.4.1",
+        "inherits": "2.0.3",
+        "readable-stream": "2.3.6",
+        "stream-shift": "1.0.0"
+      }
+    },
+    "easy-stack": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/easy-stack/-/easy-stack-1.0.0.tgz",
+      "integrity": "sha1-EskbMIWjfwuqM26UhurEv5Tj54g=",
+      "dev": true
+    },
+    "ecc-jsbn": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+      "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
+      "dev": true,
+      "requires": {
+        "jsbn": "0.1.1",
+        "safer-buffer": "2.1.2"
+      }
+    },
+    "ee-first": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+      "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
+      "dev": true
+    },
+    "ejs": {
+      "version": "2.6.1",
+      "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz",
+      "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==",
+      "dev": true
+    },
+    "electron-to-chromium": {
+      "version": "1.3.113",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.113.tgz",
+      "integrity": "sha512-De+lPAxEcpxvqPTyZAXELNpRZXABRxf+uL/rSykstQhzj/B0l1150G/ExIIxKc16lI89Hgz81J0BHAcbTqK49g==",
+      "dev": true
+    },
+    "elliptic": {
+      "version": "6.4.1",
+      "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz",
+      "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==",
+      "dev": true,
+      "requires": {
+        "bn.js": "4.11.8",
+        "brorand": "1.1.0",
+        "hash.js": "1.1.7",
+        "hmac-drbg": "1.0.1",
+        "inherits": "2.0.3",
+        "minimalistic-assert": "1.0.1",
+        "minimalistic-crypto-utils": "1.0.1"
+      }
+    },
+    "emoji-regex": {
+      "version": "7.0.3",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+      "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
+      "dev": true
+    },
+    "emojis-list": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
+      "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
+      "dev": true
+    },
+    "encodeurl": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+      "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
+      "dev": true
+    },
+    "end-of-stream": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
+      "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
+      "dev": true,
+      "requires": {
+        "once": "1.4.0"
+      }
+    },
+    "enhanced-resolve": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz",
+      "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "4.1.15",
+        "memory-fs": "0.4.1",
+        "tapable": "1.1.1"
+      }
+    },
+    "entities": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
+      "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
+      "dev": true
+    },
+    "errno": {
+      "version": "0.1.7",
+      "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
+      "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
+      "dev": true,
+      "requires": {
+        "prr": "1.0.1"
+      }
+    },
+    "error-ex": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+      "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+      "dev": true,
+      "requires": {
+        "is-arrayish": "0.2.1"
+      }
+    },
+    "error-stack-parser": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.2.tgz",
+      "integrity": "sha512-E1fPutRDdIj/hohG0UpT5mayXNCxXP9d+snxFsPU9X0XgccOumKraa3juDMwTUyi7+Bu5+mCGagjg4IYeNbOdw==",
+      "dev": true,
+      "requires": {
+        "stackframe": "1.0.4"
+      }
+    },
+    "es-abstract": {
+      "version": "1.13.0",
+      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz",
+      "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==",
+      "dev": true,
+      "requires": {
+        "es-to-primitive": "1.2.0",
+        "function-bind": "1.1.1",
+        "has": "1.0.3",
+        "is-callable": "1.1.4",
+        "is-regex": "1.0.4",
+        "object-keys": "1.1.0"
+      }
+    },
+    "es-to-primitive": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz",
+      "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==",
+      "dev": true,
+      "requires": {
+        "is-callable": "1.1.4",
+        "is-date-object": "1.0.1",
+        "is-symbol": "1.0.2"
+      }
+    },
+    "es6-promise": {
+      "version": "4.2.6",
+      "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.6.tgz",
+      "integrity": "sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q=="
+    },
+    "escape-html": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+      "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
+      "dev": true
+    },
+    "escape-string-regexp": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+      "dev": true
+    },
+    "eslint": {
+      "version": "5.14.1",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.14.1.tgz",
+      "integrity": "sha512-CyUMbmsjxedx8B0mr79mNOqetvkbij/zrXnFeK2zc3pGRn3/tibjiNAv/3UxFEyfMDjh+ZqTrJrEGBFiGfD5Og==",
+      "dev": true,
+      "requires": {
+        "@babel/code-frame": "7.0.0",
+        "ajv": "6.9.1",
+        "chalk": "2.4.2",
+        "cross-spawn": "6.0.5",
+        "debug": "4.1.1",
+        "doctrine": "3.0.0",
+        "eslint-scope": "4.0.0",
+        "eslint-utils": "1.3.1",
+        "eslint-visitor-keys": "1.0.0",
+        "espree": "5.0.1",
+        "esquery": "1.0.1",
+        "esutils": "2.0.2",
+        "file-entry-cache": "5.0.1",
+        "functional-red-black-tree": "1.0.1",
+        "glob": "7.1.3",
+        "globals": "11.11.0",
+        "ignore": "4.0.6",
+        "import-fresh": "3.0.0",
+        "imurmurhash": "0.1.4",
+        "inquirer": "6.2.2",
+        "js-yaml": "3.12.1",
+        "json-stable-stringify-without-jsonify": "1.0.1",
+        "levn": "0.3.0",
+        "lodash": "4.17.11",
+        "minimatch": "3.0.4",
+        "mkdirp": "0.5.1",
+        "natural-compare": "1.4.0",
+        "optionator": "0.8.2",
+        "path-is-inside": "1.0.2",
+        "progress": "2.0.3",
+        "regexpp": "2.0.1",
+        "semver": "5.6.0",
+        "strip-ansi": "4.0.0",
+        "strip-json-comments": "2.0.1",
+        "table": "5.2.3",
+        "text-table": "0.2.0"
+      },
+      "dependencies": {
+        "acorn": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.0.tgz",
+          "integrity": "sha512-MW/FjM+IvU9CgBzjO3UIPCE2pyEwUsoFl+VGdczOPEdxfGFjuKny/gN54mOuX7Qxmb9Rg9MCn2oKiSUeW+pjrw==",
+          "dev": true
+        },
+        "acorn-jsx": {
+          "version": "5.0.1",
+          "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz",
+          "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==",
+          "dev": true
+        },
+        "chardet": {
+          "version": "0.7.0",
+          "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
+          "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
+          "dev": true
+        },
+        "doctrine": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+          "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+          "dev": true,
+          "requires": {
+            "esutils": "2.0.2"
+          }
+        },
+        "espree": {
+          "version": "5.0.1",
+          "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz",
+          "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==",
+          "dev": true,
+          "requires": {
+            "acorn": "6.1.0",
+            "acorn-jsx": "5.0.1",
+            "eslint-visitor-keys": "1.0.0"
+          }
+        },
+        "external-editor": {
+          "version": "3.0.3",
+          "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz",
+          "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==",
+          "dev": true,
+          "requires": {
+            "chardet": "0.7.0",
+            "iconv-lite": "0.4.24",
+            "tmp": "0.0.33"
+          }
+        },
+        "file-entry-cache": {
+          "version": "5.0.1",
+          "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
+          "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==",
+          "dev": true,
+          "requires": {
+            "flat-cache": "2.0.1"
+          }
+        },
+        "flat-cache": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
+          "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
+          "dev": true,
+          "requires": {
+            "flatted": "2.0.0",
+            "rimraf": "2.6.3",
+            "write": "1.0.3"
+          }
+        },
+        "ignore": {
+          "version": "4.0.6",
+          "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+          "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+          "dev": true
+        },
+        "import-fresh": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz",
+          "integrity": "sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==",
+          "dev": true,
+          "requires": {
+            "parent-module": "1.0.0",
+            "resolve-from": "4.0.0"
+          }
+        },
+        "inquirer": {
+          "version": "6.2.2",
+          "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.2.tgz",
+          "integrity": "sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA==",
+          "dev": true,
+          "requires": {
+            "ansi-escapes": "3.2.0",
+            "chalk": "2.4.2",
+            "cli-cursor": "2.1.0",
+            "cli-width": "2.2.0",
+            "external-editor": "3.0.3",
+            "figures": "2.0.0",
+            "lodash": "4.17.11",
+            "mute-stream": "0.0.7",
+            "run-async": "2.3.0",
+            "rxjs": "6.4.0",
+            "string-width": "2.1.1",
+            "strip-ansi": "5.0.0",
+            "through": "2.3.8"
+          },
+          "dependencies": {
+            "strip-ansi": {
+              "version": "5.0.0",
+              "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz",
+              "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==",
+              "dev": true,
+              "requires": {
+                "ansi-regex": "4.0.0"
+              }
+            }
+          }
+        },
+        "regexpp": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
+          "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
+          "dev": true
+        },
+        "resolve-from": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+          "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+          "dev": true
+        },
+        "slice-ansi": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
+          "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "3.2.1",
+            "astral-regex": "1.0.0",
+            "is-fullwidth-code-point": "2.0.0"
+          }
+        },
+        "strip-ansi": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+          "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "3.0.0"
+          },
+          "dependencies": {
+            "ansi-regex": {
+              "version": "3.0.0",
+              "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+              "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+              "dev": true
+            }
+          }
+        },
+        "table": {
+          "version": "5.2.3",
+          "resolved": "https://registry.npmjs.org/table/-/table-5.2.3.tgz",
+          "integrity": "sha512-N2RsDAMvDLvYwFcwbPyF3VmVSSkuF+G1e+8inhBLtHpvwXGw4QRPEZhihQNeEN0i1up6/f6ObCJXNdlRG3YVyQ==",
+          "dev": true,
+          "requires": {
+            "ajv": "6.9.1",
+            "lodash": "4.17.11",
+            "slice-ansi": "2.1.0",
+            "string-width": "3.0.0"
+          },
+          "dependencies": {
+            "string-width": {
+              "version": "3.0.0",
+              "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.0.0.tgz",
+              "integrity": "sha512-rr8CUxBbvOZDUvc5lNIJ+OC1nPVpz+Siw9VBtUjB9b6jZehZLFt0JMCZzShFHIsI8cbhm0EsNIfWJMFV3cu3Ew==",
+              "dev": true,
+              "requires": {
+                "emoji-regex": "7.0.3",
+                "is-fullwidth-code-point": "2.0.0",
+                "strip-ansi": "5.0.0"
+              }
+            },
+            "strip-ansi": {
+              "version": "5.0.0",
+              "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz",
+              "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==",
+              "dev": true,
+              "requires": {
+                "ansi-regex": "4.0.0"
+              }
+            }
+          }
+        },
+        "write": {
+          "version": "1.0.3",
+          "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
+          "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
+          "dev": true,
+          "requires": {
+            "mkdirp": "0.5.1"
+          }
+        }
+      }
+    },
+    "eslint-loader": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.1.2.tgz",
+      "integrity": "sha512-rA9XiXEOilLYPOIInvVH5S/hYfyTPyxag6DZhoQOduM+3TkghAEQ3VcFO8VnX4J4qg/UIBzp72aOf/xvYmpmsg==",
+      "dev": true,
+      "requires": {
+        "loader-fs-cache": "1.0.1",
+        "loader-utils": "1.2.3",
+        "object-assign": "4.1.1",
+        "object-hash": "1.3.1",
+        "rimraf": "2.6.3"
+      }
+    },
+    "eslint-plugin-vue": {
+      "version": "5.2.2",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-5.2.2.tgz",
+      "integrity": "sha512-CtGWH7IB0DA6BZOwcV9w9q3Ri6Yuo8qMjx05SmOGJ6X6E0Yo3y9E/gQ5tuNxg2dEt30tRnBoFTbvtmW9iEoyHA==",
+      "dev": true,
+      "requires": {
+        "vue-eslint-parser": "5.0.0"
+      },
+      "dependencies": {
+        "acorn": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.0.tgz",
+          "integrity": "sha512-MW/FjM+IvU9CgBzjO3UIPCE2pyEwUsoFl+VGdczOPEdxfGFjuKny/gN54mOuX7Qxmb9Rg9MCn2oKiSUeW+pjrw==",
+          "dev": true
+        },
+        "acorn-jsx": {
+          "version": "5.0.1",
+          "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz",
+          "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==",
+          "dev": true
+        },
+        "espree": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/espree/-/espree-4.1.0.tgz",
+          "integrity": "sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w==",
+          "dev": true,
+          "requires": {
+            "acorn": "6.1.0",
+            "acorn-jsx": "5.0.1",
+            "eslint-visitor-keys": "1.0.0"
+          }
+        },
+        "vue-eslint-parser": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-5.0.0.tgz",
+          "integrity": "sha512-JlHVZwBBTNVvzmifwjpZYn0oPWH2SgWv5dojlZBsrhablDu95VFD+hriB1rQGwbD+bms6g+rAFhQHk6+NyiS6g==",
+          "dev": true,
+          "requires": {
+            "debug": "4.1.1",
+            "eslint-scope": "4.0.0",
+            "eslint-visitor-keys": "1.0.0",
+            "espree": "4.1.0",
+            "esquery": "1.0.1",
+            "lodash": "4.17.11"
+          }
+        }
+      }
+    },
+    "eslint-scope": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz",
+      "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==",
+      "dev": true,
+      "requires": {
+        "esrecurse": "4.2.1",
+        "estraverse": "4.2.0"
+      }
+    },
+    "eslint-utils": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz",
+      "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==",
+      "dev": true
+    },
+    "eslint-visitor-keys": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
+      "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==",
+      "dev": true
+    },
+    "espree": {
+      "version": "3.5.4",
+      "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz",
+      "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "acorn": "5.7.3",
+        "acorn-jsx": "3.0.1"
+      }
+    },
+    "esprima": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+      "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+      "dev": true
+    },
+    "esquery": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz",
+      "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==",
+      "dev": true,
+      "requires": {
+        "estraverse": "4.2.0"
+      }
+    },
+    "esrecurse": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
+      "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
+      "dev": true,
+      "requires": {
+        "estraverse": "4.2.0"
+      }
+    },
+    "estraverse": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+      "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+      "dev": true
+    },
+    "esutils": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+      "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+      "dev": true
+    },
+    "etag": {
+      "version": "1.8.1",
+      "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+      "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
+      "dev": true
+    },
+    "event-pubsub": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/event-pubsub/-/event-pubsub-4.3.0.tgz",
+      "integrity": "sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==",
+      "dev": true
+    },
+    "eventemitter3": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz",
+      "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==",
+      "dev": true
+    },
+    "events": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz",
+      "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==",
+      "dev": true
+    },
+    "eventsource": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz",
+      "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==",
+      "dev": true,
+      "requires": {
+        "original": "1.0.2"
+      }
+    },
+    "evp_bytestokey": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
+      "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
+      "dev": true,
+      "requires": {
+        "md5.js": "1.3.5",
+        "safe-buffer": "5.1.2"
+      }
+    },
+    "execa": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
+      "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
+      "dev": true,
+      "requires": {
+        "cross-spawn": "6.0.5",
+        "get-stream": "4.1.0",
+        "is-stream": "1.1.0",
+        "npm-run-path": "2.0.2",
+        "p-finally": "1.0.0",
+        "signal-exit": "3.0.2",
+        "strip-eof": "1.0.0"
+      }
+    },
+    "expand-brackets": {
+      "version": "2.1.4",
+      "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+      "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+      "dev": true,
+      "requires": {
+        "debug": "2.6.9",
+        "define-property": "0.2.5",
+        "extend-shallow": "2.0.1",
+        "posix-character-classes": "0.1.1",
+        "regex-not": "1.0.2",
+        "snapdragon": "0.8.2",
+        "to-regex": "3.0.2"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "0.1.6"
+          }
+        },
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "0.1.1"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+          "dev": true
+        }
+      }
+    },
+    "express": {
+      "version": "4.16.4",
+      "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz",
+      "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==",
+      "dev": true,
+      "requires": {
+        "accepts": "1.3.5",
+        "array-flatten": "1.1.1",
+        "body-parser": "1.18.3",
+        "content-disposition": "0.5.2",
+        "content-type": "1.0.4",
+        "cookie": "0.3.1",
+        "cookie-signature": "1.0.6",
+        "debug": "2.6.9",
+        "depd": "1.1.2",
+        "encodeurl": "1.0.2",
+        "escape-html": "1.0.3",
+        "etag": "1.8.1",
+        "finalhandler": "1.1.1",
+        "fresh": "0.5.2",
+        "merge-descriptors": "1.0.1",
+        "methods": "1.1.2",
+        "on-finished": "2.3.0",
+        "parseurl": "1.3.2",
+        "path-to-regexp": "0.1.7",
+        "proxy-addr": "2.0.4",
+        "qs": "6.5.2",
+        "range-parser": "1.2.0",
+        "safe-buffer": "5.1.2",
+        "send": "0.16.2",
+        "serve-static": "1.13.2",
+        "setprototypeof": "1.1.0",
+        "statuses": "1.4.0",
+        "type-is": "1.6.16",
+        "utils-merge": "1.0.1",
+        "vary": "1.1.2"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+          "dev": true
+        }
+      }
+    },
+    "extend": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+      "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+      "dev": true
+    },
+    "extend-shallow": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+      "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+      "dev": true,
+      "requires": {
+        "assign-symbols": "1.0.0",
+        "is-extendable": "1.0.1"
+      },
+      "dependencies": {
+        "is-extendable": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+          "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+          "dev": true,
+          "requires": {
+            "is-plain-object": "2.0.4"
+          }
+        }
+      }
+    },
+    "external-editor": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz",
+      "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "chardet": "0.4.2",
+        "iconv-lite": "0.4.24",
+        "tmp": "0.0.33"
+      }
+    },
+    "extglob": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+      "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+      "dev": true,
+      "requires": {
+        "array-unique": "0.3.2",
+        "define-property": "1.0.0",
+        "expand-brackets": "2.1.4",
+        "extend-shallow": "2.0.1",
+        "fragment-cache": "0.2.1",
+        "regex-not": "1.0.2",
+        "snapdragon": "0.8.2",
+        "to-regex": "3.0.2"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "1.0.2"
+          }
+        },
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "0.1.1"
+          }
+        },
+        "is-accessor-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+          "dev": true,
+          "requires": {
+            "kind-of": "6.0.2"
+          }
+        },
+        "is-data-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+          "dev": true,
+          "requires": {
+            "kind-of": "6.0.2"
+          }
+        },
+        "is-descriptor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+          "dev": true,
+          "requires": {
+            "is-accessor-descriptor": "1.0.0",
+            "is-data-descriptor": "1.0.0",
+            "kind-of": "6.0.2"
+          }
+        }
+      }
+    },
+    "extsprintf": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+      "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+      "dev": true
+    },
+    "fast-deep-equal": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+      "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
+      "dev": true
+    },
+    "fast-glob": {
+      "version": "2.2.6",
+      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.6.tgz",
+      "integrity": "sha512-0BvMaZc1k9F+MeWWMe8pL6YltFzZYcJsYU7D4JyDA6PAczaXvxqQQ/z+mDF7/4Mw01DeUc+i3CTKajnkANkV4w==",
+      "dev": true,
+      "requires": {
+        "@mrmlnc/readdir-enhanced": "2.2.1",
+        "@nodelib/fs.stat": "1.1.3",
+        "glob-parent": "3.1.0",
+        "is-glob": "4.0.0",
+        "merge2": "1.2.3",
+        "micromatch": "3.1.10"
+      }
+    },
+    "fast-json-stable-stringify": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+      "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
+      "dev": true
+    },
+    "fast-levenshtein": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+      "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+      "dev": true
+    },
+    "fastparse": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz",
+      "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==",
+      "dev": true
+    },
+    "faye-websocket": {
+      "version": "0.10.0",
+      "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz",
+      "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=",
+      "dev": true,
+      "requires": {
+        "websocket-driver": "0.7.0"
+      }
+    },
+    "figgy-pudding": {
+      "version": "3.5.1",
+      "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz",
+      "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==",
+      "dev": true
+    },
+    "figures": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+      "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
+      "dev": true,
+      "requires": {
+        "escape-string-regexp": "1.0.5"
+      }
+    },
+    "file-entry-cache": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz",
+      "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "flat-cache": "1.3.4",
+        "object-assign": "4.1.1"
+      }
+    },
+    "file-loader": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-3.0.1.tgz",
+      "integrity": "sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw==",
+      "dev": true,
+      "requires": {
+        "loader-utils": "1.2.3",
+        "schema-utils": "1.0.0"
+      },
+      "dependencies": {
+        "schema-utils": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+          "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+          "dev": true,
+          "requires": {
+            "ajv": "6.9.1",
+            "ajv-errors": "1.0.1",
+            "ajv-keywords": "3.4.0"
+          }
+        }
+      }
+    },
+    "filesize": {
+      "version": "3.6.1",
+      "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz",
+      "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==",
+      "dev": true
+    },
+    "fill-range": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+      "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+      "dev": true,
+      "requires": {
+        "extend-shallow": "2.0.1",
+        "is-number": "3.0.0",
+        "repeat-string": "1.6.1",
+        "to-regex-range": "2.1.1"
+      },
+      "dependencies": {
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "0.1.1"
+          }
+        }
+      }
+    },
+    "finalhandler": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz",
+      "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==",
+      "dev": true,
+      "requires": {
+        "debug": "2.6.9",
+        "encodeurl": "1.0.2",
+        "escape-html": "1.0.3",
+        "on-finished": "2.3.0",
+        "parseurl": "1.3.2",
+        "statuses": "1.4.0",
+        "unpipe": "1.0.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+          "dev": true
+        }
+      }
+    },
+    "find-cache-dir": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.0.0.tgz",
+      "integrity": "sha512-LDUY6V1Xs5eFskUVYtIwatojt6+9xC9Chnlk/jYOOvn3FAFfSaWddxahDGyNHh0b2dMXa6YW2m0tk8TdVaXHlA==",
+      "dev": true,
+      "requires": {
+        "commondir": "1.0.1",
+        "make-dir": "1.3.0",
+        "pkg-dir": "3.0.0"
+      }
+    },
+    "find-up": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+      "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+      "dev": true,
+      "requires": {
+        "locate-path": "3.0.0"
+      }
+    },
+    "flat-cache": {
+      "version": "1.3.4",
+      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz",
+      "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "circular-json": "0.3.3",
+        "graceful-fs": "4.1.15",
+        "rimraf": "2.6.3",
+        "write": "0.2.1"
+      }
+    },
+    "flatted": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.0.tgz",
+      "integrity": "sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==",
+      "dev": true
+    },
+    "flush-write-stream": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz",
+      "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==",
+      "dev": true,
+      "requires": {
+        "inherits": "2.0.3",
+        "readable-stream": "2.3.6"
+      }
+    },
+    "follow-redirects": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.7.0.tgz",
+      "integrity": "sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ==",
+      "requires": {
+        "debug": "3.2.6"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.2.6",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+          "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+          "requires": {
+            "ms": "2.1.1"
+          }
+        }
+      }
+    },
+    "for-in": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+      "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+      "dev": true
+    },
+    "forever-agent": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+      "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+      "dev": true
+    },
+    "form-data": {
+      "version": "2.3.3",
+      "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
+      "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
+      "dev": true,
+      "requires": {
+        "asynckit": "0.4.0",
+        "combined-stream": "1.0.7",
+        "mime-types": "2.1.22"
+      }
+    },
+    "forwarded": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
+      "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=",
+      "dev": true
+    },
+    "fragment-cache": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+      "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+      "dev": true,
+      "requires": {
+        "map-cache": "0.2.2"
+      }
+    },
+    "fresh": {
+      "version": "0.5.2",
+      "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+      "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
+      "dev": true
+    },
+    "from2": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
+      "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
+      "dev": true,
+      "requires": {
+        "inherits": "2.0.3",
+        "readable-stream": "2.3.6"
+      }
+    },
+    "fs-extra": {
+      "version": "7.0.1",
+      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
+      "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "4.1.15",
+        "jsonfile": "4.0.0",
+        "universalify": "0.1.2"
+      }
+    },
+    "fs-write-stream-atomic": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
+      "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "4.1.15",
+        "iferr": "0.1.5",
+        "imurmurhash": "0.1.4",
+        "readable-stream": "2.3.6"
+      }
+    },
+    "fs.realpath": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+      "dev": true
+    },
+    "fsevents": {
+      "version": "1.2.7",
+      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz",
+      "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "nan": "2.12.1",
+        "node-pre-gyp": "0.10.3"
+      },
+      "dependencies": {
+        "abbrev": {
+          "version": "1.1.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "ansi-regex": {
+          "version": "2.1.1",
+          "bundled": true,
+          "dev": true
+        },
+        "aproba": {
+          "version": "1.2.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "are-we-there-yet": {
+          "version": "1.1.5",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "delegates": "^1.0.0",
+            "readable-stream": "^2.0.6"
+          }
+        },
+        "balanced-match": {
+          "version": "1.0.0",
+          "bundled": true,
+          "dev": true
+        },
+        "brace-expansion": {
+          "version": "1.1.11",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "balanced-match": "1.0.0",
+            "concat-map": "0.0.1"
+          }
+        },
+        "chownr": {
+          "version": "1.1.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "code-point-at": {
+          "version": "1.1.0",
+          "bundled": true,
+          "dev": true
+        },
+        "concat-map": {
+          "version": "0.0.1",
+          "bundled": true,
+          "dev": true
+        },
+        "console-control-strings": {
+          "version": "1.1.0",
+          "bundled": true,
+          "dev": true
+        },
+        "core-util-is": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "debug": {
+          "version": "2.6.9",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "deep-extend": {
+          "version": "0.6.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "delegates": {
+          "version": "1.0.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "detect-libc": {
+          "version": "1.0.3",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "fs-minipass": {
+          "version": "1.2.5",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "minipass": "^2.2.1"
+          }
+        },
+        "fs.realpath": {
+          "version": "1.0.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "gauge": {
+          "version": "2.7.4",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "aproba": "^1.0.3",
+            "console-control-strings": "^1.0.0",
+            "has-unicode": "^2.0.0",
+            "object-assign": "^4.1.0",
+            "signal-exit": "^3.0.0",
+            "string-width": "^1.0.1",
+            "strip-ansi": "^3.0.1",
+            "wide-align": "^1.1.0"
+          }
+        },
+        "glob": {
+          "version": "7.1.3",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.4",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
+          }
+        },
+        "has-unicode": {
+          "version": "2.0.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "iconv-lite": {
+          "version": "0.4.24",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "safer-buffer": "2.1.2"
+          }
+        },
+        "ignore-walk": {
+          "version": "3.0.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "minimatch": "3.0.4"
+          }
+        },
+        "inflight": {
+          "version": "1.0.6",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "once": "^1.3.0",
+            "wrappy": "1"
+          }
+        },
+        "inherits": {
+          "version": "2.0.3",
+          "bundled": true,
+          "dev": true
+        },
+        "ini": {
+          "version": "1.3.5",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "is-fullwidth-code-point": {
+          "version": "1.0.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "number-is-nan": "1.0.1"
+          }
+        },
+        "isarray": {
+          "version": "1.0.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "minimatch": {
+          "version": "3.0.4",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "brace-expansion": "1.1.11"
+          }
+        },
+        "minimist": {
+          "version": "0.0.8",
+          "bundled": true,
+          "dev": true
+        },
+        "minipass": {
+          "version": "2.3.5",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "safe-buffer": "^5.1.2",
+            "yallist": "^3.0.0"
+          }
+        },
+        "minizlib": {
+          "version": "1.2.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "minipass": "^2.2.1"
+          }
+        },
+        "mkdirp": {
+          "version": "0.5.1",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "minimist": "0.0.8"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "needle": {
+          "version": "2.2.4",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "debug": "2.6.9",
+            "iconv-lite": "0.4.24",
+            "sax": "1.2.4"
+          }
+        },
+        "node-pre-gyp": {
+          "version": "0.10.3",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "detect-libc": "^1.0.2",
+            "mkdirp": "^0.5.1",
+            "needle": "^2.2.1",
+            "nopt": "^4.0.1",
+            "npm-packlist": "^1.1.6",
+            "npmlog": "^4.0.2",
+            "rc": "^1.2.7",
+            "rimraf": "^2.6.1",
+            "semver": "^5.3.0",
+            "tar": "^4"
+          }
+        },
+        "nopt": {
+          "version": "4.0.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "abbrev": "1.1.1",
+            "osenv": "0.1.5"
+          }
+        },
+        "npm-bundled": {
+          "version": "1.0.5",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "npm-packlist": {
+          "version": "1.2.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "ignore-walk": "3.0.1",
+            "npm-bundled": "1.0.5"
+          }
+        },
+        "npmlog": {
+          "version": "4.1.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "are-we-there-yet": "~1.1.2",
+            "console-control-strings": "~1.1.0",
+            "gauge": "~2.7.3",
+            "set-blocking": "~2.0.0"
+          }
+        },
+        "number-is-nan": {
+          "version": "1.0.1",
+          "bundled": true,
+          "dev": true
+        },
+        "object-assign": {
+          "version": "4.1.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "once": {
+          "version": "1.4.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "wrappy": "1"
+          }
+        },
+        "os-homedir": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "os-tmpdir": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "osenv": {
+          "version": "0.1.5",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "os-homedir": "1.0.2",
+            "os-tmpdir": "1.0.2"
+          }
+        },
+        "path-is-absolute": {
+          "version": "1.0.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "process-nextick-args": {
+          "version": "2.0.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "rc": {
+          "version": "1.2.8",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "deep-extend": "0.6.0",
+            "ini": "1.3.5",
+            "minimist": "1.2.0",
+            "strip-json-comments": "2.0.1"
+          },
+          "dependencies": {
+            "minimist": {
+              "version": "1.2.0",
+              "bundled": true,
+              "dev": true,
+              "optional": true
+            }
+          }
+        },
+        "readable-stream": {
+          "version": "2.3.6",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.3",
+            "isarray": "~1.0.0",
+            "process-nextick-args": "~2.0.0",
+            "safe-buffer": "~5.1.1",
+            "string_decoder": "~1.1.1",
+            "util-deprecate": "~1.0.1"
+          }
+        },
+        "rimraf": {
+          "version": "2.6.3",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "glob": "^7.1.3"
+          }
+        },
+        "safe-buffer": {
+          "version": "5.1.2",
+          "bundled": true,
+          "dev": true
+        },
+        "safer-buffer": {
+          "version": "2.1.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "sax": {
+          "version": "1.2.4",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "semver": {
+          "version": "5.6.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "set-blocking": {
+          "version": "2.0.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "signal-exit": {
+          "version": "3.0.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "string-width": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "code-point-at": "1.1.0",
+            "is-fullwidth-code-point": "1.0.0",
+            "strip-ansi": "3.0.1"
+          }
+        },
+        "string_decoder": {
+          "version": "1.1.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "safe-buffer": "5.1.2"
+          }
+        },
+        "strip-ansi": {
+          "version": "3.0.1",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "ansi-regex": "2.1.1"
+          }
+        },
+        "strip-json-comments": {
+          "version": "2.0.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "tar": {
+          "version": "4.4.8",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "chownr": "^1.1.1",
+            "fs-minipass": "^1.2.5",
+            "minipass": "^2.3.4",
+            "minizlib": "^1.1.1",
+            "mkdirp": "^0.5.0",
+            "safe-buffer": "^5.1.2",
+            "yallist": "^3.0.2"
+          }
+        },
+        "util-deprecate": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "wide-align": {
+          "version": "1.1.3",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "string-width": "^1.0.2 || 2"
+          }
+        },
+        "wrappy": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "yallist": {
+          "version": "3.0.3",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        }
+      }
+    },
+    "function-bind": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+      "dev": true
+    },
+    "functional-red-black-tree": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+      "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+      "dev": true
+    },
+    "get-caller-file": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
+      "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
+      "dev": true
+    },
+    "get-stream": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+      "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+      "dev": true,
+      "requires": {
+        "pump": "3.0.0"
+      }
+    },
+    "get-value": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+      "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+      "dev": true
+    },
+    "getpass": {
+      "version": "0.1.7",
+      "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+      "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+      "dev": true,
+      "requires": {
+        "assert-plus": "1.0.0"
+      }
+    },
+    "glob": {
+      "version": "7.1.3",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
+      "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+      "dev": true,
+      "requires": {
+        "fs.realpath": "1.0.0",
+        "inflight": "1.0.6",
+        "inherits": "2.0.3",
+        "minimatch": "3.0.4",
+        "once": "1.4.0",
+        "path-is-absolute": "1.0.1"
+      }
+    },
+    "glob-parent": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+      "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+      "dev": true,
+      "requires": {
+        "is-glob": "3.1.0",
+        "path-dirname": "1.0.2"
+      },
+      "dependencies": {
+        "is-glob": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+          "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+          "dev": true,
+          "requires": {
+            "is-extglob": "2.1.1"
+          }
+        }
+      }
+    },
+    "glob-to-regexp": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
+      "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
+      "dev": true
+    },
+    "globals": {
+      "version": "11.11.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz",
+      "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==",
+      "dev": true
+    },
+    "globby": {
+      "version": "9.0.0",
+      "resolved": "https://registry.npmjs.org/globby/-/globby-9.0.0.tgz",
+      "integrity": "sha512-q0qiO/p1w/yJ0hk8V9x1UXlgsXUxlGd0AHUOXZVXBO6aznDtpx7M8D1kBrCAItoPm+4l8r6ATXV1JpjY2SBQOw==",
+      "dev": true,
+      "requires": {
+        "array-union": "1.0.2",
+        "dir-glob": "2.2.2",
+        "fast-glob": "2.2.6",
+        "glob": "7.1.3",
+        "ignore": "4.0.6",
+        "pify": "4.0.1",
+        "slash": "2.0.0"
+      },
+      "dependencies": {
+        "ignore": {
+          "version": "4.0.6",
+          "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+          "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+          "dev": true
+        },
+        "pify": {
+          "version": "4.0.1",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+          "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+          "dev": true
+        }
+      }
+    },
+    "graceful-fs": {
+      "version": "4.1.15",
+      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
+      "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
+      "dev": true
+    },
+    "gzip-size": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.0.0.tgz",
+      "integrity": "sha512-5iI7omclyqrnWw4XbXAmGhPsABkSIDQonv2K0h61lybgofWa6iZyvrI3r2zsJH4P8Nb64fFVzlvfhs0g7BBxAA==",
+      "dev": true,
+      "requires": {
+        "duplexer": "0.1.1",
+        "pify": "3.0.0"
+      }
+    },
+    "handle-thing": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz",
+      "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==",
+      "dev": true
+    },
+    "har-schema": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+      "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
+      "dev": true
+    },
+    "har-validator": {
+      "version": "5.1.3",
+      "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
+      "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
+      "dev": true,
+      "requires": {
+        "ajv": "6.9.1",
+        "har-schema": "2.0.0"
+      }
+    },
+    "has": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+      "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+      "dev": true,
+      "requires": {
+        "function-bind": "1.1.1"
+      }
+    },
+    "has-ansi": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+      "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+      "dev": true,
+      "requires": {
+        "ansi-regex": "2.1.1"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+          "dev": true
+        }
+      }
+    },
+    "has-flag": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+      "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+      "dev": true
+    },
+    "has-symbols": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz",
+      "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=",
+      "dev": true
+    },
+    "has-value": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+      "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+      "dev": true,
+      "requires": {
+        "get-value": "2.0.6",
+        "has-values": "1.0.0",
+        "isobject": "3.0.1"
+      }
+    },
+    "has-values": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+      "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+      "dev": true,
+      "requires": {
+        "is-number": "3.0.0",
+        "kind-of": "4.0.0"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+          "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "1.1.6"
+          }
+        }
+      }
+    },
+    "hash-base": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
+      "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
+      "dev": true,
+      "requires": {
+        "inherits": "2.0.3",
+        "safe-buffer": "5.1.2"
+      }
+    },
+    "hash-sum": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz",
+      "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=",
+      "dev": true
+    },
+    "hash.js": {
+      "version": "1.1.7",
+      "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
+      "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
+      "dev": true,
+      "requires": {
+        "inherits": "2.0.3",
+        "minimalistic-assert": "1.0.1"
+      }
+    },
+    "he": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+      "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
+      "dev": true
+    },
+    "hex-color-regex": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz",
+      "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==",
+      "dev": true
+    },
+    "hmac-drbg": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+      "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
+      "dev": true,
+      "requires": {
+        "hash.js": "1.1.7",
+        "minimalistic-assert": "1.0.1",
+        "minimalistic-crypto-utils": "1.0.1"
+      }
+    },
+    "hoek": {
+      "version": "6.1.2",
+      "resolved": "https://registry.npmjs.org/hoek/-/hoek-6.1.2.tgz",
+      "integrity": "sha512-6qhh/wahGYZHFSFw12tBbJw5fsAhhwrrG/y3Cs0YMTv2WzMnL0oLPnQJjv1QJvEfylRSOFuP+xCu+tdx0tD16Q==",
+      "dev": true
+    },
+    "hoopy": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz",
+      "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==",
+      "dev": true
+    },
+    "hosted-git-info": {
+      "version": "2.7.1",
+      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
+      "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==",
+      "dev": true
+    },
+    "hpack.js": {
+      "version": "2.1.6",
+      "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz",
+      "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=",
+      "dev": true,
+      "requires": {
+        "inherits": "2.0.3",
+        "obuf": "1.1.2",
+        "readable-stream": "2.3.6",
+        "wbuf": "1.7.3"
+      }
+    },
+    "hsl-regex": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz",
+      "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=",
+      "dev": true
+    },
+    "hsla-regex": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz",
+      "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=",
+      "dev": true
+    },
+    "html-comment-regex": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz",
+      "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==",
+      "dev": true
+    },
+    "html-entities": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz",
+      "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=",
+      "dev": true
+    },
+    "html-minifier": {
+      "version": "3.5.21",
+      "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz",
+      "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==",
+      "dev": true,
+      "requires": {
+        "camel-case": "3.0.0",
+        "clean-css": "4.2.1",
+        "commander": "2.17.1",
+        "he": "1.2.0",
+        "param-case": "2.1.1",
+        "relateurl": "0.2.7",
+        "uglify-js": "3.4.9"
+      }
+    },
+    "html-tags": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz",
+      "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=",
+      "dev": true
+    },
+    "html-webpack-plugin": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz",
+      "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=",
+      "dev": true,
+      "requires": {
+        "html-minifier": "3.5.21",
+        "loader-utils": "0.2.17",
+        "lodash": "4.17.11",
+        "pretty-error": "2.1.1",
+        "tapable": "1.1.1",
+        "toposort": "1.0.7",
+        "util.promisify": "1.0.0"
+      },
+      "dependencies": {
+        "big.js": {
+          "version": "3.2.0",
+          "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz",
+          "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==",
+          "dev": true
+        },
+        "json5": {
+          "version": "0.5.1",
+          "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
+          "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
+          "dev": true
+        },
+        "loader-utils": {
+          "version": "0.2.17",
+          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz",
+          "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
+          "dev": true,
+          "requires": {
+            "big.js": "3.2.0",
+            "emojis-list": "2.1.0",
+            "json5": "0.5.1",
+            "object-assign": "4.1.1"
+          }
+        }
+      }
+    },
+    "htmlparser2": {
+      "version": "3.10.1",
+      "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
+      "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
+      "dev": true,
+      "requires": {
+        "domelementtype": "1.3.1",
+        "domhandler": "2.4.2",
+        "domutils": "1.7.0",
+        "entities": "1.1.2",
+        "inherits": "2.0.3",
+        "readable-stream": "3.1.1"
+      },
+      "dependencies": {
+        "readable-stream": {
+          "version": "3.1.1",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.1.1.tgz",
+          "integrity": "sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA==",
+          "dev": true,
+          "requires": {
+            "inherits": "2.0.3",
+            "string_decoder": "1.1.1",
+            "util-deprecate": "1.0.2"
+          }
+        }
+      }
+    },
+    "http-deceiver": {
+      "version": "1.2.7",
+      "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz",
+      "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=",
+      "dev": true
+    },
+    "http-errors": {
+      "version": "1.6.3",
+      "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
+      "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
+      "dev": true,
+      "requires": {
+        "depd": "1.1.2",
+        "inherits": "2.0.3",
+        "setprototypeof": "1.1.0",
+        "statuses": "1.4.0"
+      }
+    },
+    "http-parser-js": {
+      "version": "0.5.0",
+      "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.0.tgz",
+      "integrity": "sha512-cZdEF7r4gfRIq7ezX9J0T+kQmJNOub71dWbgAXVHDct80TKP4MCETtZQ31xyv38UwgzkWPYF/Xc0ge55dW9Z9w==",
+      "dev": true
+    },
+    "http-proxy": {
+      "version": "1.17.0",
+      "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz",
+      "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==",
+      "dev": true,
+      "requires": {
+        "eventemitter3": "3.1.0",
+        "follow-redirects": "1.7.0",
+        "requires-port": "1.0.0"
+      }
+    },
+    "http-proxy-middleware": {
+      "version": "0.19.1",
+      "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz",
+      "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==",
+      "dev": true,
+      "requires": {
+        "http-proxy": "1.17.0",
+        "is-glob": "4.0.0",
+        "lodash": "4.17.11",
+        "micromatch": "3.1.10"
+      }
+    },
+    "http-signature": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+      "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+      "dev": true,
+      "requires": {
+        "assert-plus": "1.0.0",
+        "jsprim": "1.4.1",
+        "sshpk": "1.16.1"
+      }
+    },
+    "https-browserify": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
+      "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
+      "dev": true
+    },
+    "iconv-lite": {
+      "version": "0.4.24",
+      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+      "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+      "dev": true,
+      "requires": {
+        "safer-buffer": "2.1.2"
+      }
+    },
+    "icss-replace-symbols": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz",
+      "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=",
+      "dev": true
+    },
+    "icss-utils": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz",
+      "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=",
+      "dev": true,
+      "requires": {
+        "postcss": "6.0.23"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "6.0.23",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
+          "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
+          "dev": true,
+          "requires": {
+            "chalk": "2.4.2",
+            "source-map": "0.6.1",
+            "supports-color": "5.5.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        }
+      }
+    },
+    "idb-connector": {
+      "version": "1.1.8",
+      "resolved": "https://registry.npmjs.org/idb-connector/-/idb-connector-1.1.8.tgz",
+      "integrity": "sha512-x+NIYJYmBnmFSbALM0GniG6idlEx3z+wnWqe+nKn948+sjY3TRzMmdG2ZqcBrlV/AsOTl3CidCIgdqRnxL1jiA==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "node-addon-api": "1.6.2",
+        "node-pre-gyp": "0.11.0"
+      },
+      "dependencies": {
+        "abbrev": {
+          "version": "1.1.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "ansi-regex": {
+          "version": "2.1.1",
+          "bundled": true,
+          "dev": true
+        },
+        "aproba": {
+          "version": "1.2.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "are-we-there-yet": {
+          "version": "1.1.5",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "delegates": "1.0.0",
+            "readable-stream": "2.3.6"
+          }
+        },
+        "balanced-match": {
+          "version": "1.0.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "brace-expansion": {
+          "version": "1.1.11",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "balanced-match": "^1.0.0",
+            "concat-map": "0.0.1"
+          }
+        },
+        "chownr": {
+          "version": "1.1.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "code-point-at": {
+          "version": "1.1.0",
+          "bundled": true,
+          "dev": true
+        },
+        "concat-map": {
+          "version": "0.0.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "console-control-strings": {
+          "version": "1.1.0",
+          "bundled": true,
+          "dev": true
+        },
+        "core-util-is": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "debug": {
+          "version": "2.6.9",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "deep-extend": {
+          "version": "0.6.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "delegates": {
+          "version": "1.0.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "detect-libc": {
+          "version": "1.0.3",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "fs-minipass": {
+          "version": "1.2.5",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "minipass": "2.3.5"
+          }
+        },
+        "fs.realpath": {
+          "version": "1.0.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "gauge": {
+          "version": "2.7.4",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "aproba": "1.2.0",
+            "console-control-strings": "1.1.0",
+            "has-unicode": "2.0.1",
+            "object-assign": "4.1.1",
+            "signal-exit": "3.0.2",
+            "string-width": "1.0.2",
+            "strip-ansi": "3.0.1",
+            "wide-align": "1.1.3"
+          }
+        },
+        "glob": {
+          "version": "7.1.3",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "fs.realpath": "1.0.0",
+            "inflight": "1.0.6",
+            "inherits": "2.0.3",
+            "minimatch": "3.0.4",
+            "once": "1.4.0",
+            "path-is-absolute": "1.0.1"
+          }
+        },
+        "has-unicode": {
+          "version": "2.0.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "iconv-lite": {
+          "version": "0.4.24",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "safer-buffer": "2.1.2"
+          }
+        },
+        "ignore-walk": {
+          "version": "3.0.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "minimatch": "^3.0.4"
+          }
+        },
+        "inflight": {
+          "version": "1.0.6",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "once": "1.4.0",
+            "wrappy": "1.0.2"
+          }
+        },
+        "inherits": {
+          "version": "2.0.3",
+          "bundled": true,
+          "dev": true
+        },
+        "ini": {
+          "version": "1.3.5",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "is-fullwidth-code-point": {
+          "version": "1.0.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "number-is-nan": "1.0.1"
+          }
+        },
+        "isarray": {
+          "version": "1.0.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "minimatch": {
+          "version": "3.0.4",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "brace-expansion": "^1.1.7"
+          }
+        },
+        "minimist": {
+          "version": "0.0.8",
+          "bundled": true,
+          "dev": true
+        },
+        "minipass": {
+          "version": "2.3.5",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "safe-buffer": "5.1.2",
+            "yallist": "3.0.3"
+          }
+        },
+        "minizlib": {
+          "version": "1.2.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "minipass": "2.3.5"
+          }
+        },
+        "mkdirp": {
+          "version": "0.5.1",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "minimist": "0.0.8"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "needle": {
+          "version": "2.2.4",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "debug": "2.6.9",
+            "iconv-lite": "0.4.24",
+            "sax": "1.2.4"
+          }
+        },
+        "node-pre-gyp": {
+          "version": "0.11.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "detect-libc": "1.0.3",
+            "mkdirp": "0.5.1",
+            "needle": "2.2.4",
+            "nopt": "4.0.1",
+            "npm-packlist": "1.2.0",
+            "npmlog": "4.1.2",
+            "rc": "1.2.8",
+            "rimraf": "2.6.3",
+            "semver": "5.6.0",
+            "tar": "4.4.8"
+          }
+        },
+        "nopt": {
+          "version": "4.0.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "abbrev": "1.1.1",
+            "osenv": "0.1.5"
+          }
+        },
+        "npm-bundled": {
+          "version": "1.0.5",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "npm-packlist": {
+          "version": "1.2.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "ignore-walk": "3.0.1",
+            "npm-bundled": "1.0.5"
+          }
+        },
+        "npmlog": {
+          "version": "4.1.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "are-we-there-yet": "1.1.5",
+            "console-control-strings": "1.1.0",
+            "gauge": "2.7.4",
+            "set-blocking": "2.0.0"
+          }
+        },
+        "number-is-nan": {
+          "version": "1.0.1",
+          "bundled": true,
+          "dev": true
+        },
+        "object-assign": {
+          "version": "4.1.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "once": {
+          "version": "1.4.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "wrappy": "1.0.2"
+          }
+        },
+        "os-homedir": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "os-tmpdir": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "osenv": {
+          "version": "0.1.5",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "os-homedir": "1.0.2",
+            "os-tmpdir": "1.0.2"
+          }
+        },
+        "path-is-absolute": {
+          "version": "1.0.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "process-nextick-args": {
+          "version": "2.0.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "rc": {
+          "version": "1.2.8",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "deep-extend": "0.6.0",
+            "ini": "1.3.5",
+            "minimist": "1.2.0",
+            "strip-json-comments": "2.0.1"
+          },
+          "dependencies": {
+            "minimist": {
+              "version": "1.2.0",
+              "bundled": true,
+              "dev": true,
+              "optional": true
+            }
+          }
+        },
+        "readable-stream": {
+          "version": "2.3.6",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "core-util-is": "1.0.2",
+            "inherits": "2.0.3",
+            "isarray": "1.0.0",
+            "process-nextick-args": "2.0.0",
+            "safe-buffer": "5.1.2",
+            "string_decoder": "1.1.1",
+            "util-deprecate": "1.0.2"
+          }
+        },
+        "rimraf": {
+          "version": "2.6.3",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "glob": "7.1.3"
+          }
+        },
+        "safe-buffer": {
+          "version": "5.1.2",
+          "bundled": true,
+          "dev": true
+        },
+        "safer-buffer": {
+          "version": "2.1.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "sax": {
+          "version": "1.2.4",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "semver": {
+          "version": "5.6.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "set-blocking": {
+          "version": "2.0.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "signal-exit": {
+          "version": "3.0.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "string-width": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "code-point-at": "1.1.0",
+            "is-fullwidth-code-point": "1.0.0",
+            "strip-ansi": "3.0.1"
+          }
+        },
+        "string_decoder": {
+          "version": "1.1.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "safe-buffer": "5.1.2"
+          }
+        },
+        "strip-ansi": {
+          "version": "3.0.1",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "ansi-regex": "2.1.1"
+          }
+        },
+        "strip-json-comments": {
+          "version": "2.0.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "tar": {
+          "version": "4.4.8",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "chownr": "1.1.1",
+            "fs-minipass": "1.2.5",
+            "minipass": "2.3.5",
+            "minizlib": "1.2.1",
+            "mkdirp": "0.5.1",
+            "safe-buffer": "5.1.2",
+            "yallist": "3.0.3"
+          }
+        },
+        "util-deprecate": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "wide-align": {
+          "version": "1.1.3",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "string-width": "1.0.2"
+          }
+        },
+        "wrappy": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true
+        },
+        "yallist": {
+          "version": "3.0.3",
+          "bundled": true,
+          "dev": true
+        }
+      }
+    },
+    "ieee754": {
+      "version": "1.1.12",
+      "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz",
+      "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==",
+      "dev": true
+    },
+    "iferr": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
+      "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=",
+      "dev": true
+    },
+    "ignore": {
+      "version": "3.3.10",
+      "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz",
+      "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==",
+      "dev": true
+    },
+    "import-cwd": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz",
+      "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=",
+      "dev": true,
+      "requires": {
+        "import-from": "2.1.0"
+      }
+    },
+    "import-fresh": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz",
+      "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
+      "dev": true,
+      "requires": {
+        "caller-path": "2.0.0",
+        "resolve-from": "3.0.0"
+      },
+      "dependencies": {
+        "caller-path": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz",
+          "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=",
+          "dev": true,
+          "requires": {
+            "caller-callsite": "2.0.0"
+          }
+        },
+        "resolve-from": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
+          "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
+          "dev": true
+        }
+      }
+    },
+    "import-from": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz",
+      "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=",
+      "dev": true,
+      "requires": {
+        "resolve-from": "3.0.0"
+      },
+      "dependencies": {
+        "resolve-from": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
+          "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
+          "dev": true
+        }
+      }
+    },
+    "import-local": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz",
+      "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==",
+      "dev": true,
+      "requires": {
+        "pkg-dir": "3.0.0",
+        "resolve-cwd": "2.0.0"
+      }
+    },
+    "imurmurhash": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+      "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+      "dev": true
+    },
+    "indexes-of": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz",
+      "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=",
+      "dev": true
+    },
+    "indexof": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
+      "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=",
+      "dev": true
+    },
+    "inflight": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+      "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+      "dev": true,
+      "requires": {
+        "once": "1.4.0",
+        "wrappy": "1.0.2"
+      }
+    },
+    "inherits": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+      "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+      "dev": true
+    },
+    "inquirer": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz",
+      "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "ansi-escapes": "3.2.0",
+        "chalk": "2.4.2",
+        "cli-cursor": "2.1.0",
+        "cli-width": "2.2.0",
+        "external-editor": "2.2.0",
+        "figures": "2.0.0",
+        "lodash": "4.17.11",
+        "mute-stream": "0.0.7",
+        "run-async": "2.3.0",
+        "rx-lite": "4.0.8",
+        "rx-lite-aggregates": "4.0.8",
+        "string-width": "2.1.1",
+        "strip-ansi": "4.0.0",
+        "through": "2.3.8"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+          "dev": true,
+          "optional": true
+        },
+        "strip-ansi": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+          "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "ansi-regex": "3.0.0"
+          }
+        }
+      }
+    },
+    "internal-ip": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.1.0.tgz",
+      "integrity": "sha512-vMbCq5+5xM6cQ5Zpzw2fPirS3uOAabk0ep+plu8P659c7XuvaVN3G//utF0AWboZIKKL5YDpti7PO51m/wfomw==",
+      "dev": true,
+      "requires": {
+        "default-gateway": "3.1.0",
+        "ipaddr.js": "1.9.0"
+      },
+      "dependencies": {
+        "ipaddr.js": {
+          "version": "1.9.0",
+          "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz",
+          "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==",
+          "dev": true
+        }
+      }
+    },
+    "invariant": {
+      "version": "2.2.4",
+      "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+      "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+      "dev": true,
+      "requires": {
+        "loose-envify": "1.4.0"
+      }
+    },
+    "invert-kv": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz",
+      "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==",
+      "dev": true
+    },
+    "ip": {
+      "version": "1.1.5",
+      "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
+      "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=",
+      "dev": true
+    },
+    "ip-regex": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz",
+      "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=",
+      "dev": true
+    },
+    "ipaddr.js": {
+      "version": "1.8.0",
+      "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz",
+      "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=",
+      "dev": true
+    },
+    "is-absolute-url": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz",
+      "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=",
+      "dev": true
+    },
+    "is-accessor-descriptor": {
+      "version": "0.1.6",
+      "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+      "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+      "dev": true,
+      "requires": {
+        "kind-of": "3.2.2"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "1.1.6"
+          }
+        }
+      }
+    },
+    "is-arrayish": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+      "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+      "dev": true
+    },
+    "is-binary-path": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
+      "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+      "dev": true,
+      "requires": {
+        "binary-extensions": "1.13.0"
+      }
+    },
+    "is-buffer": {
+      "version": "1.1.6",
+      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
+    },
+    "is-callable": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz",
+      "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==",
+      "dev": true
+    },
+    "is-ci": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz",
+      "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==",
+      "dev": true,
+      "requires": {
+        "ci-info": "1.6.0"
+      }
+    },
+    "is-color-stop": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz",
+      "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=",
+      "dev": true,
+      "requires": {
+        "css-color-names": "0.0.4",
+        "hex-color-regex": "1.1.0",
+        "hsl-regex": "1.0.0",
+        "hsla-regex": "1.0.0",
+        "rgb-regex": "1.0.1",
+        "rgba-regex": "1.0.0"
+      }
+    },
+    "is-data-descriptor": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+      "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+      "dev": true,
+      "requires": {
+        "kind-of": "3.2.2"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "1.1.6"
+          }
+        }
+      }
+    },
+    "is-date-object": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
+      "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=",
+      "dev": true
+    },
+    "is-descriptor": {
+      "version": "0.1.6",
+      "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+      "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+      "dev": true,
+      "requires": {
+        "is-accessor-descriptor": "0.1.6",
+        "is-data-descriptor": "0.1.4",
+        "kind-of": "5.1.0"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+          "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+          "dev": true
+        }
+      }
+    },
+    "is-directory": {
+      "version": "0.3.1",
+      "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
+      "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=",
+      "dev": true
+    },
+    "is-extendable": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+      "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+      "dev": true
+    },
+    "is-extglob": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+      "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+      "dev": true
+    },
+    "is-fullwidth-code-point": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+      "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+      "dev": true
+    },
+    "is-glob": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+      "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+      "dev": true,
+      "requires": {
+        "is-extglob": "2.1.1"
+      }
+    },
+    "is-number": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+      "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+      "dev": true,
+      "requires": {
+        "kind-of": "3.2.2"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "1.1.6"
+          }
+        }
+      }
+    },
+    "is-obj": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
+      "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
+      "dev": true
+    },
+    "is-path-cwd": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
+      "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=",
+      "dev": true
+    },
+    "is-path-in-cwd": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz",
+      "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==",
+      "dev": true,
+      "requires": {
+        "is-path-inside": "1.0.1"
+      }
+    },
+    "is-path-inside": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
+      "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
+      "dev": true,
+      "requires": {
+        "path-is-inside": "1.0.2"
+      }
+    },
+    "is-plain-object": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+      "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+      "dev": true,
+      "requires": {
+        "isobject": "3.0.1"
+      }
+    },
+    "is-promise": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
+      "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
+      "dev": true
+    },
+    "is-regex": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
+      "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
+      "dev": true,
+      "requires": {
+        "has": "1.0.3"
+      }
+    },
+    "is-resolvable": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
+      "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
+      "dev": true
+    },
+    "is-stream": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+      "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+      "dev": true
+    },
+    "is-svg": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz",
+      "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==",
+      "dev": true,
+      "requires": {
+        "html-comment-regex": "1.1.2"
+      }
+    },
+    "is-symbol": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz",
+      "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==",
+      "dev": true,
+      "requires": {
+        "has-symbols": "1.0.0"
+      }
+    },
+    "is-typedarray": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+      "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+      "dev": true
+    },
+    "is-windows": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+      "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+      "dev": true
+    },
+    "is-wsl": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
+      "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
+      "dev": true
+    },
+    "isarray": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+      "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+      "dev": true
+    },
+    "isemail": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz",
+      "integrity": "sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==",
+      "dev": true,
+      "requires": {
+        "punycode": "2.1.1"
+      }
+    },
+    "isexe": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+      "dev": true
+    },
+    "isobject": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+      "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+      "dev": true
+    },
+    "isstream": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+      "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+      "dev": true
+    },
+    "javascript-stringify": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-1.6.0.tgz",
+      "integrity": "sha1-FC0RHzpuPa6PSpr9d9RYVbWpzOM=",
+      "dev": true
+    },
+    "joi": {
+      "version": "14.3.1",
+      "resolved": "https://registry.npmjs.org/joi/-/joi-14.3.1.tgz",
+      "integrity": "sha512-LQDdM+pkOrpAn4Lp+neNIFV3axv1Vna3j38bisbQhETPMANYRbFJFUyOZcOClYvM/hppMhGWuKSFEK9vjrB+bQ==",
+      "dev": true,
+      "requires": {
+        "hoek": "6.1.2",
+        "isemail": "3.2.0",
+        "topo": "3.0.3"
+      }
+    },
+    "js-levenshtein": {
+      "version": "1.1.6",
+      "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz",
+      "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==",
+      "dev": true
+    },
+    "js-message": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/js-message/-/js-message-1.0.5.tgz",
+      "integrity": "sha1-IwDSSxrwjondCVvBpMnJz8uJLRU=",
+      "dev": true
+    },
+    "js-queue": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/js-queue/-/js-queue-2.0.0.tgz",
+      "integrity": "sha1-NiITz4YPRo8BJfxslqvBdCUx+Ug=",
+      "dev": true,
+      "requires": {
+        "easy-stack": "1.0.0"
+      }
+    },
+    "js-tokens": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+      "dev": true
+    },
+    "js-yaml": {
+      "version": "3.12.1",
+      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.1.tgz",
+      "integrity": "sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==",
+      "dev": true,
+      "requires": {
+        "argparse": "1.0.10",
+        "esprima": "4.0.1"
+      }
+    },
+    "jsbn": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+      "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+      "dev": true
+    },
+    "jsesc": {
+      "version": "2.5.2",
+      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+      "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+      "dev": true
+    },
+    "json-parse-better-errors": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+      "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
+      "dev": true
+    },
+    "json-schema": {
+      "version": "0.2.3",
+      "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+      "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+      "dev": true
+    },
+    "json-schema-traverse": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+      "dev": true
+    },
+    "json-stable-stringify-without-jsonify": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+      "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+      "dev": true
+    },
+    "json-stringify-safe": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+      "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+      "dev": true
+    },
+    "json3": {
+      "version": "3.3.2",
+      "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz",
+      "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=",
+      "dev": true
+    },
+    "json5": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz",
+      "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==",
+      "dev": true,
+      "requires": {
+        "minimist": "1.2.0"
+      }
+    },
+    "jsonfile": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+      "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "4.1.15"
+      }
+    },
+    "jsonify": {
+      "version": "0.0.0",
+      "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
+      "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
+      "dev": true
+    },
+    "jsprim": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+      "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+      "dev": true,
+      "requires": {
+        "assert-plus": "1.0.0",
+        "extsprintf": "1.3.0",
+        "json-schema": "0.2.3",
+        "verror": "1.10.0"
+      }
+    },
+    "killable": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz",
+      "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==",
+      "dev": true
+    },
+    "kind-of": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+      "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+      "dev": true
+    },
+    "launch-editor": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.2.1.tgz",
+      "integrity": "sha512-On+V7K2uZK6wK7x691ycSUbLD/FyKKelArkbaAMSSJU8JmqmhwN2+mnJDNINuJWSrh2L0kDk+ZQtbC/gOWUwLw==",
+      "dev": true,
+      "requires": {
+        "chalk": "2.4.2",
+        "shell-quote": "1.6.1"
+      }
+    },
+    "launch-editor-middleware": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/launch-editor-middleware/-/launch-editor-middleware-2.2.1.tgz",
+      "integrity": "sha512-s0UO2/gEGiCgei3/2UN3SMuUj1phjQN8lcpnvgLSz26fAzNWPQ6Nf/kF5IFClnfU2ehp6LrmKdMU/beveO+2jg==",
+      "dev": true,
+      "requires": {
+        "launch-editor": "2.2.1"
+      }
+    },
+    "lcid": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz",
+      "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==",
+      "dev": true,
+      "requires": {
+        "invert-kv": "2.0.0"
+      }
+    },
+    "levn": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+      "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+      "dev": true,
+      "requires": {
+        "prelude-ls": "1.1.2",
+        "type-check": "0.3.2"
+      }
+    },
+    "loader-fs-cache": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.1.tgz",
+      "integrity": "sha1-VuC/CL2XCLJqdltoUJhAyN7J/bw=",
+      "dev": true,
+      "requires": {
+        "find-cache-dir": "0.1.1",
+        "mkdirp": "0.5.1"
+      },
+      "dependencies": {
+        "find-cache-dir": {
+          "version": "0.1.1",
+          "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz",
+          "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=",
+          "dev": true,
+          "requires": {
+            "commondir": "1.0.1",
+            "mkdirp": "0.5.1",
+            "pkg-dir": "1.0.0"
+          }
+        },
+        "find-up": {
+          "version": "1.1.2",
+          "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+          "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+          "dev": true,
+          "requires": {
+            "path-exists": "2.1.0",
+            "pinkie-promise": "2.0.1"
+          }
+        },
+        "path-exists": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+          "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+          "dev": true,
+          "requires": {
+            "pinkie-promise": "2.0.1"
+          }
+        },
+        "pkg-dir": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz",
+          "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=",
+          "dev": true,
+          "requires": {
+            "find-up": "1.1.2"
+          }
+        }
+      }
+    },
+    "loader-runner": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz",
+      "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==",
+      "dev": true
+    },
+    "loader-utils": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
+      "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
+      "dev": true,
+      "requires": {
+        "big.js": "5.2.2",
+        "emojis-list": "2.1.0",
+        "json5": "1.0.1"
+      },
+      "dependencies": {
+        "json5": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+          "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
+          "dev": true,
+          "requires": {
+            "minimist": "1.2.0"
+          }
+        }
+      }
+    },
+    "locate-path": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+      "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+      "dev": true,
+      "requires": {
+        "p-locate": "3.0.0",
+        "path-exists": "3.0.0"
+      }
+    },
+    "lodash": {
+      "version": "4.17.11",
+      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
+      "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
+      "dev": true
+    },
+    "lodash.defaultsdeep": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.0.tgz",
+      "integrity": "sha1-vsECT4WxvZbL6kBbI8FK1kQ6b4E=",
+      "dev": true
+    },
+    "lodash.get": {
+      "version": "4.4.2",
+      "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
+      "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
+      "dev": true
+    },
+    "lodash.kebabcase": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz",
+      "integrity": "sha1-hImxyw0p/4gZXM7KRI/21swpXDY=",
+      "dev": true
+    },
+    "lodash.mapvalues": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz",
+      "integrity": "sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=",
+      "dev": true
+    },
+    "lodash.memoize": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
+      "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
+      "dev": true
+    },
+    "lodash.transform": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/lodash.transform/-/lodash.transform-4.6.0.tgz",
+      "integrity": "sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A=",
+      "dev": true
+    },
+    "lodash.uniq": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
+      "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=",
+      "dev": true
+    },
+    "log-symbols": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
+      "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
+      "dev": true,
+      "requires": {
+        "chalk": "2.4.2"
+      }
+    },
+    "loglevel": {
+      "version": "1.6.1",
+      "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.1.tgz",
+      "integrity": "sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=",
+      "dev": true
+    },
+    "loose-envify": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+      "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+      "dev": true,
+      "requires": {
+        "js-tokens": "4.0.0"
+      }
+    },
+    "lower-case": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz",
+      "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=",
+      "dev": true
+    },
+    "lru-cache": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+      "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+      "dev": true,
+      "requires": {
+        "yallist": "3.0.3"
+      }
+    },
+    "make-dir": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
+      "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
+      "dev": true,
+      "requires": {
+        "pify": "3.0.0"
+      }
+    },
+    "map-age-cleaner": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
+      "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==",
+      "dev": true,
+      "requires": {
+        "p-defer": "1.0.0"
+      }
+    },
+    "map-cache": {
+      "version": "0.2.2",
+      "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+      "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+      "dev": true
+    },
+    "map-visit": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+      "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+      "dev": true,
+      "requires": {
+        "object-visit": "1.0.1"
+      }
+    },
+    "md5.js": {
+      "version": "1.3.5",
+      "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
+      "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
+      "dev": true,
+      "requires": {
+        "hash-base": "3.0.4",
+        "inherits": "2.0.3",
+        "safe-buffer": "5.1.2"
+      }
+    },
+    "mdn-data": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz",
+      "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==",
+      "dev": true
+    },
+    "media-typer": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+      "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
+      "dev": true
+    },
+    "mem": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/mem/-/mem-4.1.0.tgz",
+      "integrity": "sha512-I5u6Q1x7wxO0kdOpYBB28xueHADYps5uty/zg936CiG8NTe5sJL8EjrCuLneuDW3PlMdZBGDIn8BirEVdovZvg==",
+      "dev": true,
+      "requires": {
+        "map-age-cleaner": "0.1.3",
+        "mimic-fn": "1.2.0",
+        "p-is-promise": "2.0.0"
+      }
+    },
+    "memory-fs": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
+      "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
+      "dev": true,
+      "requires": {
+        "errno": "0.1.7",
+        "readable-stream": "2.3.6"
+      }
+    },
+    "merge-descriptors": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+      "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
+      "dev": true
+    },
+    "merge-source-map": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz",
+      "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==",
+      "dev": true,
+      "requires": {
+        "source-map": "0.6.1"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        }
+      }
+    },
+    "merge2": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz",
+      "integrity": "sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==",
+      "dev": true
+    },
+    "methods": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+      "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
+      "dev": true
+    },
+    "micromatch": {
+      "version": "3.1.10",
+      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+      "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+      "dev": true,
+      "requires": {
+        "arr-diff": "4.0.0",
+        "array-unique": "0.3.2",
+        "braces": "2.3.2",
+        "define-property": "2.0.2",
+        "extend-shallow": "3.0.2",
+        "extglob": "2.0.4",
+        "fragment-cache": "0.2.1",
+        "kind-of": "6.0.2",
+        "nanomatch": "1.2.13",
+        "object.pick": "1.3.0",
+        "regex-not": "1.0.2",
+        "snapdragon": "0.8.2",
+        "to-regex": "3.0.2"
+      }
+    },
+    "miller-rabin": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
+      "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
+      "dev": true,
+      "requires": {
+        "bn.js": "4.11.8",
+        "brorand": "1.1.0"
+      }
+    },
+    "mime": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz",
+      "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==",
+      "dev": true
+    },
+    "mime-db": {
+      "version": "1.38.0",
+      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz",
+      "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==",
+      "dev": true
+    },
+    "mime-types": {
+      "version": "2.1.22",
+      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz",
+      "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==",
+      "dev": true,
+      "requires": {
+        "mime-db": "1.38.0"
+      }
+    },
+    "mimic-fn": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+      "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
+      "dev": true
+    },
+    "mini-css-extract-plugin": {
+      "version": "0.5.0",
+      "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.5.0.tgz",
+      "integrity": "sha512-IuaLjruM0vMKhUUT51fQdQzBYTX49dLj8w68ALEAe2A4iYNpIC4eMac67mt3NzycvjOlf07/kYxJDc0RTl1Wqw==",
+      "dev": true,
+      "requires": {
+        "loader-utils": "1.2.3",
+        "schema-utils": "1.0.0",
+        "webpack-sources": "1.3.0"
+      },
+      "dependencies": {
+        "schema-utils": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+          "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+          "dev": true,
+          "requires": {
+            "ajv": "6.9.1",
+            "ajv-errors": "1.0.1",
+            "ajv-keywords": "3.4.0"
+          }
+        }
+      }
+    },
+    "minimalistic-assert": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+      "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
+      "dev": true
+    },
+    "minimalistic-crypto-utils": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
+      "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
+      "dev": true
+    },
+    "minimatch": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+      "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+      "dev": true,
+      "requires": {
+        "brace-expansion": "1.1.11"
+      }
+    },
+    "minimist": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+      "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+      "dev": true
+    },
+    "mississippi": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
+      "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==",
+      "dev": true,
+      "requires": {
+        "concat-stream": "1.6.2",
+        "duplexify": "3.7.1",
+        "end-of-stream": "1.4.1",
+        "flush-write-stream": "1.1.1",
+        "from2": "2.3.0",
+        "parallel-transform": "1.1.0",
+        "pump": "3.0.0",
+        "pumpify": "1.5.1",
+        "stream-each": "1.2.3",
+        "through2": "2.0.5"
+      }
+    },
+    "mixin-deep": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+      "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+      "dev": true,
+      "requires": {
+        "for-in": "1.0.2",
+        "is-extendable": "1.0.1"
+      },
+      "dependencies": {
+        "is-extendable": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+          "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+          "dev": true,
+          "requires": {
+            "is-plain-object": "2.0.4"
+          }
+        }
+      }
+    },
+    "mkdirp": {
+      "version": "0.5.1",
+      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+      "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+      "dev": true,
+      "requires": {
+        "minimist": "0.0.8"
+      },
+      "dependencies": {
+        "minimist": {
+          "version": "0.0.8",
+          "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+          "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+          "dev": true
+        }
+      }
+    },
+    "move-concurrently": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
+      "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
+      "dev": true,
+      "requires": {
+        "aproba": "1.2.0",
+        "copy-concurrently": "1.0.5",
+        "fs-write-stream-atomic": "1.0.10",
+        "mkdirp": "0.5.1",
+        "rimraf": "2.6.3",
+        "run-queue": "1.0.3"
+      }
+    },
+    "ms": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+      "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
+    },
+    "multicast-dns": {
+      "version": "6.2.3",
+      "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz",
+      "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==",
+      "dev": true,
+      "requires": {
+        "dns-packet": "1.3.1",
+        "thunky": "1.0.3"
+      }
+    },
+    "multicast-dns-service-types": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz",
+      "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=",
+      "dev": true
+    },
+    "mute-stream": {
+      "version": "0.0.7",
+      "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+      "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
+      "dev": true
+    },
+    "nan": {
+      "version": "2.12.1",
+      "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz",
+      "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==",
+      "dev": true,
+      "optional": true
+    },
+    "nanomatch": {
+      "version": "1.2.13",
+      "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+      "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
+      "dev": true,
+      "requires": {
+        "arr-diff": "4.0.0",
+        "array-unique": "0.3.2",
+        "define-property": "2.0.2",
+        "extend-shallow": "3.0.2",
+        "fragment-cache": "0.2.1",
+        "is-windows": "1.0.2",
+        "kind-of": "6.0.2",
+        "object.pick": "1.3.0",
+        "regex-not": "1.0.2",
+        "snapdragon": "0.8.2",
+        "to-regex": "3.0.2"
+      }
+    },
+    "natural-compare": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+      "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+      "dev": true
+    },
+    "negotiator": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
+      "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=",
+      "dev": true
+    },
+    "neo-async": {
+      "version": "2.6.0",
+      "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz",
+      "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==",
+      "dev": true
+    },
+    "nice-try": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+      "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
+      "dev": true
+    },
+    "no-case": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz",
+      "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==",
+      "dev": true,
+      "requires": {
+        "lower-case": "1.1.4"
+      }
+    },
+    "node-addon-api": {
+      "version": "1.6.2",
+      "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.6.2.tgz",
+      "integrity": "sha512-479Bjw9nTE5DdBSZZWprFryHGjUaQC31y1wHo19We/k0BZlrmhqQitWoUL0cD8+scljCbIUL+E58oRDEakdGGA==",
+      "dev": true,
+      "optional": true
+    },
+    "node-forge": {
+      "version": "0.7.5",
+      "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz",
+      "integrity": "sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ==",
+      "dev": true
+    },
+    "node-ipc": {
+      "version": "9.1.1",
+      "resolved": "https://registry.npmjs.org/node-ipc/-/node-ipc-9.1.1.tgz",
+      "integrity": "sha512-FAyICv0sIRJxVp3GW5fzgaf9jwwRQxAKDJlmNFUL5hOy+W4X/I5AypyHoq0DXXbo9o/gt79gj++4cMr4jVWE/w==",
+      "dev": true,
+      "requires": {
+        "event-pubsub": "4.3.0",
+        "js-message": "1.0.5",
+        "js-queue": "2.0.0"
+      }
+    },
+    "node-libs-browser": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.0.tgz",
+      "integrity": "sha512-5MQunG/oyOaBdttrL40dA7bUfPORLRWMUJLQtMg7nluxUvk5XwnLdL9twQHFAjRx/y7mIMkLKT9++qPbbk6BZA==",
+      "dev": true,
+      "requires": {
+        "assert": "1.4.1",
+        "browserify-zlib": "0.2.0",
+        "buffer": "4.9.1",
+        "console-browserify": "1.1.0",
+        "constants-browserify": "1.0.0",
+        "crypto-browserify": "3.12.0",
+        "domain-browser": "1.2.0",
+        "events": "3.0.0",
+        "https-browserify": "1.0.0",
+        "os-browserify": "0.3.0",
+        "path-browserify": "0.0.0",
+        "process": "0.11.10",
+        "punycode": "1.4.1",
+        "querystring-es3": "0.2.1",
+        "readable-stream": "2.3.6",
+        "stream-browserify": "2.0.2",
+        "stream-http": "2.8.3",
+        "string_decoder": "1.1.1",
+        "timers-browserify": "2.0.10",
+        "tty-browserify": "0.0.0",
+        "url": "0.11.0",
+        "util": "0.11.1",
+        "vm-browserify": "0.0.4"
+      },
+      "dependencies": {
+        "punycode": {
+          "version": "1.4.1",
+          "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+          "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+          "dev": true
+        }
+      }
+    },
+    "node-releases": {
+      "version": "1.1.8",
+      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.8.tgz",
+      "integrity": "sha512-gQm+K9mGCiT/NXHy+V/ZZS1N/LOaGGqRAAJJs3X9Ah1g+CIbRcBgNyoNYQ+SEtcyAtB9KqDruu+fF7nWjsqRaA==",
+      "dev": true,
+      "requires": {
+        "semver": "5.6.0"
+      }
+    },
+    "normalize-package-data": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+      "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+      "dev": true,
+      "requires": {
+        "hosted-git-info": "2.7.1",
+        "resolve": "1.10.0",
+        "semver": "5.6.0",
+        "validate-npm-package-license": "3.0.4"
+      }
+    },
+    "normalize-path": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+      "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+      "dev": true
+    },
+    "normalize-range": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+      "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
+      "dev": true
+    },
+    "normalize-url": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz",
+      "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==",
+      "dev": true
+    },
+    "npm-run-path": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+      "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+      "dev": true,
+      "requires": {
+        "path-key": "2.0.1"
+      }
+    },
+    "nth-check": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz",
+      "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==",
+      "dev": true,
+      "requires": {
+        "boolbase": "1.0.0"
+      }
+    },
+    "num2fraction": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
+      "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=",
+      "dev": true
+    },
+    "number-is-nan": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+      "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+      "dev": true
+    },
+    "oauth-sign": {
+      "version": "0.9.0",
+      "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+      "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
+      "dev": true
+    },
+    "object-assign": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+      "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+      "dev": true
+    },
+    "object-copy": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+      "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+      "dev": true,
+      "requires": {
+        "copy-descriptor": "0.1.1",
+        "define-property": "0.2.5",
+        "kind-of": "3.2.2"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "0.1.6"
+          }
+        },
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "1.1.6"
+          }
+        }
+      }
+    },
+    "object-hash": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz",
+      "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==",
+      "dev": true
+    },
+    "object-keys": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz",
+      "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==",
+      "dev": true
+    },
+    "object-visit": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+      "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+      "dev": true,
+      "requires": {
+        "isobject": "3.0.1"
+      }
+    },
+    "object.assign": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
+      "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
+      "dev": true,
+      "requires": {
+        "define-properties": "1.1.3",
+        "function-bind": "1.1.1",
+        "has-symbols": "1.0.0",
+        "object-keys": "1.1.0"
+      }
+    },
+    "object.getownpropertydescriptors": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz",
+      "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=",
+      "dev": true,
+      "requires": {
+        "define-properties": "1.1.3",
+        "es-abstract": "1.13.0"
+      }
+    },
+    "object.pick": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+      "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+      "dev": true,
+      "requires": {
+        "isobject": "3.0.1"
+      }
+    },
+    "object.values": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz",
+      "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==",
+      "dev": true,
+      "requires": {
+        "define-properties": "1.1.3",
+        "es-abstract": "1.13.0",
+        "function-bind": "1.1.1",
+        "has": "1.0.3"
+      }
+    },
+    "obuf": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
+      "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==",
+      "dev": true
+    },
+    "on-finished": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+      "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+      "dev": true,
+      "requires": {
+        "ee-first": "1.1.1"
+      }
+    },
+    "on-headers": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
+      "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
+      "dev": true
+    },
+    "once": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+      "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+      "dev": true,
+      "requires": {
+        "wrappy": "1.0.2"
+      }
+    },
+    "onetime": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+      "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+      "dev": true,
+      "requires": {
+        "mimic-fn": "1.2.0"
+      }
+    },
+    "opener": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz",
+      "integrity": "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==",
+      "dev": true
+    },
+    "opn": {
+      "version": "5.4.0",
+      "resolved": "https://registry.npmjs.org/opn/-/opn-5.4.0.tgz",
+      "integrity": "sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==",
+      "dev": true,
+      "requires": {
+        "is-wsl": "1.1.0"
+      }
+    },
+    "optionator": {
+      "version": "0.8.2",
+      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+      "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+      "dev": true,
+      "requires": {
+        "deep-is": "0.1.3",
+        "fast-levenshtein": "2.0.6",
+        "levn": "0.3.0",
+        "prelude-ls": "1.1.2",
+        "type-check": "0.3.2",
+        "wordwrap": "1.0.0"
+      }
+    },
+    "ora": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/ora/-/ora-3.1.0.tgz",
+      "integrity": "sha512-vRBPaNCclUi8pUxRF/G8+5qEQkc6EgzKK1G2ZNJUIGu088Un5qIxFXeDgymvPRM9nmrcUOGzQgS1Vmtz+NtlMw==",
+      "dev": true,
+      "requires": {
+        "chalk": "2.4.2",
+        "cli-cursor": "2.1.0",
+        "cli-spinners": "1.3.1",
+        "log-symbols": "2.2.0",
+        "strip-ansi": "5.0.0",
+        "wcwidth": "1.0.1"
+      }
+    },
+    "original": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz",
+      "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==",
+      "dev": true,
+      "requires": {
+        "url-parse": "1.4.4"
+      }
+    },
+    "os-browserify": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
+      "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
+      "dev": true
+    },
+    "os-locale": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz",
+      "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==",
+      "dev": true,
+      "requires": {
+        "execa": "1.0.0",
+        "lcid": "2.0.0",
+        "mem": "4.1.0"
+      }
+    },
+    "os-tmpdir": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+      "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+      "dev": true
+    },
+    "p-defer": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
+      "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=",
+      "dev": true
+    },
+    "p-finally": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+      "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
+      "dev": true
+    },
+    "p-is-promise": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.0.0.tgz",
+      "integrity": "sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg==",
+      "dev": true
+    },
+    "p-limit": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz",
+      "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==",
+      "dev": true,
+      "requires": {
+        "p-try": "2.0.0"
+      }
+    },
+    "p-locate": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+      "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+      "dev": true,
+      "requires": {
+        "p-limit": "2.1.0"
+      }
+    },
+    "p-map": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz",
+      "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==",
+      "dev": true
+    },
+    "p-try": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz",
+      "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==",
+      "dev": true
+    },
+    "pako": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.8.tgz",
+      "integrity": "sha512-6i0HVbUfcKaTv+EG8ZTr75az7GFXcLYk9UyLEg7Notv/Ma+z/UG3TCoz6GiNeOrn1E/e63I0X/Hpw18jHOTUnA==",
+      "dev": true
+    },
+    "parallel-transform": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz",
+      "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=",
+      "dev": true,
+      "requires": {
+        "cyclist": "0.2.2",
+        "inherits": "2.0.3",
+        "readable-stream": "2.3.6"
+      }
+    },
+    "param-case": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz",
+      "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=",
+      "dev": true,
+      "requires": {
+        "no-case": "2.3.2"
+      }
+    },
+    "parent-module": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.0.tgz",
+      "integrity": "sha512-8Mf5juOMmiE4FcmzYc4IaiS9L3+9paz2KOiXzkRviCP6aDmN49Hz6EMWz0lGNp9pX80GvvAuLADtyGfW/Em3TA==",
+      "dev": true,
+      "requires": {
+        "callsites": "3.0.0"
+      },
+      "dependencies": {
+        "callsites": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.0.0.tgz",
+          "integrity": "sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw==",
+          "dev": true
+        }
+      }
+    },
+    "parse-asn1": {
+      "version": "5.1.4",
+      "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz",
+      "integrity": "sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==",
+      "dev": true,
+      "requires": {
+        "asn1.js": "4.10.1",
+        "browserify-aes": "1.2.0",
+        "create-hash": "1.2.0",
+        "evp_bytestokey": "1.0.3",
+        "pbkdf2": "3.0.17",
+        "safe-buffer": "5.1.2"
+      }
+    },
+    "parse-json": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+      "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+      "dev": true,
+      "requires": {
+        "error-ex": "1.3.2",
+        "json-parse-better-errors": "1.0.2"
+      }
+    },
+    "parseurl": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
+      "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=",
+      "dev": true
+    },
+    "pascalcase": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+      "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+      "dev": true
+    },
+    "path-browserify": {
+      "version": "0.0.0",
+      "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz",
+      "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=",
+      "dev": true
+    },
+    "path-dirname": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+      "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+      "dev": true
+    },
+    "path-exists": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+      "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+      "dev": true
+    },
+    "path-is-absolute": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+      "dev": true
+    },
+    "path-is-inside": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+      "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+      "dev": true
+    },
+    "path-key": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+      "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+      "dev": true
+    },
+    "path-parse": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+      "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
+      "dev": true
+    },
+    "path-to-regexp": {
+      "version": "0.1.7",
+      "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
+      "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
+      "dev": true
+    },
+    "path-type": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
+      "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
+      "dev": true,
+      "requires": {
+        "pify": "3.0.0"
+      }
+    },
+    "pbkdf2": {
+      "version": "3.0.17",
+      "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz",
+      "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==",
+      "dev": true,
+      "requires": {
+        "create-hash": "1.2.0",
+        "create-hmac": "1.1.7",
+        "ripemd160": "2.0.2",
+        "safe-buffer": "5.1.2",
+        "sha.js": "2.4.11"
+      }
+    },
+    "performance-now": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+      "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
+      "dev": true
+    },
+    "pify": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+      "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+      "dev": true
+    },
+    "pinkie": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+      "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+      "dev": true
+    },
+    "pinkie-promise": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+      "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+      "dev": true,
+      "requires": {
+        "pinkie": "2.0.4"
+      }
+    },
+    "pkg-dir": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
+      "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
+      "dev": true,
+      "requires": {
+        "find-up": "3.0.0"
+      }
+    },
+    "pluralize": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz",
+      "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==",
+      "dev": true,
+      "optional": true
+    },
+    "portfinder": {
+      "version": "1.0.20",
+      "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.20.tgz",
+      "integrity": "sha512-Yxe4mTyDzTd59PZJY4ojZR8F+E5e97iq2ZOHPz3HDgSvYC5siNad2tLooQ5y5QHyQhc3xVqvyk/eNA3wuoa7Sw==",
+      "dev": true,
+      "requires": {
+        "async": "1.5.2",
+        "debug": "2.6.9",
+        "mkdirp": "0.5.1"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+          "dev": true
+        }
+      }
+    },
+    "posix-character-classes": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+      "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+      "dev": true
+    },
+    "postcss": {
+      "version": "7.0.14",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz",
+      "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==",
+      "dev": true,
+      "requires": {
+        "chalk": "2.4.2",
+        "source-map": "0.6.1",
+        "supports-color": "6.1.0"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "dev": true,
+          "requires": {
+            "has-flag": "3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-calc": {
+      "version": "7.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.1.tgz",
+      "integrity": "sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ==",
+      "dev": true,
+      "requires": {
+        "css-unit-converter": "1.1.1",
+        "postcss": "7.0.14",
+        "postcss-selector-parser": "5.0.0",
+        "postcss-value-parser": "3.3.1"
+      }
+    },
+    "postcss-colormin": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz",
+      "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==",
+      "dev": true,
+      "requires": {
+        "browserslist": "4.4.1",
+        "color": "3.1.0",
+        "has": "1.0.3",
+        "postcss": "7.0.14",
+        "postcss-value-parser": "3.3.1"
+      }
+    },
+    "postcss-convert-values": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz",
+      "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==",
+      "dev": true,
+      "requires": {
+        "postcss": "7.0.14",
+        "postcss-value-parser": "3.3.1"
+      }
+    },
+    "postcss-discard-comments": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz",
+      "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==",
+      "dev": true,
+      "requires": {
+        "postcss": "7.0.14"
+      }
+    },
+    "postcss-discard-duplicates": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz",
+      "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==",
+      "dev": true,
+      "requires": {
+        "postcss": "7.0.14"
+      }
+    },
+    "postcss-discard-empty": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz",
+      "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==",
+      "dev": true,
+      "requires": {
+        "postcss": "7.0.14"
+      }
+    },
+    "postcss-discard-overridden": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz",
+      "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==",
+      "dev": true,
+      "requires": {
+        "postcss": "7.0.14"
+      }
+    },
+    "postcss-load-config": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.0.0.tgz",
+      "integrity": "sha512-V5JBLzw406BB8UIfsAWSK2KSwIJ5yoEIVFb4gVkXci0QdKgA24jLmHZ/ghe/GgX0lJ0/D1uUK1ejhzEY94MChQ==",
+      "dev": true,
+      "requires": {
+        "cosmiconfig": "4.0.0",
+        "import-cwd": "2.1.0"
+      },
+      "dependencies": {
+        "cosmiconfig": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-4.0.0.tgz",
+          "integrity": "sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ==",
+          "dev": true,
+          "requires": {
+            "is-directory": "0.3.1",
+            "js-yaml": "3.12.1",
+            "parse-json": "4.0.0",
+            "require-from-string": "2.0.2"
+          }
+        }
+      }
+    },
+    "postcss-loader": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz",
+      "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==",
+      "dev": true,
+      "requires": {
+        "loader-utils": "1.2.3",
+        "postcss": "7.0.14",
+        "postcss-load-config": "2.0.0",
+        "schema-utils": "1.0.0"
+      },
+      "dependencies": {
+        "schema-utils": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+          "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+          "dev": true,
+          "requires": {
+            "ajv": "6.9.1",
+            "ajv-errors": "1.0.1",
+            "ajv-keywords": "3.4.0"
+          }
+        }
+      }
+    },
+    "postcss-merge-longhand": {
+      "version": "4.0.11",
+      "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz",
+      "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==",
+      "dev": true,
+      "requires": {
+        "css-color-names": "0.0.4",
+        "postcss": "7.0.14",
+        "postcss-value-parser": "3.3.1",
+        "stylehacks": "4.0.3"
+      }
+    },
+    "postcss-merge-rules": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz",
+      "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==",
+      "dev": true,
+      "requires": {
+        "browserslist": "4.4.1",
+        "caniuse-api": "3.0.0",
+        "cssnano-util-same-parent": "4.0.1",
+        "postcss": "7.0.14",
+        "postcss-selector-parser": "3.1.1",
+        "vendors": "1.0.2"
+      },
+      "dependencies": {
+        "postcss-selector-parser": {
+          "version": "3.1.1",
+          "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz",
+          "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=",
+          "dev": true,
+          "requires": {
+            "dot-prop": "4.2.0",
+            "indexes-of": "1.0.1",
+            "uniq": "1.0.1"
+          }
+        }
+      }
+    },
+    "postcss-minify-font-values": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz",
+      "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==",
+      "dev": true,
+      "requires": {
+        "postcss": "7.0.14",
+        "postcss-value-parser": "3.3.1"
+      }
+    },
+    "postcss-minify-gradients": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz",
+      "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==",
+      "dev": true,
+      "requires": {
+        "cssnano-util-get-arguments": "4.0.0",
+        "is-color-stop": "1.1.0",
+        "postcss": "7.0.14",
+        "postcss-value-parser": "3.3.1"
+      }
+    },
+    "postcss-minify-params": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz",
+      "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==",
+      "dev": true,
+      "requires": {
+        "alphanum-sort": "1.0.2",
+        "browserslist": "4.4.1",
+        "cssnano-util-get-arguments": "4.0.0",
+        "postcss": "7.0.14",
+        "postcss-value-parser": "3.3.1",
+        "uniqs": "2.0.0"
+      }
+    },
+    "postcss-minify-selectors": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz",
+      "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==",
+      "dev": true,
+      "requires": {
+        "alphanum-sort": "1.0.2",
+        "has": "1.0.3",
+        "postcss": "7.0.14",
+        "postcss-selector-parser": "3.1.1"
+      },
+      "dependencies": {
+        "postcss-selector-parser": {
+          "version": "3.1.1",
+          "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz",
+          "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=",
+          "dev": true,
+          "requires": {
+            "dot-prop": "4.2.0",
+            "indexes-of": "1.0.1",
+            "uniq": "1.0.1"
+          }
+        }
+      }
+    },
+    "postcss-modules-extract-imports": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz",
+      "integrity": "sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw==",
+      "dev": true,
+      "requires": {
+        "postcss": "6.0.23"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "6.0.23",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
+          "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
+          "dev": true,
+          "requires": {
+            "chalk": "2.4.2",
+            "source-map": "0.6.1",
+            "supports-color": "5.5.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        }
+      }
+    },
+    "postcss-modules-local-by-default": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz",
+      "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=",
+      "dev": true,
+      "requires": {
+        "css-selector-tokenizer": "0.7.1",
+        "postcss": "6.0.23"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "6.0.23",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
+          "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
+          "dev": true,
+          "requires": {
+            "chalk": "2.4.2",
+            "source-map": "0.6.1",
+            "supports-color": "5.5.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        }
+      }
+    },
+    "postcss-modules-scope": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz",
+      "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=",
+      "dev": true,
+      "requires": {
+        "css-selector-tokenizer": "0.7.1",
+        "postcss": "6.0.23"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "6.0.23",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
+          "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
+          "dev": true,
+          "requires": {
+            "chalk": "2.4.2",
+            "source-map": "0.6.1",
+            "supports-color": "5.5.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        }
+      }
+    },
+    "postcss-modules-values": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz",
+      "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=",
+      "dev": true,
+      "requires": {
+        "icss-replace-symbols": "1.1.0",
+        "postcss": "6.0.23"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "6.0.23",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
+          "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
+          "dev": true,
+          "requires": {
+            "chalk": "2.4.2",
+            "source-map": "0.6.1",
+            "supports-color": "5.5.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        }
+      }
+    },
+    "postcss-normalize-charset": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz",
+      "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==",
+      "dev": true,
+      "requires": {
+        "postcss": "7.0.14"
+      }
+    },
+    "postcss-normalize-display-values": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz",
+      "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==",
+      "dev": true,
+      "requires": {
+        "cssnano-util-get-match": "4.0.0",
+        "postcss": "7.0.14",
+        "postcss-value-parser": "3.3.1"
+      }
+    },
+    "postcss-normalize-positions": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz",
+      "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==",
+      "dev": true,
+      "requires": {
+        "cssnano-util-get-arguments": "4.0.0",
+        "has": "1.0.3",
+        "postcss": "7.0.14",
+        "postcss-value-parser": "3.3.1"
+      }
+    },
+    "postcss-normalize-repeat-style": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz",
+      "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==",
+      "dev": true,
+      "requires": {
+        "cssnano-util-get-arguments": "4.0.0",
+        "cssnano-util-get-match": "4.0.0",
+        "postcss": "7.0.14",
+        "postcss-value-parser": "3.3.1"
+      }
+    },
+    "postcss-normalize-string": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz",
+      "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==",
+      "dev": true,
+      "requires": {
+        "has": "1.0.3",
+        "postcss": "7.0.14",
+        "postcss-value-parser": "3.3.1"
+      }
+    },
+    "postcss-normalize-timing-functions": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz",
+      "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==",
+      "dev": true,
+      "requires": {
+        "cssnano-util-get-match": "4.0.0",
+        "postcss": "7.0.14",
+        "postcss-value-parser": "3.3.1"
+      }
+    },
+    "postcss-normalize-unicode": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz",
+      "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==",
+      "dev": true,
+      "requires": {
+        "browserslist": "4.4.1",
+        "postcss": "7.0.14",
+        "postcss-value-parser": "3.3.1"
+      }
+    },
+    "postcss-normalize-url": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz",
+      "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==",
+      "dev": true,
+      "requires": {
+        "is-absolute-url": "2.1.0",
+        "normalize-url": "3.3.0",
+        "postcss": "7.0.14",
+        "postcss-value-parser": "3.3.1"
+      }
+    },
+    "postcss-normalize-whitespace": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz",
+      "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==",
+      "dev": true,
+      "requires": {
+        "postcss": "7.0.14",
+        "postcss-value-parser": "3.3.1"
+      }
+    },
+    "postcss-ordered-values": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz",
+      "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==",
+      "dev": true,
+      "requires": {
+        "cssnano-util-get-arguments": "4.0.0",
+        "postcss": "7.0.14",
+        "postcss-value-parser": "3.3.1"
+      }
+    },
+    "postcss-reduce-initial": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz",
+      "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==",
+      "dev": true,
+      "requires": {
+        "browserslist": "4.4.1",
+        "caniuse-api": "3.0.0",
+        "has": "1.0.3",
+        "postcss": "7.0.14"
+      }
+    },
+    "postcss-reduce-transforms": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz",
+      "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==",
+      "dev": true,
+      "requires": {
+        "cssnano-util-get-match": "4.0.0",
+        "has": "1.0.3",
+        "postcss": "7.0.14",
+        "postcss-value-parser": "3.3.1"
+      }
+    },
+    "postcss-selector-parser": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz",
+      "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==",
+      "dev": true,
+      "requires": {
+        "cssesc": "2.0.0",
+        "indexes-of": "1.0.1",
+        "uniq": "1.0.1"
+      }
+    },
+    "postcss-svgo": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz",
+      "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==",
+      "dev": true,
+      "requires": {
+        "is-svg": "3.0.0",
+        "postcss": "7.0.14",
+        "postcss-value-parser": "3.3.1",
+        "svgo": "1.1.1"
+      }
+    },
+    "postcss-unique-selectors": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz",
+      "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==",
+      "dev": true,
+      "requires": {
+        "alphanum-sort": "1.0.2",
+        "postcss": "7.0.14",
+        "uniqs": "2.0.0"
+      }
+    },
+    "postcss-value-parser": {
+      "version": "3.3.1",
+      "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+      "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+      "dev": true
+    },
+    "prelude-ls": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+      "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+      "dev": true
+    },
+    "prettier": {
+      "version": "1.16.3",
+      "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.3.tgz",
+      "integrity": "sha512-kn/GU6SMRYPxUakNXhpP0EedT/KmaPzr0H5lIsDogrykbaxOpOfAFfk5XA7DZrJyMAv1wlMV3CPcZruGXVVUZw==",
+      "dev": true
+    },
+    "pretty-error": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz",
+      "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=",
+      "dev": true,
+      "requires": {
+        "renderkid": "2.0.3",
+        "utila": "0.4.0"
+      }
+    },
+    "private": {
+      "version": "0.1.8",
+      "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
+      "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
+      "dev": true
+    },
+    "process": {
+      "version": "0.11.10",
+      "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+      "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
+      "dev": true
+    },
+    "process-nextick-args": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+      "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+      "dev": true
+    },
+    "progress": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+      "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
+      "dev": true
+    },
+    "promise-inflight": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
+      "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
+      "dev": true
+    },
+    "proxy-addr": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz",
+      "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==",
+      "dev": true,
+      "requires": {
+        "forwarded": "0.1.2",
+        "ipaddr.js": "1.8.0"
+      }
+    },
+    "prr": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
+      "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
+      "dev": true
+    },
+    "pseudomap": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+      "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+      "dev": true
+    },
+    "psl": {
+      "version": "1.1.31",
+      "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz",
+      "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==",
+      "dev": true
+    },
+    "public-encrypt": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
+      "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
+      "dev": true,
+      "requires": {
+        "bn.js": "4.11.8",
+        "browserify-rsa": "4.0.1",
+        "create-hash": "1.2.0",
+        "parse-asn1": "5.1.4",
+        "randombytes": "2.1.0",
+        "safe-buffer": "5.1.2"
+      }
+    },
+    "pump": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+      "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+      "dev": true,
+      "requires": {
+        "end-of-stream": "1.4.1",
+        "once": "1.4.0"
+      }
+    },
+    "pumpify": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
+      "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
+      "dev": true,
+      "requires": {
+        "duplexify": "3.7.1",
+        "inherits": "2.0.3",
+        "pump": "2.0.1"
+      },
+      "dependencies": {
+        "pump": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
+          "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
+          "dev": true,
+          "requires": {
+            "end-of-stream": "1.4.1",
+            "once": "1.4.0"
+          }
+        }
+      }
+    },
+    "punycode": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+      "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+      "dev": true
+    },
+    "q": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+      "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
+      "dev": true
+    },
+    "qs": {
+      "version": "6.5.2",
+      "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+      "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
+      "dev": true
+    },
+    "querystring": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
+      "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
+      "dev": true
+    },
+    "querystring-es3": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
+      "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
+      "dev": true
+    },
+    "querystringify": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.0.tgz",
+      "integrity": "sha512-sluvZZ1YiTLD5jsqZcDmFyV2EwToyXZBfpoVOmktMmW+VEnhgakFHnasVph65fOjGPTWN0Nw3+XQaSeMayr0kg==",
+      "dev": true
+    },
+    "randombytes": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+      "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+      "dev": true,
+      "requires": {
+        "safe-buffer": "5.1.2"
+      }
+    },
+    "randomfill": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
+      "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
+      "dev": true,
+      "requires": {
+        "randombytes": "2.1.0",
+        "safe-buffer": "5.1.2"
+      }
+    },
+    "range-parser": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
+      "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=",
+      "dev": true
+    },
+    "raw-body": {
+      "version": "2.3.3",
+      "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz",
+      "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==",
+      "dev": true,
+      "requires": {
+        "bytes": "3.0.0",
+        "http-errors": "1.6.3",
+        "iconv-lite": "0.4.23",
+        "unpipe": "1.0.0"
+      },
+      "dependencies": {
+        "iconv-lite": {
+          "version": "0.4.23",
+          "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
+          "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
+          "dev": true,
+          "requires": {
+            "safer-buffer": "2.1.2"
+          }
+        }
+      }
+    },
+    "read-pkg": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz",
+      "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=",
+      "dev": true,
+      "requires": {
+        "normalize-package-data": "2.5.0",
+        "parse-json": "4.0.0",
+        "pify": "3.0.0"
+      }
+    },
+    "readable-stream": {
+      "version": "2.3.6",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+      "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+      "dev": true,
+      "requires": {
+        "core-util-is": "1.0.2",
+        "inherits": "2.0.3",
+        "isarray": "1.0.0",
+        "process-nextick-args": "2.0.0",
+        "safe-buffer": "5.1.2",
+        "string_decoder": "1.1.1",
+        "util-deprecate": "1.0.2"
+      }
+    },
+    "readdirp": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
+      "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "4.1.15",
+        "micromatch": "3.1.10",
+        "readable-stream": "2.3.6"
+      }
+    },
+    "regenerate": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
+      "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==",
+      "dev": true
+    },
+    "regenerate-unicode-properties": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz",
+      "integrity": "sha512-s5NGghCE4itSlUS+0WUj88G6cfMVMmH8boTPNvABf8od+2dhT9WDlWu8n01raQAJZMOK8Ch6jSexaRO7swd6aw==",
+      "dev": true,
+      "requires": {
+        "regenerate": "1.4.0"
+      }
+    },
+    "regenerator-runtime": {
+      "version": "0.12.1",
+      "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz",
+      "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==",
+      "dev": true
+    },
+    "regenerator-transform": {
+      "version": "0.13.4",
+      "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.13.4.tgz",
+      "integrity": "sha512-T0QMBjK3J0MtxjPmdIMXm72Wvj2Abb0Bd4HADdfijwMdoIsyQZ6fWC7kDFhk2YinBBEMZDL7Y7wh0J1sGx3S4A==",
+      "dev": true,
+      "requires": {
+        "private": "0.1.8"
+      }
+    },
+    "regex-not": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+      "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+      "dev": true,
+      "requires": {
+        "extend-shallow": "3.0.2",
+        "safe-regex": "1.1.0"
+      }
+    },
+    "regexp-tree": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.5.tgz",
+      "integrity": "sha512-nUmxvfJyAODw+0B13hj8CFVAxhe7fDEAgJgaotBu3nnR+IgGgZq59YedJP5VYTlkEfqjuK6TuRpnymKdatLZfQ==",
+      "dev": true
+    },
+    "regexpp": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz",
+      "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==",
+      "dev": true,
+      "optional": true
+    },
+    "regexpu-core": {
+      "version": "4.4.0",
+      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.4.0.tgz",
+      "integrity": "sha512-eDDWElbwwI3K0Lo6CqbQbA6FwgtCz4kYTarrri1okfkRLZAqstU+B3voZBCjg8Fl6iq0gXrJG6MvRgLthfvgOA==",
+      "dev": true,
+      "requires": {
+        "regenerate": "1.4.0",
+        "regenerate-unicode-properties": "7.0.0",
+        "regjsgen": "0.5.0",
+        "regjsparser": "0.6.0",
+        "unicode-match-property-ecmascript": "1.0.4",
+        "unicode-match-property-value-ecmascript": "1.0.2"
+      }
+    },
+    "regjsgen": {
+      "version": "0.5.0",
+      "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz",
+      "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==",
+      "dev": true
+    },
+    "regjsparser": {
+      "version": "0.6.0",
+      "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz",
+      "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==",
+      "dev": true,
+      "requires": {
+        "jsesc": "0.5.0"
+      },
+      "dependencies": {
+        "jsesc": {
+          "version": "0.5.0",
+          "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+          "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
+          "dev": true
+        }
+      }
+    },
+    "relateurl": {
+      "version": "0.2.7",
+      "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz",
+      "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=",
+      "dev": true
+    },
+    "remove-trailing-separator": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+      "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
+      "dev": true
+    },
+    "renderkid": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.3.tgz",
+      "integrity": "sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==",
+      "dev": true,
+      "requires": {
+        "css-select": "1.2.0",
+        "dom-converter": "0.2.0",
+        "htmlparser2": "3.10.1",
+        "strip-ansi": "3.0.1",
+        "utila": "0.4.0"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+          "dev": true
+        },
+        "css-select": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
+          "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
+          "dev": true,
+          "requires": {
+            "boolbase": "1.0.0",
+            "css-what": "2.1.3",
+            "domutils": "1.5.1",
+            "nth-check": "1.0.2"
+          }
+        },
+        "domutils": {
+          "version": "1.5.1",
+          "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
+          "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
+          "dev": true,
+          "requires": {
+            "dom-serializer": "0.1.1",
+            "domelementtype": "1.3.1"
+          }
+        },
+        "strip-ansi": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "2.1.1"
+          }
+        }
+      }
+    },
+    "repeat-element": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
+      "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
+      "dev": true
+    },
+    "repeat-string": {
+      "version": "1.6.1",
+      "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+      "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+      "dev": true
+    },
+    "request": {
+      "version": "2.88.0",
+      "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
+      "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
+      "dev": true,
+      "requires": {
+        "aws-sign2": "0.7.0",
+        "aws4": "1.8.0",
+        "caseless": "0.12.0",
+        "combined-stream": "1.0.7",
+        "extend": "3.0.2",
+        "forever-agent": "0.6.1",
+        "form-data": "2.3.3",
+        "har-validator": "5.1.3",
+        "http-signature": "1.2.0",
+        "is-typedarray": "1.0.0",
+        "isstream": "0.1.2",
+        "json-stringify-safe": "5.0.1",
+        "mime-types": "2.1.22",
+        "oauth-sign": "0.9.0",
+        "performance-now": "2.1.0",
+        "qs": "6.5.2",
+        "safe-buffer": "5.1.2",
+        "tough-cookie": "2.4.3",
+        "tunnel-agent": "0.6.0",
+        "uuid": "3.3.2"
+      }
+    },
+    "request-promise-core": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz",
+      "integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==",
+      "dev": true,
+      "requires": {
+        "lodash": "4.17.11"
+      }
+    },
+    "request-promise-native": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.7.tgz",
+      "integrity": "sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==",
+      "dev": true,
+      "requires": {
+        "request-promise-core": "1.1.2",
+        "stealthy-require": "1.1.1",
+        "tough-cookie": "2.4.3"
+      }
+    },
+    "require-directory": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+      "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+      "dev": true
+    },
+    "require-from-string": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
+      "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+      "dev": true
+    },
+    "require-main-filename": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
+      "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
+      "dev": true
+    },
+    "require-uncached": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
+      "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "caller-path": "0.1.0",
+        "resolve-from": "1.0.1"
+      }
+    },
+    "requires-port": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+      "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
+      "dev": true
+    },
+    "resolve": {
+      "version": "1.10.0",
+      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz",
+      "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==",
+      "dev": true,
+      "requires": {
+        "path-parse": "1.0.6"
+      }
+    },
+    "resolve-cwd": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz",
+      "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=",
+      "dev": true,
+      "requires": {
+        "resolve-from": "3.0.0"
+      },
+      "dependencies": {
+        "resolve-from": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
+          "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
+          "dev": true
+        }
+      }
+    },
+    "resolve-from": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
+      "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=",
+      "dev": true,
+      "optional": true
+    },
+    "resolve-url": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+      "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+      "dev": true
+    },
+    "restore-cursor": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+      "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+      "dev": true,
+      "requires": {
+        "onetime": "2.0.1",
+        "signal-exit": "3.0.2"
+      }
+    },
+    "ret": {
+      "version": "0.1.15",
+      "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+      "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+      "dev": true
+    },
+    "rgb-regex": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz",
+      "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=",
+      "dev": true
+    },
+    "rgba-regex": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz",
+      "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=",
+      "dev": true
+    },
+    "rimraf": {
+      "version": "2.6.3",
+      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
+      "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+      "dev": true,
+      "requires": {
+        "glob": "7.1.3"
+      }
+    },
+    "ripemd160": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
+      "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
+      "dev": true,
+      "requires": {
+        "hash-base": "3.0.4",
+        "inherits": "2.0.3"
+      }
+    },
+    "run-async": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
+      "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
+      "dev": true,
+      "requires": {
+        "is-promise": "2.1.0"
+      }
+    },
+    "run-queue": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
+      "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
+      "dev": true,
+      "requires": {
+        "aproba": "1.2.0"
+      }
+    },
+    "rx-lite": {
+      "version": "4.0.8",
+      "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz",
+      "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=",
+      "dev": true
+    },
+    "rx-lite-aggregates": {
+      "version": "4.0.8",
+      "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz",
+      "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "rx-lite": "4.0.8"
+      }
+    },
+    "rxjs": {
+      "version": "6.4.0",
+      "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz",
+      "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==",
+      "dev": true,
+      "requires": {
+        "tslib": "1.9.3"
+      }
+    },
+    "safe-buffer": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+      "dev": true
+    },
+    "safe-regex": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+      "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+      "dev": true,
+      "requires": {
+        "ret": "0.1.15"
+      }
+    },
+    "safer-buffer": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+      "dev": true
+    },
+    "sax": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+      "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
+      "dev": true
+    },
+    "schema-utils": {
+      "version": "0.4.7",
+      "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz",
+      "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==",
+      "dev": true,
+      "requires": {
+        "ajv": "6.9.1",
+        "ajv-keywords": "3.4.0"
+      }
+    },
+    "select-hose": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
+      "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=",
+      "dev": true
+    },
+    "selfsigned": {
+      "version": "1.10.4",
+      "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.4.tgz",
+      "integrity": "sha512-9AukTiDmHXGXWtWjembZ5NDmVvP2695EtpgbCsxCa68w3c88B+alqbmZ4O3hZ4VWGXeGWzEVdvqgAJD8DQPCDw==",
+      "dev": true,
+      "requires": {
+        "node-forge": "0.7.5"
+      }
+    },
+    "semver": {
+      "version": "5.6.0",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
+      "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
+      "dev": true
+    },
+    "send": {
+      "version": "0.16.2",
+      "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
+      "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
+      "dev": true,
+      "requires": {
+        "debug": "2.6.9",
+        "depd": "1.1.2",
+        "destroy": "1.0.4",
+        "encodeurl": "1.0.2",
+        "escape-html": "1.0.3",
+        "etag": "1.8.1",
+        "fresh": "0.5.2",
+        "http-errors": "1.6.3",
+        "mime": "1.4.1",
+        "ms": "2.0.0",
+        "on-finished": "2.3.0",
+        "range-parser": "1.2.0",
+        "statuses": "1.4.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "mime": {
+          "version": "1.4.1",
+          "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
+          "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==",
+          "dev": true
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+          "dev": true
+        }
+      }
+    },
+    "serialize-javascript": {
+      "version": "1.6.1",
+      "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.6.1.tgz",
+      "integrity": "sha512-A5MOagrPFga4YaKQSWHryl7AXvbQkEqpw4NNYMTNYUNV51bA8ABHgYFpqKx+YFFrw59xMV1qGH1R4AgoNIVgCw==",
+      "dev": true
+    },
+    "serve-index": {
+      "version": "1.9.1",
+      "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
+      "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=",
+      "dev": true,
+      "requires": {
+        "accepts": "1.3.5",
+        "batch": "0.6.1",
+        "debug": "2.6.9",
+        "escape-html": "1.0.3",
+        "http-errors": "1.6.3",
+        "mime-types": "2.1.22",
+        "parseurl": "1.3.2"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+          "dev": true
+        }
+      }
+    },
+    "serve-static": {
+      "version": "1.13.2",
+      "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
+      "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
+      "dev": true,
+      "requires": {
+        "encodeurl": "1.0.2",
+        "escape-html": "1.0.3",
+        "parseurl": "1.3.2",
+        "send": "0.16.2"
+      }
+    },
+    "set-blocking": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+      "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+      "dev": true
+    },
+    "set-value": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+      "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+      "dev": true,
+      "requires": {
+        "extend-shallow": "2.0.1",
+        "is-extendable": "0.1.1",
+        "is-plain-object": "2.0.4",
+        "split-string": "3.1.0"
+      },
+      "dependencies": {
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "0.1.1"
+          }
+        }
+      }
+    },
+    "setimmediate": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+      "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=",
+      "dev": true
+    },
+    "setprototypeof": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
+      "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
+      "dev": true
+    },
+    "sha.js": {
+      "version": "2.4.11",
+      "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
+      "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
+      "dev": true,
+      "requires": {
+        "inherits": "2.0.3",
+        "safe-buffer": "5.1.2"
+      }
+    },
+    "shebang-command": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+      "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+      "dev": true,
+      "requires": {
+        "shebang-regex": "1.0.0"
+      }
+    },
+    "shebang-regex": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+      "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+      "dev": true
+    },
+    "shell-quote": {
+      "version": "1.6.1",
+      "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz",
+      "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=",
+      "dev": true,
+      "requires": {
+        "array-filter": "0.0.1",
+        "array-map": "0.0.0",
+        "array-reduce": "0.0.0",
+        "jsonify": "0.0.0"
+      }
+    },
+    "signal-exit": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+      "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+      "dev": true
+    },
+    "simple-swizzle": {
+      "version": "0.2.2",
+      "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
+      "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=",
+      "dev": true,
+      "requires": {
+        "is-arrayish": "0.3.2"
+      },
+      "dependencies": {
+        "is-arrayish": {
+          "version": "0.3.2",
+          "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
+          "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
+          "dev": true
+        }
+      }
+    },
+    "slash": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
+      "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
+      "dev": true
+    },
+    "slice-ansi": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz",
+      "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "is-fullwidth-code-point": "2.0.0"
+      }
+    },
+    "snapdragon": {
+      "version": "0.8.2",
+      "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+      "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+      "dev": true,
+      "requires": {
+        "base": "0.11.2",
+        "debug": "2.6.9",
+        "define-property": "0.2.5",
+        "extend-shallow": "2.0.1",
+        "map-cache": "0.2.2",
+        "source-map": "0.5.7",
+        "source-map-resolve": "0.5.2",
+        "use": "3.1.1"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "0.1.6"
+          }
+        },
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "0.1.1"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+          "dev": true
+        }
+      }
+    },
+    "snapdragon-node": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+      "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+      "dev": true,
+      "requires": {
+        "define-property": "1.0.0",
+        "isobject": "3.0.1",
+        "snapdragon-util": "3.0.1"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "1.0.2"
+          }
+        },
+        "is-accessor-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+          "dev": true,
+          "requires": {
+            "kind-of": "6.0.2"
+          }
+        },
+        "is-data-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+          "dev": true,
+          "requires": {
+            "kind-of": "6.0.2"
+          }
+        },
+        "is-descriptor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+          "dev": true,
+          "requires": {
+            "is-accessor-descriptor": "1.0.0",
+            "is-data-descriptor": "1.0.0",
+            "kind-of": "6.0.2"
+          }
+        }
+      }
+    },
+    "snapdragon-util": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+      "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+      "dev": true,
+      "requires": {
+        "kind-of": "3.2.2"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "1.1.6"
+          }
+        }
+      }
+    },
+    "sockjs": {
+      "version": "0.3.19",
+      "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz",
+      "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==",
+      "dev": true,
+      "requires": {
+        "faye-websocket": "0.10.0",
+        "uuid": "3.3.2"
+      }
+    },
+    "sockjs-client": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.3.0.tgz",
+      "integrity": "sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg==",
+      "dev": true,
+      "requires": {
+        "debug": "3.2.6",
+        "eventsource": "1.0.7",
+        "faye-websocket": "0.11.1",
+        "inherits": "2.0.3",
+        "json3": "3.3.2",
+        "url-parse": "1.4.4"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.2.6",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+          "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+          "dev": true,
+          "requires": {
+            "ms": "2.1.1"
+          }
+        },
+        "faye-websocket": {
+          "version": "0.11.1",
+          "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz",
+          "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=",
+          "dev": true,
+          "requires": {
+            "websocket-driver": "0.7.0"
+          }
+        }
+      }
+    },
+    "source-list-map": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
+      "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==",
+      "dev": true
+    },
+    "source-map": {
+      "version": "0.5.7",
+      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+      "dev": true
+    },
+    "source-map-resolve": {
+      "version": "0.5.2",
+      "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
+      "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
+      "dev": true,
+      "requires": {
+        "atob": "2.1.2",
+        "decode-uri-component": "0.2.0",
+        "resolve-url": "0.2.1",
+        "source-map-url": "0.4.0",
+        "urix": "0.1.0"
+      }
+    },
+    "source-map-support": {
+      "version": "0.5.10",
+      "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.10.tgz",
+      "integrity": "sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==",
+      "dev": true,
+      "requires": {
+        "buffer-from": "1.1.1",
+        "source-map": "0.6.1"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        }
+      }
+    },
+    "source-map-url": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+      "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+      "dev": true
+    },
+    "spdx-correct": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
+      "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==",
+      "dev": true,
+      "requires": {
+        "spdx-expression-parse": "3.0.0",
+        "spdx-license-ids": "3.0.3"
+      }
+    },
+    "spdx-exceptions": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz",
+      "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==",
+      "dev": true
+    },
+    "spdx-expression-parse": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
+      "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
+      "dev": true,
+      "requires": {
+        "spdx-exceptions": "2.2.0",
+        "spdx-license-ids": "3.0.3"
+      }
+    },
+    "spdx-license-ids": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz",
+      "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==",
+      "dev": true
+    },
+    "spdy": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.0.tgz",
+      "integrity": "sha512-ot0oEGT/PGUpzf/6uk4AWLqkq+irlqHXkrdbk51oWONh3bxQmBuljxPNl66zlRRcIJStWq0QkLUCPOPjgjvU0Q==",
+      "dev": true,
+      "requires": {
+        "debug": "4.1.1",
+        "handle-thing": "2.0.0",
+        "http-deceiver": "1.2.7",
+        "select-hose": "2.0.0",
+        "spdy-transport": "3.0.0"
+      }
+    },
+    "spdy-transport": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz",
+      "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==",
+      "dev": true,
+      "requires": {
+        "debug": "4.1.1",
+        "detect-node": "2.0.4",
+        "hpack.js": "2.1.6",
+        "obuf": "1.1.2",
+        "readable-stream": "3.1.1",
+        "wbuf": "1.7.3"
+      },
+      "dependencies": {
+        "readable-stream": {
+          "version": "3.1.1",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.1.1.tgz",
+          "integrity": "sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA==",
+          "dev": true,
+          "requires": {
+            "inherits": "2.0.3",
+            "string_decoder": "1.1.1",
+            "util-deprecate": "1.0.2"
+          }
+        }
+      }
+    },
+    "split-string": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+      "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+      "dev": true,
+      "requires": {
+        "extend-shallow": "3.0.2"
+      }
+    },
+    "sprintf-js": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+      "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+      "dev": true
+    },
+    "sshpk": {
+      "version": "1.16.1",
+      "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
+      "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
+      "dev": true,
+      "requires": {
+        "asn1": "0.2.4",
+        "assert-plus": "1.0.0",
+        "bcrypt-pbkdf": "1.0.2",
+        "dashdash": "1.14.1",
+        "ecc-jsbn": "0.1.2",
+        "getpass": "0.1.7",
+        "jsbn": "0.1.1",
+        "safer-buffer": "2.1.2",
+        "tweetnacl": "0.14.5"
+      }
+    },
+    "ssri": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz",
+      "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==",
+      "dev": true,
+      "requires": {
+        "figgy-pudding": "3.5.1"
+      }
+    },
+    "stable": {
+      "version": "0.1.8",
+      "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
+      "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==",
+      "dev": true
+    },
+    "stackframe": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.0.4.tgz",
+      "integrity": "sha512-to7oADIniaYwS3MhtCa/sQhrxidCCQiF/qp4/m5iN3ipf0Y7Xlri0f6eG29r08aL7JYl8n32AF3Q5GYBZ7K8vw==",
+      "dev": true
+    },
+    "static-extend": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+      "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+      "dev": true,
+      "requires": {
+        "define-property": "0.2.5",
+        "object-copy": "0.1.0"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "0.1.6"
+          }
+        }
+      }
+    },
+    "statuses": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
+      "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==",
+      "dev": true
+    },
+    "stealthy-require": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz",
+      "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=",
+      "dev": true
+    },
+    "stream-browserify": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
+      "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
+      "dev": true,
+      "requires": {
+        "inherits": "2.0.3",
+        "readable-stream": "2.3.6"
+      }
+    },
+    "stream-each": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz",
+      "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==",
+      "dev": true,
+      "requires": {
+        "end-of-stream": "1.4.1",
+        "stream-shift": "1.0.0"
+      }
+    },
+    "stream-http": {
+      "version": "2.8.3",
+      "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
+      "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
+      "dev": true,
+      "requires": {
+        "builtin-status-codes": "3.0.0",
+        "inherits": "2.0.3",
+        "readable-stream": "2.3.6",
+        "to-arraybuffer": "1.0.1",
+        "xtend": "4.0.1"
+      }
+    },
+    "stream-shift": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
+      "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=",
+      "dev": true
+    },
+    "string-width": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+      "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+      "dev": true,
+      "requires": {
+        "is-fullwidth-code-point": "2.0.0",
+        "strip-ansi": "4.0.0"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+          "dev": true
+        },
+        "strip-ansi": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+          "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "3.0.0"
+          }
+        }
+      }
+    },
+    "string.prototype.padend": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz",
+      "integrity": "sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA=",
+      "dev": true,
+      "requires": {
+        "define-properties": "1.1.3",
+        "es-abstract": "1.13.0",
+        "function-bind": "1.1.1"
+      }
+    },
+    "string.prototype.padstart": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/string.prototype.padstart/-/string.prototype.padstart-3.0.0.tgz",
+      "integrity": "sha1-W8+tOfRkm7LQMSkuGbzwtRDUskI=",
+      "dev": true,
+      "requires": {
+        "define-properties": "1.1.3",
+        "es-abstract": "1.13.0",
+        "function-bind": "1.1.1"
+      }
+    },
+    "string_decoder": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+      "dev": true,
+      "requires": {
+        "safe-buffer": "5.1.2"
+      }
+    },
+    "strip-ansi": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz",
+      "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==",
+      "dev": true,
+      "requires": {
+        "ansi-regex": "4.0.0"
+      }
+    },
+    "strip-eof": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+      "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
+      "dev": true
+    },
+    "strip-indent": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+      "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+      "dev": true
+    },
+    "strip-json-comments": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+      "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+      "dev": true
+    },
+    "stylehacks": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz",
+      "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==",
+      "dev": true,
+      "requires": {
+        "browserslist": "4.4.1",
+        "postcss": "7.0.14",
+        "postcss-selector-parser": "3.1.1"
+      },
+      "dependencies": {
+        "postcss-selector-parser": {
+          "version": "3.1.1",
+          "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz",
+          "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=",
+          "dev": true,
+          "requires": {
+            "dot-prop": "4.2.0",
+            "indexes-of": "1.0.1",
+            "uniq": "1.0.1"
+          }
+        }
+      }
+    },
+    "supports-color": {
+      "version": "5.5.0",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+      "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+      "dev": true,
+      "requires": {
+        "has-flag": "3.0.0"
+      }
+    },
+    "svg-tags": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz",
+      "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=",
+      "dev": true
+    },
+    "svgo": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.1.1.tgz",
+      "integrity": "sha512-GBkJbnTuFpM4jFbiERHDWhZc/S/kpHToqmZag3aEBjPYK44JAN2QBjvrGIxLOoCyMZjuFQIfTO2eJd8uwLY/9g==",
+      "dev": true,
+      "requires": {
+        "coa": "2.0.2",
+        "colors": "1.1.2",
+        "css-select": "2.0.2",
+        "css-select-base-adapter": "0.1.1",
+        "css-tree": "1.0.0-alpha.28",
+        "css-url-regex": "1.1.0",
+        "csso": "3.5.1",
+        "js-yaml": "3.12.1",
+        "mkdirp": "0.5.1",
+        "object.values": "1.1.0",
+        "sax": "1.2.4",
+        "stable": "0.1.8",
+        "unquote": "1.1.1",
+        "util.promisify": "1.0.0"
+      }
+    },
+    "table": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz",
+      "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "ajv": "5.5.2",
+        "ajv-keywords": "2.1.1",
+        "chalk": "2.4.2",
+        "lodash": "4.17.11",
+        "slice-ansi": "1.0.0",
+        "string-width": "2.1.1"
+      },
+      "dependencies": {
+        "ajv": {
+          "version": "5.5.2",
+          "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
+          "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "co": "4.6.0",
+            "fast-deep-equal": "1.1.0",
+            "fast-json-stable-stringify": "2.0.0",
+            "json-schema-traverse": "0.3.1"
+          }
+        },
+        "ajv-keywords": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz",
+          "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=",
+          "dev": true,
+          "optional": true
+        },
+        "fast-deep-equal": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
+          "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
+          "dev": true,
+          "optional": true
+        },
+        "json-schema-traverse": {
+          "version": "0.3.1",
+          "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
+          "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
+          "dev": true,
+          "optional": true
+        }
+      }
+    },
+    "tapable": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.1.tgz",
+      "integrity": "sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA==",
+      "dev": true
+    },
+    "terser": {
+      "version": "3.16.1",
+      "resolved": "https://registry.npmjs.org/terser/-/terser-3.16.1.tgz",
+      "integrity": "sha512-JDJjgleBROeek2iBcSNzOHLKsB/MdDf+E/BOAJ0Tk9r7p9/fVobfv7LMJ/g/k3v9SXdmjZnIlFd5nfn/Rt0Xow==",
+      "dev": true,
+      "requires": {
+        "commander": "2.17.1",
+        "source-map": "0.6.1",
+        "source-map-support": "0.5.10"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        }
+      }
+    },
+    "terser-webpack-plugin": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.2.2.tgz",
+      "integrity": "sha512-1DMkTk286BzmfylAvLXwpJrI7dWa5BnFmscV/2dCr8+c56egFcbaeFAl7+sujAjdmpLam21XRdhA4oifLyiWWg==",
+      "dev": true,
+      "requires": {
+        "cacache": "11.3.2",
+        "find-cache-dir": "2.0.0",
+        "schema-utils": "1.0.0",
+        "serialize-javascript": "1.6.1",
+        "source-map": "0.6.1",
+        "terser": "3.16.1",
+        "webpack-sources": "1.3.0",
+        "worker-farm": "1.6.0"
+      },
+      "dependencies": {
+        "schema-utils": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+          "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+          "dev": true,
+          "requires": {
+            "ajv": "6.9.1",
+            "ajv-errors": "1.0.1",
+            "ajv-keywords": "3.4.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        }
+      }
+    },
+    "text-table": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+      "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+      "dev": true
+    },
+    "thread-loader": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/thread-loader/-/thread-loader-2.1.2.tgz",
+      "integrity": "sha512-7xpuc9Ifg6WU+QYw/8uUqNdRwMD+N5gjwHKMqETrs96Qn+7BHwECpt2Brzr4HFlf4IAkZsayNhmGdbkBsTJ//w==",
+      "dev": true,
+      "requires": {
+        "loader-runner": "2.4.0",
+        "loader-utils": "1.2.3",
+        "neo-async": "2.6.0"
+      }
+    },
+    "through": {
+      "version": "2.3.8",
+      "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+      "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+      "dev": true
+    },
+    "through2": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
+      "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+      "dev": true,
+      "requires": {
+        "readable-stream": "2.3.6",
+        "xtend": "4.0.1"
+      }
+    },
+    "thunky": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.3.tgz",
+      "integrity": "sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow==",
+      "dev": true
+    },
+    "timers-browserify": {
+      "version": "2.0.10",
+      "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz",
+      "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==",
+      "dev": true,
+      "requires": {
+        "setimmediate": "1.0.5"
+      }
+    },
+    "timsort": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz",
+      "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=",
+      "dev": true
+    },
+    "tmp": {
+      "version": "0.0.33",
+      "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+      "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+      "dev": true,
+      "requires": {
+        "os-tmpdir": "1.0.2"
+      }
+    },
+    "to-arraybuffer": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
+      "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
+      "dev": true
+    },
+    "to-fast-properties": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+      "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+      "dev": true
+    },
+    "to-object-path": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+      "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+      "dev": true,
+      "requires": {
+        "kind-of": "3.2.2"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "1.1.6"
+          }
+        }
+      }
+    },
+    "to-regex": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+      "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+      "dev": true,
+      "requires": {
+        "define-property": "2.0.2",
+        "extend-shallow": "3.0.2",
+        "regex-not": "1.0.2",
+        "safe-regex": "1.1.0"
+      }
+    },
+    "to-regex-range": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+      "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+      "dev": true,
+      "requires": {
+        "is-number": "3.0.0",
+        "repeat-string": "1.6.1"
+      }
+    },
+    "topo": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/topo/-/topo-3.0.3.tgz",
+      "integrity": "sha512-IgpPtvD4kjrJ7CRA3ov2FhWQADwv+Tdqbsf1ZnPUSAtCJ9e1Z44MmoSGDXGk4IppoZA7jd/QRkNddlLJWlUZsQ==",
+      "dev": true,
+      "requires": {
+        "hoek": "6.1.2"
+      }
+    },
+    "toposort": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz",
+      "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=",
+      "dev": true
+    },
+    "tough-cookie": {
+      "version": "2.4.3",
+      "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
+      "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
+      "dev": true,
+      "requires": {
+        "psl": "1.1.31",
+        "punycode": "1.4.1"
+      },
+      "dependencies": {
+        "punycode": {
+          "version": "1.4.1",
+          "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+          "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+          "dev": true
+        }
+      }
+    },
+    "trim-right": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+      "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+      "dev": true
+    },
+    "tryer": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz",
+      "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==",
+      "dev": true
+    },
+    "tslib": {
+      "version": "1.9.3",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz",
+      "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==",
+      "dev": true
+    },
+    "tty-browserify": {
+      "version": "0.0.0",
+      "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
+      "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
+      "dev": true
+    },
+    "tunnel-agent": {
+      "version": "0.6.0",
+      "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+      "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+      "dev": true,
+      "requires": {
+        "safe-buffer": "5.1.2"
+      }
+    },
+    "tweetnacl": {
+      "version": "0.14.5",
+      "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+      "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+      "dev": true
+    },
+    "type-check": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+      "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+      "dev": true,
+      "requires": {
+        "prelude-ls": "1.1.2"
+      }
+    },
+    "type-is": {
+      "version": "1.6.16",
+      "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz",
+      "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==",
+      "dev": true,
+      "requires": {
+        "media-typer": "0.3.0",
+        "mime-types": "2.1.22"
+      }
+    },
+    "typedarray": {
+      "version": "0.0.6",
+      "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+      "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+      "dev": true
+    },
+    "uglify-js": {
+      "version": "3.4.9",
+      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz",
+      "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==",
+      "dev": true,
+      "requires": {
+        "commander": "2.17.1",
+        "source-map": "0.6.1"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        }
+      }
+    },
+    "unicode-canonical-property-names-ecmascript": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
+      "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==",
+      "dev": true
+    },
+    "unicode-match-property-ecmascript": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz",
+      "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==",
+      "dev": true,
+      "requires": {
+        "unicode-canonical-property-names-ecmascript": "1.0.4",
+        "unicode-property-aliases-ecmascript": "1.0.4"
+      }
+    },
+    "unicode-match-property-value-ecmascript": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz",
+      "integrity": "sha512-Rx7yODZC1L/T8XKo/2kNzVAQaRE88AaMvI1EF/Xnj3GW2wzN6fop9DDWuFAKUVFH7vozkz26DzP0qyWLKLIVPQ==",
+      "dev": true
+    },
+    "unicode-property-aliases-ecmascript": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz",
+      "integrity": "sha512-2WSLa6OdYd2ng8oqiGIWnJqyFArvhn+5vgx5GTxMbUYjCYKUcuKS62YLFF0R/BDGlB1yzXjQOLtPAfHsgirEpg==",
+      "dev": true
+    },
+    "union-value": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+      "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+      "dev": true,
+      "requires": {
+        "arr-union": "3.1.0",
+        "get-value": "2.0.6",
+        "is-extendable": "0.1.1",
+        "set-value": "0.4.3"
+      },
+      "dependencies": {
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "0.1.1"
+          }
+        },
+        "set-value": {
+          "version": "0.4.3",
+          "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+          "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+          "dev": true,
+          "requires": {
+            "extend-shallow": "2.0.1",
+            "is-extendable": "0.1.1",
+            "is-plain-object": "2.0.4",
+            "to-object-path": "0.3.0"
+          }
+        }
+      }
+    },
+    "uniq": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
+      "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=",
+      "dev": true
+    },
+    "uniqs": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz",
+      "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=",
+      "dev": true
+    },
+    "unique-filename": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
+      "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
+      "dev": true,
+      "requires": {
+        "unique-slug": "2.0.1"
+      }
+    },
+    "unique-slug": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.1.tgz",
+      "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==",
+      "dev": true,
+      "requires": {
+        "imurmurhash": "0.1.4"
+      }
+    },
+    "universalify": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+      "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+      "dev": true
+    },
+    "unpipe": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+      "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
+      "dev": true
+    },
+    "unquote": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz",
+      "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=",
+      "dev": true
+    },
+    "unset-value": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+      "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+      "dev": true,
+      "requires": {
+        "has-value": "0.3.1",
+        "isobject": "3.0.1"
+      },
+      "dependencies": {
+        "has-value": {
+          "version": "0.3.1",
+          "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+          "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+          "dev": true,
+          "requires": {
+            "get-value": "2.0.6",
+            "has-values": "0.1.4",
+            "isobject": "2.1.0"
+          },
+          "dependencies": {
+            "isobject": {
+              "version": "2.1.0",
+              "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+              "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+              "dev": true,
+              "requires": {
+                "isarray": "1.0.0"
+              }
+            }
+          }
+        },
+        "has-values": {
+          "version": "0.1.4",
+          "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+          "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+          "dev": true
+        }
+      }
+    },
+    "upath": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz",
+      "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==",
+      "dev": true
+    },
+    "upper-case": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz",
+      "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=",
+      "dev": true
+    },
+    "uri-js": {
+      "version": "4.2.2",
+      "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
+      "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
+      "dev": true,
+      "requires": {
+        "punycode": "2.1.1"
+      }
+    },
+    "urix": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+      "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+      "dev": true
+    },
+    "url": {
+      "version": "0.11.0",
+      "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
+      "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+      "dev": true,
+      "requires": {
+        "punycode": "1.3.2",
+        "querystring": "0.2.0"
+      },
+      "dependencies": {
+        "punycode": {
+          "version": "1.3.2",
+          "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+          "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
+          "dev": true
+        }
+      }
+    },
+    "url-loader": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-1.1.2.tgz",
+      "integrity": "sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg==",
+      "dev": true,
+      "requires": {
+        "loader-utils": "1.2.3",
+        "mime": "2.4.0",
+        "schema-utils": "1.0.0"
+      },
+      "dependencies": {
+        "schema-utils": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+          "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+          "dev": true,
+          "requires": {
+            "ajv": "6.9.1",
+            "ajv-errors": "1.0.1",
+            "ajv-keywords": "3.4.0"
+          }
+        }
+      }
+    },
+    "url-parse": {
+      "version": "1.4.4",
+      "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.4.tgz",
+      "integrity": "sha512-/92DTTorg4JjktLNLe6GPS2/RvAd/RGr6LuktmWSMLEOa6rjnlrFXNgSbSmkNvCoL2T028A0a1JaJLzRMlFoHg==",
+      "dev": true,
+      "requires": {
+        "querystringify": "2.1.0",
+        "requires-port": "1.0.0"
+      }
+    },
+    "use": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+      "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
+      "dev": true
+    },
+    "util": {
+      "version": "0.11.1",
+      "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
+      "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
+      "dev": true,
+      "requires": {
+        "inherits": "2.0.3"
+      }
+    },
+    "util-deprecate": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+      "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+      "dev": true
+    },
+    "util.promisify": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz",
+      "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==",
+      "dev": true,
+      "requires": {
+        "define-properties": "1.1.3",
+        "object.getownpropertydescriptors": "2.0.3"
+      }
+    },
+    "utila": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz",
+      "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=",
+      "dev": true
+    },
+    "utils-merge": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+      "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
+      "dev": true
+    },
+    "uuid": {
+      "version": "3.3.2",
+      "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
+      "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
+      "dev": true
+    },
+    "validate-npm-package-license": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+      "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+      "dev": true,
+      "requires": {
+        "spdx-correct": "3.1.0",
+        "spdx-expression-parse": "3.0.0"
+      }
+    },
+    "vary": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+      "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
+      "dev": true
+    },
+    "vendors": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.2.tgz",
+      "integrity": "sha512-w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ==",
+      "dev": true
+    },
+    "verror": {
+      "version": "1.10.0",
+      "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+      "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+      "dev": true,
+      "requires": {
+        "assert-plus": "1.0.0",
+        "core-util-is": "1.0.2",
+        "extsprintf": "1.3.0"
+      }
+    },
+    "vm-browserify": {
+      "version": "0.0.4",
+      "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz",
+      "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=",
+      "dev": true,
+      "requires": {
+        "indexof": "0.0.1"
+      }
+    },
+    "vue": {
+      "version": "2.6.7",
+      "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.7.tgz",
+      "integrity": "sha512-g7ADfQ82QU+j6F/bVDioVQf2ccIMYLuR4E8ev+RsDBlmwRkhGO3HhgF4PF9vpwjdPpxyb1zzLur2nQ2oIMAMEg=="
+    },
+    "vue-eslint-parser": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-2.0.3.tgz",
+      "integrity": "sha512-ZezcU71Owm84xVF6gfurBQUGg8WQ+WZGxgDEQu1IHFBZNx7BFZg3L1yHxrCBNNwbwFtE1GuvfJKMtb6Xuwc/Bw==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "debug": "3.2.6",
+        "eslint-scope": "3.7.3",
+        "eslint-visitor-keys": "1.0.0",
+        "espree": "3.5.4",
+        "esquery": "1.0.1",
+        "lodash": "4.17.11"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.2.6",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+          "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "ms": "2.1.1"
+          }
+        },
+        "eslint-scope": {
+          "version": "3.7.3",
+          "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz",
+          "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "esrecurse": "4.2.1",
+            "estraverse": "4.2.0"
+          }
+        }
+      }
+    },
+    "vue-hot-reload-api": {
+      "version": "2.3.3",
+      "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.3.tgz",
+      "integrity": "sha512-KmvZVtmM26BQOMK1rwUZsrqxEGeKiYSZGA7SNWE6uExx8UX/cj9hq2MRV/wWC3Cq6AoeDGk57rL9YMFRel/q+g==",
+      "dev": true
+    },
+    "vue-loader": {
+      "version": "15.6.4",
+      "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.6.4.tgz",
+      "integrity": "sha512-GImqWcO3OsiRYS/zfMhmthFd1xwL68AAE5gAHhzNCI4SLNSxIlB9YmjgJS89anqViWSyl0mnAmyXNYHs7sydFw==",
+      "dev": true,
+      "requires": {
+        "@vue/component-compiler-utils": "2.6.0",
+        "hash-sum": "1.0.2",
+        "loader-utils": "1.2.3",
+        "vue-hot-reload-api": "2.3.3",
+        "vue-style-loader": "4.1.2"
+      }
+    },
+    "vue-material": {
+      "version": "1.0.0-beta-10.2",
+      "resolved": "https://registry.npmjs.org/vue-material/-/vue-material-1.0.0-beta-10.2.tgz",
+      "integrity": "sha512-DXOUXm6M8zbeJ6LPvP1h/0EhXmCkxNGz2dM/0q4w+lsT9uTaos+YDrwQvJBJcxil3fEw6oHCfhG/peWks+8v7Q=="
+    },
+    "vue-style-loader": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.2.tgz",
+      "integrity": "sha512-0ip8ge6Gzz/Bk0iHovU9XAUQaFt/G2B61bnWa2tCcqqdgfHs1lF9xXorFbE55Gmy92okFT+8bfmySuUOu13vxQ==",
+      "dev": true,
+      "requires": {
+        "hash-sum": "1.0.2",
+        "loader-utils": "1.2.3"
+      }
+    },
+    "vue-template-compiler": {
+      "version": "2.6.7",
+      "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.7.tgz",
+      "integrity": "sha512-ZjxJLr6Lw2gj6aQGKwBWTxVNNd28/qggIdwvr5ushrUHUvqgbHD0xusOVP2yRxT4pX3wRIJ2LfxjgFT41dEtoQ==",
+      "dev": true,
+      "requires": {
+        "de-indent": "1.0.2",
+        "he": "1.2.0"
+      }
+    },
+    "vue-template-es2015-compiler": {
+      "version": "1.9.1",
+      "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz",
+      "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==",
+      "dev": true
+    },
+    "vuex": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.1.0.tgz",
+      "integrity": "sha512-mdHeHT/7u4BncpUZMlxNaIdcN/HIt1GsGG5LKByArvYG/v6DvHcOxvDCts+7SRdCoIRGllK8IMZvQtQXLppDYg=="
+    },
+    "watchpack": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz",
+      "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==",
+      "dev": true,
+      "requires": {
+        "chokidar": "2.1.2",
+        "graceful-fs": "4.1.15",
+        "neo-async": "2.6.0"
+      }
+    },
+    "wbuf": {
+      "version": "1.7.3",
+      "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz",
+      "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==",
+      "dev": true,
+      "requires": {
+        "minimalistic-assert": "1.0.1"
+      }
+    },
+    "wcwidth": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
+      "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
+      "dev": true,
+      "requires": {
+        "defaults": "1.0.3"
+      }
+    },
+    "webpack": {
+      "version": "4.28.4",
+      "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.28.4.tgz",
+      "integrity": "sha512-NxjD61WsK/a3JIdwWjtIpimmvE6UrRi3yG54/74Hk9rwNj5FPkA4DJCf1z4ByDWLkvZhTZE+P3C/eh6UD5lDcw==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.7.11",
+        "@webassemblyjs/helper-module-context": "1.7.11",
+        "@webassemblyjs/wasm-edit": "1.7.11",
+        "@webassemblyjs/wasm-parser": "1.7.11",
+        "acorn": "5.7.3",
+        "acorn-dynamic-import": "3.0.0",
+        "ajv": "6.9.1",
+        "ajv-keywords": "3.4.0",
+        "chrome-trace-event": "1.0.0",
+        "enhanced-resolve": "4.1.0",
+        "eslint-scope": "4.0.0",
+        "json-parse-better-errors": "1.0.2",
+        "loader-runner": "2.4.0",
+        "loader-utils": "1.2.3",
+        "memory-fs": "0.4.1",
+        "micromatch": "3.1.10",
+        "mkdirp": "0.5.1",
+        "neo-async": "2.6.0",
+        "node-libs-browser": "2.2.0",
+        "schema-utils": "0.4.7",
+        "tapable": "1.1.1",
+        "terser-webpack-plugin": "1.2.2",
+        "watchpack": "1.6.0",
+        "webpack-sources": "1.3.0"
+      }
+    },
+    "webpack-bundle-analyzer": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.0.4.tgz",
+      "integrity": "sha512-ggDUgtKuQki4vmc93Ej65GlYxeCUR/0THa7gA+iqAGC2FFAxO+r+RM9sAUa8HWdw4gJ3/NZHX/QUcVgRjdIsDg==",
+      "dev": true,
+      "requires": {
+        "acorn": "5.7.3",
+        "bfj": "6.1.1",
+        "chalk": "2.4.2",
+        "commander": "2.19.0",
+        "ejs": "2.6.1",
+        "express": "4.16.4",
+        "filesize": "3.6.1",
+        "gzip-size": "5.0.0",
+        "lodash": "4.17.11",
+        "mkdirp": "0.5.1",
+        "opener": "1.5.1",
+        "ws": "6.1.4"
+      },
+      "dependencies": {
+        "commander": {
+          "version": "2.19.0",
+          "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz",
+          "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==",
+          "dev": true
+        }
+      }
+    },
+    "webpack-chain": {
+      "version": "4.12.1",
+      "resolved": "https://registry.npmjs.org/webpack-chain/-/webpack-chain-4.12.1.tgz",
+      "integrity": "sha512-BCfKo2YkDe2ByqkEWe1Rw+zko4LsyS75LVr29C6xIrxAg9JHJ4pl8kaIZ396SUSNp6b4815dRZPSTAS8LlURRQ==",
+      "dev": true,
+      "requires": {
+        "deepmerge": "1.5.2",
+        "javascript-stringify": "1.6.0"
+      }
+    },
+    "webpack-dev-middleware": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.6.0.tgz",
+      "integrity": "sha512-oeXA3m+5gbYbDBGo4SvKpAHJJEGMoekUbHgo1RK7CP1sz7/WOSeu/dWJtSTk+rzDCLkPwQhGocgIq6lQqOyOwg==",
+      "dev": true,
+      "requires": {
+        "memory-fs": "0.4.1",
+        "mime": "2.4.0",
+        "range-parser": "1.2.0",
+        "webpack-log": "2.0.0"
+      }
+    },
+    "webpack-dev-server": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.2.0.tgz",
+      "integrity": "sha512-CUGPLQsUBVKa/qkZl1MMo8krm30bsOHAP8jtn78gUICpT+sR3esN4Zb0TSBzOEEQJF0zHNEbwx5GHInkqcmlsA==",
+      "dev": true,
+      "requires": {
+        "ansi-html": "0.0.7",
+        "bonjour": "3.5.0",
+        "chokidar": "2.1.2",
+        "compression": "1.7.3",
+        "connect-history-api-fallback": "1.6.0",
+        "debug": "4.1.1",
+        "del": "3.0.0",
+        "express": "4.16.4",
+        "html-entities": "1.2.1",
+        "http-proxy-middleware": "0.19.1",
+        "import-local": "2.0.0",
+        "internal-ip": "4.1.0",
+        "ip": "1.1.5",
+        "killable": "1.0.1",
+        "loglevel": "1.6.1",
+        "opn": "5.4.0",
+        "portfinder": "1.0.20",
+        "schema-utils": "1.0.0",
+        "selfsigned": "1.10.4",
+        "semver": "5.6.0",
+        "serve-index": "1.9.1",
+        "sockjs": "0.3.19",
+        "sockjs-client": "1.3.0",
+        "spdy": "4.0.0",
+        "strip-ansi": "3.0.1",
+        "supports-color": "6.1.0",
+        "url": "0.11.0",
+        "webpack-dev-middleware": "3.6.0",
+        "webpack-log": "2.0.0",
+        "yargs": "12.0.2"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+          "dev": true
+        },
+        "schema-utils": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+          "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+          "dev": true,
+          "requires": {
+            "ajv": "6.9.1",
+            "ajv-errors": "1.0.1",
+            "ajv-keywords": "3.4.0"
+          }
+        },
+        "strip-ansi": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "2.1.1"
+          }
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "dev": true,
+          "requires": {
+            "has-flag": "3.0.0"
+          }
+        }
+      }
+    },
+    "webpack-log": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz",
+      "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==",
+      "dev": true,
+      "requires": {
+        "ansi-colors": "3.2.3",
+        "uuid": "3.3.2"
+      }
+    },
+    "webpack-merge": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.1.tgz",
+      "integrity": "sha512-4p8WQyS98bUJcCvFMbdGZyZmsKuWjWVnVHnAS3FFg0HDaRVrPbkivx2RYCre8UiemD67RsiFFLfn4JhLAin8Vw==",
+      "dev": true,
+      "requires": {
+        "lodash": "4.17.11"
+      }
+    },
+    "webpack-sources": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz",
+      "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==",
+      "dev": true,
+      "requires": {
+        "source-list-map": "2.0.1",
+        "source-map": "0.6.1"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        }
+      }
+    },
+    "websocket-driver": {
+      "version": "0.7.0",
+      "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz",
+      "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=",
+      "dev": true,
+      "requires": {
+        "http-parser-js": "0.5.0",
+        "websocket-extensions": "0.1.3"
+      }
+    },
+    "websocket-extensions": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz",
+      "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==",
+      "dev": true
+    },
+    "which": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+      "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+      "dev": true,
+      "requires": {
+        "isexe": "2.0.0"
+      }
+    },
+    "which-module": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+      "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
+      "dev": true
+    },
+    "wordwrap": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+      "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+      "dev": true
+    },
+    "worker-farm": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz",
+      "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==",
+      "dev": true,
+      "requires": {
+        "errno": "0.1.7"
+      }
+    },
+    "wrap-ansi": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+      "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+      "dev": true,
+      "requires": {
+        "string-width": "1.0.2",
+        "strip-ansi": "3.0.1"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+          "dev": true
+        },
+        "is-fullwidth-code-point": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+          "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+          "dev": true,
+          "requires": {
+            "number-is-nan": "1.0.1"
+          }
+        },
+        "string-width": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+          "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+          "dev": true,
+          "requires": {
+            "code-point-at": "1.1.0",
+            "is-fullwidth-code-point": "1.0.0",
+            "strip-ansi": "3.0.1"
+          }
+        },
+        "strip-ansi": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "2.1.1"
+          }
+        }
+      }
+    },
+    "wrappy": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+      "dev": true
+    },
+    "write": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz",
+      "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "mkdirp": "0.5.1"
+      }
+    },
+    "ws": {
+      "version": "6.1.4",
+      "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz",
+      "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==",
+      "dev": true,
+      "requires": {
+        "async-limiter": "1.0.0"
+      }
+    },
+    "xregexp": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz",
+      "integrity": "sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==",
+      "dev": true
+    },
+    "xtend": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+      "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+      "dev": true
+    },
+    "y18n": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
+      "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
+      "dev": true
+    },
+    "yallist": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
+      "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==",
+      "dev": true
+    },
+    "yargs": {
+      "version": "12.0.2",
+      "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.2.tgz",
+      "integrity": "sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ==",
+      "dev": true,
+      "requires": {
+        "cliui": "4.1.0",
+        "decamelize": "2.0.0",
+        "find-up": "3.0.0",
+        "get-caller-file": "1.0.3",
+        "os-locale": "3.1.0",
+        "require-directory": "2.1.1",
+        "require-main-filename": "1.0.1",
+        "set-blocking": "2.0.0",
+        "string-width": "2.1.1",
+        "which-module": "2.0.0",
+        "y18n": "4.0.0",
+        "yargs-parser": "10.1.0"
+      }
+    },
+    "yargs-parser": {
+      "version": "10.1.0",
+      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz",
+      "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==",
+      "dev": true,
+      "requires": {
+        "camelcase": "4.1.0"
+      },
+      "dependencies": {
+        "camelcase": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+          "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+          "dev": true
+        }
+      }
+    },
+    "yorkie": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/yorkie/-/yorkie-2.0.0.tgz",
+      "integrity": "sha512-jcKpkthap6x63MB4TxwCyuIGkV0oYP/YRyuQU5UO0Yz/E/ZAu+653/uov+phdmO54n6BcvFRyyt0RRrWdN2mpw==",
+      "dev": true,
+      "requires": {
+        "execa": "0.8.0",
+        "is-ci": "1.2.1",
+        "normalize-path": "1.0.0",
+        "strip-indent": "2.0.0"
+      },
+      "dependencies": {
+        "cross-spawn": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+          "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+          "dev": true,
+          "requires": {
+            "lru-cache": "4.1.5",
+            "shebang-command": "1.2.0",
+            "which": "1.3.1"
+          }
+        },
+        "execa": {
+          "version": "0.8.0",
+          "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz",
+          "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=",
+          "dev": true,
+          "requires": {
+            "cross-spawn": "5.1.0",
+            "get-stream": "3.0.0",
+            "is-stream": "1.1.0",
+            "npm-run-path": "2.0.2",
+            "p-finally": "1.0.0",
+            "signal-exit": "3.0.2",
+            "strip-eof": "1.0.0"
+          }
+        },
+        "get-stream": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+          "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+          "dev": true
+        },
+        "lru-cache": {
+          "version": "4.1.5",
+          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+          "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+          "dev": true,
+          "requires": {
+            "pseudomap": "1.0.2",
+            "yallist": "2.1.2"
+          }
+        },
+        "normalize-path": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-1.0.0.tgz",
+          "integrity": "sha1-MtDkcvkf80VwHBWoMRAY07CpA3k=",
+          "dev": true
+        },
+        "yallist": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+          "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+          "dev": true
+        }
+      }
+    }
+  }
+}
diff --git a/ARCHITECT/architect-ui/package.json b/ARCHITECT/architect-ui/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..97aa441ca9def86cbb249a0fa2d836b77a501813
--- /dev/null
+++ b/ARCHITECT/architect-ui/package.json
@@ -0,0 +1,51 @@
+{
+  "name": "architect",
+  "version": "0.2.0",
+  "private": true,
+  "scripts": {
+    "serve": "vue-cli-service serve",
+    "build": "vue-cli-service build",
+    "lint": "vue-cli-service lint"
+  },
+  "dependencies": {
+    "@babel/polyfill": "^7.4.4",
+    "axios": "^0.18.0",
+    "es6-promise": "^4.2.6",
+    "vue": "^2.6.6",
+    "vue-material": "^1.0.0-beta-10.2",
+    "vuex": "^3.1.0"
+  },
+  "devDependencies": {
+    "@vue/cli-plugin-babel": "^3.4.0",
+    "@vue/cli-plugin-eslint": "^3.4.0",
+    "@vue/cli-service": "^3.4.0",
+    "babel-eslint": "^10.0.1",
+    "eslint": "^5.8.0",
+    "eslint-plugin-vue": "^5.0.0",
+    "vue-template-compiler": "^2.5.21"
+  },
+  "eslintConfig": {
+    "root": true,
+    "env": {
+      "node": true
+    },
+    "extends": [
+      "plugin:vue/essential",
+      "eslint:recommended"
+    ],
+    "rules": {},
+    "parserOptions": {
+      "parser": "babel-eslint"
+    }
+  },
+  "postcss": {
+    "plugins": {
+      "autoprefixer": {}
+    }
+  },
+  "browserslist": [
+    "> 1%",
+    "last 2 versions",
+    "not ie <= 8"
+  ]
+}
diff --git a/ARCHITECT/architect-ui/public/.htaccess b/ARCHITECT/architect-ui/public/.htaccess
new file mode 100644
index 0000000000000000000000000000000000000000..a36ac003b5683d0328014cf56d498d5ac8dddedf
--- /dev/null
+++ b/ARCHITECT/architect-ui/public/.htaccess
@@ -0,0 +1,6 @@
+Options -MultiViews
+RewriteEngine On
+RewriteCond %{REQUEST_FILENAME} !-f
+RewriteRule ^ index.html [QSA,L]
+
+Header set Access-Control-Allow-Origin "*"
\ No newline at end of file
diff --git a/ARCHITECT/architect-ui/public/favicon.ico b/ARCHITECT/architect-ui/public/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..c7b9a43c8cd16d0b434adaf513fcacb340809a11
Binary files /dev/null and b/ARCHITECT/architect-ui/public/favicon.ico differ
diff --git a/ARCHITECT/architect-ui/public/index.html b/ARCHITECT/architect-ui/public/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..6de19afa2e94feacb1d5b2c1d2d07d00fa3a8860
--- /dev/null
+++ b/ARCHITECT/architect-ui/public/index.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width,initial-scale=1.0">
+    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
+    <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
+    <title>architect</title>
+  </head>
+  <body>
+    <noscript>
+      <strong>We're sorry but architect doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
+    </noscript>
+    <div id="app"></div>
+    <!-- built files will be auto injected -->
+  </body>
+</html>
diff --git a/ARCHITECT/architect-ui/runtimeconfig.sh b/ARCHITECT/architect-ui/runtimeconfig.sh
new file mode 100644
index 0000000000000000000000000000000000000000..866586f0ad7a94fbd4ca1f5d64af48b34b8fcb59
--- /dev/null
+++ b/ARCHITECT/architect-ui/runtimeconfig.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+jq '.serviceUri = $newVal' --arg newVal $DECIDE_MCSLA_SERVICE_URI /usr/local/apache2/htdocs/app-conf.json > /usr/local/apache2/conf/tmp.$$.json && mv /usr/local/apache2/conf/tmp.$$.json /usr/local/apache2/htdocs/app-conf.json
+
+exec "$@"
diff --git a/ARCHITECT/architect-ui/src/App.vue b/ARCHITECT/architect-ui/src/App.vue
new file mode 100644
index 0000000000000000000000000000000000000000..f9104f6a2db364928ce4fde1b8e71f415255cb37
--- /dev/null
+++ b/ARCHITECT/architect-ui/src/App.vue
@@ -0,0 +1,32 @@
+<!--
+Copyright (c) 2017 Fraunhofer FOKUS.
+All rights reserved. This program and the accompanying materials
+are made available under the terms of the
+GNU AGPL v3 which accompanies
+this distribution, and is available at
+http://www.gnu.org/licenses/agpl.txt
+
+Contributors:
+Simon Dutkowski Fraunhofer FOKUS
+
+Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+-->
+<template>
+  <div id="app">
+    <Main></Main>
+  </div>
+</template>
+
+<script>
+import Main from './components/Main.vue'
+
+export default {
+  name: 'app',
+  components: {
+    Main
+  }
+}
+</script>
+
+<style>
+</style>
diff --git a/ARCHITECT/architect-ui/src/assets/logo.png b/ARCHITECT/architect-ui/src/assets/logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..f3d2503fc2a44b5053b0837ebea6e87a2d339a43
Binary files /dev/null and b/ARCHITECT/architect-ui/src/assets/logo.png differ
diff --git a/ARCHITECT/architect-ui/src/components/Main.vue b/ARCHITECT/architect-ui/src/components/Main.vue
new file mode 100644
index 0000000000000000000000000000000000000000..b82df5201bc15fa4465de3956131f341aedee2eb
--- /dev/null
+++ b/ARCHITECT/architect-ui/src/components/Main.vue
@@ -0,0 +1,293 @@
+<!--
+Copyright (c) 2017 Fraunhofer FOKUS.
+All rights reserved. This program and the accompanying materials
+are made available under the terms of the
+GNU AGPL v3 which accompanies
+this distribution, and is available at
+http://www.gnu.org/licenses/agpl.txt
+
+Contributors:
+Simon Dutkowski Fraunhofer FOKUS
+
+Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+-->
+<template>
+  <div>
+      <!-- APPLICATION LOADED -->
+      <div v-if="applicationLoaded || applicationSubmitted || applicationSubmitFailed">
+
+        <!-- SIDE NAVIGATION BUTTON -->
+        <md-button class="md-fab md-plain md-raised md-fab-bottom-left md-fixed" @click="showSideNav = !showSideNav">
+          <md-icon>keyboard_arrow_right</md-icon>
+        </md-button>
+
+        <!-- SIDE NAVIGATION -->
+        <md-drawer :md-active.sync="showSideNav" md-swipeable md-fixed>
+          <md-toolbar class="md-transparent" md-elevation="5">
+            <span class="md-headline">Categories</span>
+          </md-toolbar>
+          <md-list>
+            <md-list-item v-for="category of getAllCategories" :key="category">
+              <span class="md-list-item-text">
+                <md-switch class="md-dense md-primary" v-model="visibleCategories['recommendedPatterns'][category]">
+                  {{ category }}
+                </md-switch>
+              </span>
+            </md-list-item>
+          </md-list>
+        </md-drawer>
+
+        <!-- TABS FOR RECOMMENDED / ALL PATTERNS -->
+        <md-tabs class="md-transparent" md-alignment="fixed">
+          
+          <!-- RECOMMENDED PATTERNS -->
+          <md-tab md-label="RECOMMENDED PATTERNS">
+            <br>
+            <!-- PATTERN LIST -->
+            <pattern-list :patternList="sortByCategory(getAppRecommendations)" 
+                          type="recommendedPatterns" 
+                          selectablePatterns="true" 
+                          emptyMessage="NO RECOMMENDED PATTERNS AVAILABLE FOR THIS CATEGORY">
+            </pattern-list>
+            <!-- DIVIDER -->
+            <br>
+            <md-divider></md-divider>
+            <br>
+            <br>
+            <!-- SUBMIT BUTTON -->
+            <div class="md-layout md-alignment-top-center">
+                <md-button class="submit-button md-raised md-accent" @click="submit();">
+                  SUBMIT SELECTED PATTERNS
+                </md-button>
+            </div>
+          </md-tab>
+
+          <!-- ALL PATTERNS -->
+          <md-tab md-label="ALL PATTERNS">
+            <br>
+            <!-- PATTERN LIST -->
+            <pattern-list :patternList="sortByCategory(getAllPatterns)" 
+                          type="allPatterns" 
+                          selectablePatterns="false"
+                          emptyMessage="NO PATTERNS AVAILABLE FOR THIS CATEGORY">
+            </pattern-list>
+            <br>
+            <br>
+            <br>
+            <br>
+          </md-tab>
+        </md-tabs>
+
+
+        <!-- SUBMIT PATTERNS FAILED SNACKBAR -->
+        <md-snackbar :md-active.sync="applicationSubmitted" 
+                     :md-duration="Infinity"
+                     md-persistent 
+                     md-position="center">
+          <span>Successfully submitted the selected patterns!</span>
+          <md-button class="md-primary" @click="applicationState = 'loaded';">
+            CLOSE
+          </md-button>
+        </md-snackbar>
+
+        <!-- SUBMIT PATTERNS FAILED SNACKBAR -->
+        <md-snackbar :md-active.sync="applicationSubmitFailed" 
+                     :md-duration="Infinity" 
+                     md-persistent 
+                     md-position="center">
+          <span>Failed to submit the patterns!</span>
+          <md-button class="md-primary" @click="submit();">
+            TRY AGAIN
+          </md-button>
+          <md-button class="md-primary" @click="applicationState = 'submitted';">
+            CONTINUE
+          </md-button>
+        </md-snackbar>
+      </div>
+
+
+      <!-- APPLICATION FAILED -->
+      <div v-if="applicationFailed">
+        <md-empty-state md-icon="devices_other" md-label="No Application Loaded">
+          <md-button class="md-primary md-raised" @click="loadApp();">
+            APPLICATION COULD NOT BE LOADED - TRY AGAIN
+          </md-button>
+        </md-empty-state>
+      </div>
+
+
+      <!-- APPLICATION LOADING -->
+      <div class="loading-spinner" v-else-if="applicationLoading">
+        <md-progress-spinner md-mode="indeterminate"></md-progress-spinner>
+      </div>
+  </div>
+</template>
+
+<script>
+/* eslint-disable no-console */
+import { mapGetters, mapActions } from 'vuex';
+import PatternList from './PatternList';
+
+export default {
+  name: 'Main',
+  components: {
+    patternList: PatternList,
+  },
+  data() {
+    return {
+      applicationState: 'empty',
+      showSideNav: false,
+    };
+  },
+  computed: {
+    ...mapGetters([
+      'getAllCategories',
+      'getAllPatterns',
+      'getAppName',
+      'getAppRecommendations',
+    ]),
+    applicationLoading: function() {
+       return this.applicationState === 'loading';
+    },
+    applicationLoaded: function() {
+       return this.applicationState === 'loaded';
+    },
+    applicationFailed: function() {
+       return this.applicationState === 'failed';
+    },
+    applicationSubmitted: function() {
+      return this.applicationState === 'submitted';
+    },
+    applicationSubmitFailed: function() {
+      return this.applicationState === 'submitFailed';
+    },
+    visibleCategories: {
+      get() {
+        return this.$store.state.visibleCategories;
+      },
+      set(visibleCategories) {
+        this.$store.commit('SET_VISIBLE_CATEGORIES', visibleCategories);
+      },
+    }
+  },
+  methods: {
+    ...mapActions([
+      'setGitRepo',
+      'setGitToken',
+      'loadPatterns',
+      'initApp',
+      'submitPatterns',
+    ]),
+    /**
+     * Init the application and load the recommended patterns
+     */
+    loadApp() {
+      // Get gitRepo and gitToken from Query 
+      let query = window.location.search;
+      let params = new URLSearchParams(query);
+      if (params.get('uri')) this.setGitRepo(params.get('uri'));
+      if (params.get('token')) this.setGitToken(params.get('token'));
+
+      // Activate the loading spinner
+      this.applicationState = 'loading';
+
+      // Load all patterns
+      this.loadPatterns()
+      .then(() => {
+        console.log(`Successfully loaded all patterns.`);
+      })
+      .catch(() => {
+        console.log(`Failed to load all patterns!`);
+      });
+
+      // Load the application
+      this.initApp()
+        .then(() => {
+          console.log(`Successfully initialized application "${this.getAppName}".`);
+          // Set application state to loaded
+          this.applicationState = 'loaded';
+        })
+        .catch(() => {
+            // Set application state to failed
+            this.applicationState = 'failed';
+        });
+    },
+    submit() {
+      // Activate the loading spinner
+      this.applicationState = 'loading';
+
+      // Submit the selected patterns
+      this.submitPatterns()
+        .then(() => {
+          console.log(`Successfully submitted selected patterns for "${this.getAppName}".`);
+          // Set application state to submitted
+          this.applicationState = 'submitted';
+        })
+        .catch(() => {
+          console.log(`Failed to submit selected patterns for "${this.getAppName}".`);
+          // Set application state to submit failed
+          this.applicationState = 'submitFailed';
+        });
+    },
+    /**
+     * Add each pattern to every category it belongs to
+     */
+    sortByCategory(patternList) {
+      let sortedPatternList = {};
+
+      // Add all patterns to their corresponding categories
+      for (let pattern of patternList) {
+        for (let category of pattern.categories) {
+          category = this.capitalize(this.splitUriOnLastSlash(category));
+
+          // Check if entry for this category exists
+          if (sortedPatternList[category]) sortedPatternList[category].push(pattern);
+          else sortedPatternList[category] = [pattern];
+        }
+      }
+
+      return sortedPatternList;
+    },
+    /**
+     * Return content after the last slash of the given URI
+     */
+    splitUriOnLastSlash(uri) {
+      try {
+        return (uri.substring(uri.lastIndexOf('/') + 1));
+      } catch {
+        return uri;
+      }
+    },
+    /**
+     * Capitalize the first letter of the given word
+     */
+    capitalize(word) {
+        try {
+          return `${word.substring(0, 1).toUpperCase()}${word.substring(1).toLowerCase()}`;
+        } catch {
+          return word;
+        }
+    },
+  },
+  created() {
+    this.loadApp();
+  } 
+};
+</script>
+
+<style scoped>
+.submit-button {
+  background-color:#294E7A !important;
+}
+
+.loading-spinner {
+  position: absolute !important;
+  top: calc(50% - 30px) !important;
+  left: calc(50% - 30px) !important;
+}
+
+.md-drawer {
+  width: 300px !important;
+  max-width: 75vw !important;
+}
+</style>
diff --git a/ARCHITECT/architect-ui/src/components/PatternCard.vue b/ARCHITECT/architect-ui/src/components/PatternCard.vue
new file mode 100644
index 0000000000000000000000000000000000000000..5b85f760b02279044b94abbf23483d70c654a963
--- /dev/null
+++ b/ARCHITECT/architect-ui/src/components/PatternCard.vue
@@ -0,0 +1,175 @@
+<!--
+Copyright (c) 2017 Fraunhofer FOKUS.
+All rights reserved. This program and the accompanying materials
+are made available under the terms of the
+GNU AGPL v3 which accompanies
+this distribution, and is available at
+http://www.gnu.org/licenses/agpl.txt
+
+Contributors:
+Simon Dutkowski Fraunhofer FOKUS
+
+Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+-->
+<template>
+    <div>
+        <!-- PATTERN CARD -->
+        <md-card class="md-with-hover">
+            <div class="md-layout md-alignment-top-center">
+                <!-- PATTERN HEADER -->
+                <md-card-header class="md-layout-item md-size-50">
+                    <md-card-header-text>
+                        <div class="md-title">
+                            {{ pattern.title }}
+                        </div>
+                    </md-card-header-text>
+                </md-card-header>
+                <!-- CATEGORIES / POSITIVE IMPACTS -->
+                <md-card-header class="md-layout-item md-size-50 pattern-chips">
+                    <div class="md-layout md-alignment-top-right">
+                        <div class="md-layout-item md-size-100" v-if="pattern.categories">
+                            <md-chip class="md-primary" v-for="category of pattern.categories" :key="category">
+                                {{ capitalize(splitUriOnLastSlash(category)) }}
+                            </md-chip>
+                        </div>
+                        <br>
+                        <br>
+                        <div class="md-layout-item md-size-100" v-if="pattern.positiveImpacts">
+                            <md-chip class="md-accent" v-for="positiveImpact of pattern.positiveImpacts" :key="positiveImpact">
+                                {{ capitalize(splitUriOnLastSlash(positiveImpact)) }}
+                            </md-chip>
+                        </div>
+                    </div>
+                </md-card-header>
+                <!-- PATTERN CONTENT -->
+                <md-card-content class="md-layout md-alignment-top-center">
+                    <!-- TEXT -->
+                    <md-list class="md-layout-item md-dense">
+                        <md-list-item md-expand>
+                            <strong class="md-list-item-text" v-if="pattern.subject">
+                                {{ pattern.subject }}
+                            </strong>
+                            <strong class="md-list-item-text" v-else-if="pattern.description">
+                                {{ pattern.description }}
+                            </strong>
+                            <strong class="md-list-item-text" v-else-if="pattern.context">
+                                {{ pattern.context }}
+                            </strong>
+                            <strong class="md-list-item-text" v-else-if="pattern.solution">
+                                {{ pattern.solution }}
+                            </strong>
+                            <strong class="md-list-item-text" v-else>
+                                SHOW MORE ...
+                            </strong>
+                            <md-list slot="md-expand">
+                                <md-list-item v-if="pattern.subject">
+                                    <div class="pattern-text">
+                                        {{ pattern.subject }}
+                                    </div>
+                                </md-list-item>
+                                <md-list-item v-if="pattern.description">
+                                    <div class="pattern-text">
+                                    {{ pattern.description }}  
+                                    </div>
+                                </md-list-item>
+                                <md-list-item v-if="pattern.context">
+                                    <div class="pattern-text">
+                                        {{ pattern.context }}
+                                    </div>
+                                </md-list-item>
+                                <md-list-item v-if="pattern.solution">
+                                    <div class="pattern-text">
+                                        {{ pattern.solution }}
+                                    </div>
+                                </md-list-item>
+                            </md-list>
+                        </md-list-item>
+                    </md-list>
+                </md-card-content>
+            </div>
+            <!-- PATTERN EXPAND CONTENT -->
+            <md-card-expand>
+                <md-card-actions class="md-alignment-space-between">
+                    <div>
+                        <span v-if="pattern.html">
+                            <md-dialog-alert :md-active.sync="showDialog" :md-content="pattern.html" md-confirm-text="CLOSE"></md-dialog-alert>
+                            <md-button class="md-accent md-raised" @click="showDialog = true">SHOW MORE INFORMATION</md-button>
+                        </span>
+                    </div>
+                    <div>
+                        <span v-if="selectable">
+                            <md-checkbox v-model="pattern.selected">Use this Pattern</md-checkbox>
+                        </span>
+                    </div>
+                </md-card-actions>
+            </md-card-expand>
+        </md-card>
+        <br>
+    </div>
+</template>
+
+<script>
+export default {
+    name: 'PatternCard',
+    data() {
+        return {
+            showDialog: false,
+        }
+    },
+    props: {
+        pattern: {
+            default: {},
+            required: true,
+        },
+        selectable: {
+            default: false,
+            required: false,
+        }
+    },
+    methods: {
+        truncate(word, maxChar) {
+            try {
+                return `${word.substring(0, maxChar)}${word.length > maxChar ? '...' : ''}`;
+            } catch {
+                return word;
+            }
+            
+        },
+        splitUriOnLastSlash(uri) {
+            try {
+                return (uri.substring(uri.lastIndexOf('/') + 1));
+            } catch {
+                return uri;
+            }
+        },
+        capitalize(word) {
+            try {
+                return `${word.substring(0, 1).toUpperCase()}${word.substring(1).toLowerCase()}`;
+            } catch {
+                return word;
+            }
+        },
+    },
+};
+</script>
+
+<style>
+    .pattern-text {
+        white-space: initial !important;
+    }
+
+    .pattern-chips {
+        text-align: right !important;
+    }
+
+    .md-list-item-text {
+        display: block !important;
+        white-space: initial !important;
+        overflow: hidden !important;
+        text-overflow: ellipsis !important;
+        padding-right: 20px !important;
+    }
+    .md-list-item-content > .md-icon:last-child {
+        margin-left: 0 !important;
+    }
+</style>
\ No newline at end of file
diff --git a/ARCHITECT/architect-ui/src/components/PatternList.vue b/ARCHITECT/architect-ui/src/components/PatternList.vue
new file mode 100644
index 0000000000000000000000000000000000000000..49e334a252cc11ef04357fda5f338812e85cde1c
--- /dev/null
+++ b/ARCHITECT/architect-ui/src/components/PatternList.vue
@@ -0,0 +1,129 @@
+<!--
+Copyright (c) 2017 Fraunhofer FOKUS.
+All rights reserved. This program and the accompanying materials
+are made available under the terms of the
+GNU AGPL v3 which accompanies
+this distribution, and is available at
+http://www.gnu.org/licenses/agpl.txt
+
+Contributors:
+Simon Dutkowski Fraunhofer FOKUS
+
+Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+-->
+<template>
+    <div>
+        <!-- PATTERN LIST -->
+        <md-list class="pattern-list"> 
+            <span v-for="category in getAllVisibleCategories" :key="category">
+                <md-app md-waterfall md-mode="fixed">
+                    <md-app-toolbar class="md-primary">
+                        <h3 class="md-title">{{ category }}</h3>
+                        <md-button class="md-icon-button" @click="toggledCategories[type][category] = !toggledCategories[type][category]">
+                            <md-icon v-if="toggledCategories[type][category]">keyboard_arrow_up</md-icon>
+                            <md-icon v-else>keyboard_arrow_down</md-icon>
+                        </md-button>
+                        <md-button class="md-icon-button" @click="visibleCategories[type][category] = false;">
+                            <md-icon>close</md-icon>
+                        </md-button>
+                    </md-app-toolbar>
+
+                    <md-app-content class="md-scrollbar" v-if="toggledCategories[type][category]">
+                        <pattern-card v-for="pattern in patternList[category]" 
+                                      :key="pattern.uriRef" 
+                                      :pattern="pattern" 
+                                      :selectable="selectablePatterns && category !== 'Basic'">
+                        </pattern-card>
+                        <div class="md-title" v-if="!patternList[category] || patternList[category].length === 0">
+                            <md-empty-state md-icon="devices_other" :md-description="emptyMessage">
+                                <md-button class="md-primary md-raised" @click="visibleCategories[type][category] = false;">
+                                    HIDE THIS CATEGORY
+                                </md-button>
+                            </md-empty-state>
+                        </div>
+                    </md-app-content>
+                </md-app>
+            </span>
+        </md-list>
+    </div>
+</template>
+
+<script>
+import { mapGetters } from 'vuex';
+import PatternCard from './PatternCard';
+
+export default {
+    name: 'PatternList',
+    components: {
+        patternCard: PatternCard,
+    },
+    data() {
+        return {};
+    },
+    computed: {
+        ...mapGetters([
+            'getAllCategories',
+        ]),
+        getAllVisibleCategories() {
+            return this.getAllCategories.filter(category => this.visibleCategories[this.type][category])
+        },
+        visibleCategories: {
+            get() {
+                return this.$store.state.visibleCategories;
+            },
+            set(visibleCategories) {
+                this.$store.commit('SET_VISIBLE_CATEGORIES', visibleCategories);
+            },
+        },
+        toggledCategories: {
+            get() {
+                return this.$store.state.toggledCategories;
+            },
+            set(toggledCategories) {
+                this.$store.commit('SET_TOGGLED_CATEGORIES', toggledCategories);
+            },
+        },
+    },
+    props: {
+        patternList: {
+            default: [],
+            required: true,
+        },
+        type: {
+            default: 'allPatterns',
+            required: true,
+        },
+        selectablePatterns: {
+            default: false,
+            required: false,
+        },
+        emptyMessage: {
+            default: 'NO PATTERNS AVAILABLE FOR THIS CATEGORY',
+            required: false,
+        },
+    },
+};
+</script>
+
+<style>
+    .pattern-list {
+        background-color: transparent !important;
+    }
+
+    .md-app {
+        max-height: 85vh !important;
+        border-bottom: 1px solid rgba(0,0,0,0.1) !important;
+    }
+
+    .md-app-scroller {
+        border-left: 1px solid rgba(0,0,0,0.1) !important;
+    }
+
+    .md-app-content {
+        border-left: 0 !important;
+    }
+
+    .md-app-toolbar .md-title {
+        flex: 1 !important;
+    }
+</style>
\ No newline at end of file
diff --git a/ARCHITECT/architect-ui/src/main.js b/ARCHITECT/architect-ui/src/main.js
new file mode 100644
index 0000000000000000000000000000000000000000..a9c5993f164e5aca100db9c5f9b5d0de4238c825
--- /dev/null
+++ b/ARCHITECT/architect-ui/src/main.js
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2017 Fraunhofer FOKUS.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the
+ * GNU AGPL v3 which accompanies
+ * this distribution, and is available at
+ * http://www.gnu.org/licenses/agpl.txt
+ *
+ * Contributors:
+ * Simon Dutkowski Fraunhofer FOKUS
+ *
+ * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+ */
+import '@babel/polyfill';
+import 'es6-promise/auto';
+
+import Vue from 'vue'
+import store from './store/store';
+import App from './App.vue'
+
+import VueMaterial from 'vue-material'
+import 'vue-material/dist/vue-material.css'
+import 'vue-material/dist/theme/default.css'
+
+Vue.use(VueMaterial)
+
+Vue.config.productionTip = false
+
+new Vue({
+  el: '#app',
+  store,
+  components: { App },
+  render: h => h(App)
+});
+
diff --git a/ARCHITECT/architect-ui/src/store/store.js b/ARCHITECT/architect-ui/src/store/store.js
new file mode 100644
index 0000000000000000000000000000000000000000..32e501225554d9db46dada8facdb7c31a1ebc5eb
--- /dev/null
+++ b/ARCHITECT/architect-ui/src/store/store.js
@@ -0,0 +1,373 @@
+/*
+ * Copyright (c) 2017 Fraunhofer FOKUS.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the
+ * GNU AGPL v3 which accompanies
+ * this distribution, and is available at
+ * http://www.gnu.org/licenses/agpl.txt
+ *
+ * Contributors:
+ * Simon Dutkowski Fraunhofer FOKUS
+ *
+ * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+ */
+import Vue from 'vue';
+import Vuex from 'vuex';
+import axios from 'axios';
+import config from '../../app-config.json';
+
+Vue.use(Vuex);
+
+/**
+* Load all patterns (http://85.91.40.245:8001/#operation/listPatterns)
+*/
+let loadAllPatterns = () => {
+    return new Promise((resolve, reject) => {
+        axios
+            .get(`${state.serviceUri}/patterns`)
+                .then(response => {
+                    resolve(response.data);
+                })
+                .catch(error => {
+                    reject(error);
+                }); 
+    });
+};
+
+/**
+* Load all pattern details (http://85.91.40.245:8001/#operation/getPattern)
+* @param {Array} allPatterns - The list of all available patterns
+*/
+let loadAllPatternDetails = (allPatterns) => {
+    return new Promise((resolve, reject) => {
+        allPatterns.forEach((rec, index) => {
+            // Check if recommendation has a name or id property or use the uriRef instead
+            if(rec.name || rec.id || rec.uriRef) {
+                let patternName = rec.name || rec.id || (rec.uriRef.substring(rec.uriRef.lastIndexOf('/') + 1));
+                axios
+                    .get(`${state.serviceUri}/patterns/${patternName}`)
+                        .then(response => {
+                            allPatterns[index] = updatePattern(rec, response.data);
+
+                            // Request Pattern HTML Pages
+                            axios({
+                                    method: 'get',
+                                    url: `${state.serviceUri}/patterns/${patternName}`,
+                                    headers: {
+                                        'Accept': 'text/html',
+                                    }
+                                })
+                                .then(response => {
+                                    allPatterns[index] = updatePattern(rec, { html: response.data });
+                                })
+                                .catch(error => {
+                                    reject(error);
+                                }); 
+                        })
+                        .catch(error => {
+                            reject(error);
+                        }); 
+            }
+        }); 
+
+        resolve(allPatterns);
+    });
+};
+
+/**
+ * Collect all categories from available patterns
+ * @param {Array} allPatterns - The list of all available patterns
+ */
+let collectAllCategories = ({commit}, allPatterns) => {
+    let allCategories = [];
+    let visibleCategories = {
+        recommendedPatterns: {},
+        allPatterns: {},
+    };
+    let toggledCategories = {
+        recommendedPatterns: {},
+        allPatterns: {},
+    };
+
+    for(let pattern of allPatterns) {
+        for (let category of pattern.categories) {
+            category = capitalize(splitUriOnLastSlash(category));
+
+            if (!allCategories.includes(category)) {
+                allCategories.push(category);
+                visibleCategories['recommendedPatterns'][category] = true;
+                visibleCategories['allPatterns'][category] = true;
+                toggledCategories['recommendedPatterns'][category] = false;
+                toggledCategories['allPatterns'][category] = false;
+            }
+        }
+    }
+
+    commit('SET_ALL_CATEGORIES', allCategories);
+    commit('SET_VISIBLE_CATEGORIES', visibleCategories);
+    commit('SET_TOGGLED_CATEGORIES', toggledCategories);
+};
+
+/**
+ * Initialize the application (http://85.91.40.245:8001/#operation/initApplication)
+ * @param {Array} appRecommendations - The list of recommended patterns for this app
+ */
+let initApplication = ({commit}) => {
+    return new Promise((resolve, reject) => {
+        axios
+            .get(`${state.serviceUri}/applications/init?uri=${state.gitRepo}&token=${state.gitToken}`)
+                .then(response => {
+                    // Reject if GitRepo and GitToken are invalid
+                    if(response.data.success === false) reject();
+
+                    // Commit the name and return the recommendations of the application
+                    commit('SET_APP_NAME', response.data.app.name);
+                    resolve(response.data.app.recommendations);
+                })
+                .catch(error => {
+                    reject(error);
+                }); 
+    });
+};
+
+/**
+* Load all app recommendation details (http://85.91.40.245:8001/#operation/getPattern)
+* @param {Array} appRecommendations - The list of recommended patterns for this app
+*/
+let loadRecommendationDetails = (appRecommendations) => {
+    return new Promise((resolve, reject) => {
+        appRecommendations.forEach((rec, index) => {
+            // Check if recommendation has a name or id property or use the uriRef instead
+            if(rec.name || rec.id || rec.uriRef) {
+                let patternName = rec.name || rec.id || (rec.uriRef.substring(rec.uriRef.lastIndexOf('/') + 1));
+                axios
+                    .get(`${state.serviceUri}/patterns/${patternName}`)
+                        .then(response => {
+                            appRecommendations[index] = updatePattern(rec, response.data);
+                        })
+                        .catch(error => {
+                            reject(error);
+                        }); 
+            }
+        });
+
+        resolve(appRecommendations);
+    });
+};
+
+/**
+ * Submit all patterns
+ * @param {String} name - The name of the application 
+ */
+let submitAllPatterns = () => {
+    return new Promise((resolve, reject) => {
+        axios
+            .put(`${state.serviceUri}/applications/${state.appName}/recommendations`, state.appRecommendations)
+                .then(() => resolve())
+                .catch(error => {
+                    reject(error);
+                }); 
+    });
+};
+
+/**
+* Updates all properties in the given object pattern and add new ones
+* @param {Object} pattern - The pattern which should be updated
+* @param {Object} data - The object which contains the new data
+*/
+let updatePattern = (pattern, data) => {
+   try {
+       for(let prop in data) pattern[prop] = data[prop];
+       return pattern;
+   } catch {
+       return pattern;
+   }
+};
+
+/**
+ * Return content after the last slash of the given URI
+ */
+let splitUriOnLastSlash = (uri) => {
+    try {
+        return (uri.substring(uri.lastIndexOf('/') + 1));
+    } catch {
+        return uri;
+    }
+};
+
+/**
+ * Capitalize the first letter of the given word
+ */
+let capitalize = (word) => {
+    try {
+        return `${word.substring(0, 1).toUpperCase()}${word.substring(1).toLowerCase()}`;
+    } catch {
+        return word;
+    }
+};
+
+
+
+const state = {
+    serviceUri: config.serviceUri,
+    gitRepo: config.defaultGitRepo,
+    gitToken: config.defaultGitToken,
+    allCategories: [],
+    visibleCategories: {
+        recommendedPatterns: {},
+        allPatterns: {},
+    },
+    toggledCategories: {
+        recommendedPatterns: {},
+        allPatterns: {},
+    },
+    allPatterns: [],
+    appName: '',
+    appRecommendations: [],
+};
+
+const getters = {
+    getAllCategories: state => state.allCategories,
+    getAllPatterns: state => state.allPatterns,
+    getAppName: state => state.appName,
+    getAppRecommendations: state => state.appRecommendations,
+};
+
+const actions = {
+    /**
+     * Set the Git Repo
+     */
+    setGitRepo({commit}, gitRepo) {
+        commit('SET_GIT_REPO', gitRepo);
+    },
+    /**
+     * Set the Git Token
+     */
+    setGitToken({commit}, gitToken) {
+        commit('SET_GIT_TOKEN', gitToken);
+    },
+    /**
+    * Load all patterns (http://85.91.40.245:8001/#operation/listPatterns)
+    */
+    loadPatterns({commit}) {
+        return loadAllPatterns()
+            .then(allPatterns => {
+                loadAllPatternDetails(allPatterns)
+                    .then(allPatterns => {
+                        // Commit the patterns
+                        commit('SET_ALL_PATTERNS', allPatterns);
+
+                        // Collect all categories
+                        collectAllCategories({commit}, allPatterns);
+                    });
+            });
+    },
+    
+    /**
+     * Init new application (http://85.91.40.245:8001/#operation/initApplication)
+     */
+    initApp({commit}) {
+        return initApplication({commit})
+            .then((appRecommendations) => {
+                loadRecommendationDetails(appRecommendations)
+                    .then(appRecommendations => {
+                        // Commit the appRecommendations of the application
+                        commit('SET_APP_RECOMMENDATIONS', appRecommendations);
+                    });
+            });
+    },
+    /**
+    * Get application (http://85.91.40.245:8001/#operation/getApplication)
+    * @param {String} name - The name of the application (from initApp())
+    */
+    // getApplication({commit}, name) {
+    //     return new Promise((resolve, reject) => {
+    //         axios
+    //             .get(`${state.serviceUri}/applications/${name}`)
+    //                 .then(response => {
+    //                     // Reject if GitRepo and GitToken are invalid
+    //                     if(response.data.success === false) reject();
+
+    //                     // Commit the name and recommendations of the application
+    //                     commit('SET_APP_NAME', response.data.app.name);
+    //                     commit('SET_APP_RECOMMENDATIONS', response.data.app.recommendations);
+    //                     resolve();
+    //                 })
+    //                 .catch(error => {
+    //                     reject(error);
+    //                 }); 
+    //     });
+    // },
+    /**
+    * Get recommended patterns for this application (http://85.91.40.245:8001/#operation/getRecommendations)
+    * @param {String} name - The name of the application (from initApp())
+    */
+    // loadAppRecommendations({commit}, name) {
+    //     return new Promise((resolve, reject) => {
+    //         axios
+    //             .get(`${state.serviceUri}/applications/${name}/recommendations`)
+    //                 .then(response => {
+    //                     // Reject if GitRepo and GitToken are invalid
+    //                     if(response.data.success === false) reject();
+
+    //                     // Commit the name and recommendations of the application
+    //                     commit('SET_APP_NAME', response.data.app.name);
+    //                     commit('SET_APP_RECOMMENDATIONS', response.data.app.recommendations);
+    //                     resolve();
+    //                 })
+    //                 .catch(error => {
+    //                     reject(error);
+    //                 }); 
+    //     });
+    // },
+    /**
+     * Update recommended Patterns (http://85.91.40.245:8001/#operation/putRecommendations)
+     */
+    // eslint-disable-next-line
+    submitPatterns({commit}) {
+        // Submit selected patterns
+        return submitAllPatterns();
+    },
+};
+
+const mutations = {
+    SET_SERVICE_URI(state, serviceUri) {
+        state.serviceUri = serviceUri;
+    },
+    SET_GIT_REPO(state, gitRepo) {
+        state.gitRepo = gitRepo;
+    },
+    SET_GIT_TOKEN(state, gitToken) {
+        state.gitToken = gitToken;
+    },
+    SET_ALL_CATEGORIES(state, allCategories) {
+        state.allCategories = allCategories;
+    },
+    SET_VISIBLE_CATEGORIES(state, visibleCategories) {
+        state.visibleCategories = visibleCategories;
+    },
+    SET_TOGGLED_CATEGORIES(state, toggledCategories) {
+        state.toggledCategories = toggledCategories;
+    },
+    SET_ALL_PATTERNS(state, allPatterns) {
+        state.allPatterns = allPatterns;
+    },
+    SET_APP_NAME(state, appName) {
+        state.appName = appName;
+    },
+    SET_APP_RECOMMENDATIONS(state, appRecommendations) {
+        state.appRecommendations = [];
+
+        // Remove duplicates from app recommendations array as they will produce errors
+        for(let appRec of appRecommendations) {
+            if(state.appRecommendations.map(uniqueAppRec => uniqueAppRec.uriRef).indexOf(appRec.uriRef) === -1) state.appRecommendations.push(appRec);
+        }
+    },
+};
+
+export default new Vuex.Store({
+    state,
+    getters,
+    actions,
+    mutations,
+});
\ No newline at end of file
diff --git a/ARCHITECT/architect-ui/vue.config.js b/ARCHITECT/architect-ui/vue.config.js
new file mode 100644
index 0000000000000000000000000000000000000000..e3535a29b27a31efe43e955f82092af4ffeb65f3
--- /dev/null
+++ b/ARCHITECT/architect-ui/vue.config.js
@@ -0,0 +1,5 @@
+module.exports = {
+    devServer: {
+        port: 8090,
+    }
+};
\ No newline at end of file
diff --git a/ARCHITECT/architect/.gitignore b/ARCHITECT/architect/.gitignore
index 1e17081ec9b5bda69ca0a7b082b77d2699fb7405..b55233d1a4722ff1e4d5b39bd1cdffbb3fbe0ecd 100644
--- a/ARCHITECT/architect/.gitignore
+++ b/ARCHITECT/architect/.gitignore
@@ -5,3 +5,5 @@
 
 **/libs/
 **/target/
+
+*~
diff --git a/ARCHITECT/architect/.gitlab-ci.yml b/ARCHITECT/architect/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..31161b135773d2773222e027f650837abdf74c46
--- /dev/null
+++ b/ARCHITECT/architect/.gitlab-ci.yml
@@ -0,0 +1,30 @@
+image: maven:alpine
+
+variables:
+  MAVEN_CLI_OPTS: "--batch-mode"
+
+before_script:
+  - apk update && apk upgrade && apk add git
+  - git config --global user.email "$GITLAB_USER_EMAIL"
+  - git config --global user.name "$GITLAB_USER_NAME"
+  - git checkout -B "$CI_BUILD_REF_NAME"
+  - git pull origin "$CI_BUILD_REF_NAME"
+
+deploy_snapshot:
+  stage: deploy
+  only:
+    - master
+  script:
+    - mvn $MAVEN_CLI_OPTS clean verify -Dmaven.test.skip=true
+  artifacts:
+    name: site-repository
+    paths:
+      - site/target/repository/
+
+deploy_release:
+  stage: deploy
+  only:
+    - release
+  script:
+    - mvn $MAVEN_CLI_OPTS -Darguments="-DskipTests" -DscmCommentPrefix="[ci skip] - " release:clean release:prepare -B release:perform
+
diff --git a/ARCHITECT/architect/editor/META-INF/MANIFEST.MF b/ARCHITECT/architect/editor/META-INF/MANIFEST.MF
index 15cccc590226636a3b72d6fda93283791c81b456..180775b91a5f966594c2fc2ee665cf2081384eb8 100644
--- a/ARCHITECT/architect/editor/META-INF/MANIFEST.MF
+++ b/ARCHITECT/architect/editor/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: DECIDE Editor
 Bundle-SymbolicName: eu.DECIDEh2020.architect.plugin;singleton:=true
-Bundle-Version: 1.0.1
+Bundle-Version: 1.0.1.qualifier
 Require-Bundle: org.eclipse.jface.text,
  org.eclipse.core.resources,
  org.eclipse.ui,
@@ -16,13 +16,16 @@ Require-Bundle: org.eclipse.jface.text,
  org.eclipse.jgit;bundle-version="4.8.0",
  org.eclipse.core.databinding.beans,
  org.eclipse.core.databinding,
- org.eclipse.jface.databinding
+ org.eclipse.jface.databinding,
+ eu.DECIDEh2020.architect.plugin,
+ eu.DECIDEh2020.architect.plugin
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Import-Package: org.eclipse.ui.views.contentoutline
+Import-Package: eu.DECIDEh2020.appManager.models,
+ org.eclipse.ui.views.contentoutline
 Bundle-ClassPath: .,
  libs/animal-sniffer-annotations-1.14.jar,
- libs/app-controller-0.0.15.jar,
- libs/cloudpatterns-1.2.0.jar,
+ libs/app-controller-0.0.16-SNAPSHOT.jar,
+ libs/cloudpatterns-2.0-SNAPSHOT.jar,
  libs/collection-0.7.jar,
  libs/commons-beanutils-1.9.2.jar,
  libs/commons-cli-1.4.jar,
@@ -41,9 +44,9 @@ Bundle-ClassPath: .,
  libs/httpclient-cache-4.5.3.jar,
  libs/httpcore-4.4.6.jar,
  libs/j2objc-annotations-1.1.jar,
- libs/jackson-annotations-2.9.5.jar,
- libs/jackson-core-2.9.5.jar,
- libs/jackson-databind-2.9.5.jar,
+ libs/jackson-annotations-2.9.6.jar,
+ libs/jackson-core-2.9.6.jar,
+ libs/jackson-databind-2.9.6.jar,
  libs/JavaEWAH-1.1.6.jar,
  libs/jcl-over-slf4j-1.7.25.jar,
  libs/jena-arq-3.7.0.jar,
@@ -72,20 +75,100 @@ Bundle-ClassPath: .,
  libs/re2j-1.1.jar,
  libs/slf4j-api-1.7.25.jar,
  libs/xercesImpl-2.11.0.jar,
- libs/xml-apis-1.4.01.jar
+ libs/xml-apis-1.4.01.jar,
+ libs/jackson-jaxrs-base-2.9.5.jar,
+ libs/jackson-jaxrs-json-provider-2.9.5.jar,
+ libs/cxf-rt-rs-client-3.1.11.jar,
+ libs/eu.DECIDEh2020.optimus.client-2.0.0.jar,
+ libs/json-simple-1.1.1.jar,
+ libs/javax.ws.rs-api-2.0.1.jar,
+ libs/cxf-core-3.1.11.jar,
+ libs/cxf-rt-frontend-jaxrs-3.1.11.jar,
+ libs/cxf-rt-rs-service-description-3.1.11.jar,
+ libs/cxf-rt-transports-http-3.1.11.jar,
+ libs/cxf-rt-ws-policy-3.1.11.jar,
+ libs/cxf-rt-wsdl-3.1.11.jar,
+ libs/neethi-3.0.3.jar,
+ libs/eu.decideh2020.ACSmI.discovery.backend.client-1.0.0.jar
 Automatic-Module-Name: eu.DECIDEh2020.architect.editor
-Export-Package: com.fasterxml.jackson.core,
+Export-Package: com.fasterxml.jackson.core;
+  uses:="com.fasterxml.jackson.core.format,
+   com.fasterxml.jackson.core.async,
+   com.fasterxml.jackson.core.type,
+   com.fasterxml.jackson.core.io,
+   com.fasterxml.jackson.core.util,
+   com.fasterxml.jackson.core.sym",
  com.fasterxml.jackson.databind,
- com.fasterxml.jackson.databind.node,
- eu.DECIDEh2020.appManager,
+ com.fasterxml.jackson.databind.node;
+  uses:="com.fasterxml.jackson.databind.util,
+   com.fasterxml.jackson.core,
+   com.fasterxml.jackson.databind.jsontype,
+   com.fasterxml.jackson.databind,
+   com.fasterxml.jackson.core.base",
+ com.fasterxml.jackson.jaxrs.json,
+ eu.DECIDEh2020.appManager;
+  uses:="eu.DECIDEh2020.appManager.persistence,
+   eu.DECIDEh2020.appManager.models,
+   com.fasterxml.jackson.databind,
+   com.fasterxml.jackson.databind.node",
  eu.DECIDEh2020.appManager.exceptions,
- eu.DECIDEh2020.appManager.models,
+ eu.DECIDEh2020.appManager.models;uses:="com.fasterxml.jackson.databind",
  eu.DECIDEh2020.appManager.persistence,
- eu.DECIDEh2020.architect.cloudpatterns,
- eu.DECIDEh2020.architect.plugin.descriptorWizard,
- eu.DECIDEh2020.architect.plugin.editor,
- eu.DECIDEh2020.architect.plugin.layoutComponents,
- eu.DECIDEh2020.architect.plugin.natures,
- eu.DECIDEh2020.architect.plugin.utils,
- org.eclipse.wb.swt
+ eu.DECIDEh2020.architect.cloudpatterns;uses:="com.fasterxml.jackson.databind.node,org.apache.jena.rdf.model",
+ eu.DECIDEh2020.architect.plugin.descriptorWizard;
+  uses:="eu.DECIDEh2020.appManager.persistence,
+   org.eclipse.swt.widgets,
+   org.eclipse.ui.dialogs,
+   org.eclipse.jface.wizard,
+   org.eclipse.core.databinding,
+   org.eclipse.jface.viewers,
+   org.eclipse.ui,
+   org.eclipse.core.runtime,
+   eu.DECIDEh2020.appManager.models,
+   org.eclipse.core.resources,
+   eu.DECIDEh2020.appManager",
+ eu.DECIDEh2020.architect.plugin.editor;
+  uses:="org.eclipse.ui,
+   org.eclipse.core.runtime,
+   org.eclipse.ui.texteditor,
+   org.eclipse.jface.action,
+   eu.DECIDEh2020.appManager.models,
+   org.eclipse.swt.widgets,
+   org.eclipse.core.resources,
+   org.eclipse.ui.views.contentoutline,
+   org.eclipse.ui.part",
+ eu.DECIDEh2020.architect.plugin.layoutComponents;
+  uses:="org.eclipse.swt.events,
+   org.eclipse.swt.graphics,
+   eu.DECIDEh2020.appManager.models,
+   org.eclipse.swt.widgets,
+   org.eclipse.core.databinding,
+   org.eclipse.jface.viewers",
+ eu.DECIDEh2020.architect.plugin.natures;uses:="org.eclipse.core.resources,org.eclipse.core.commands",
+ eu.DECIDEh2020.architect.plugin.utils;uses:="com.fasterxml.jackson.databind.node",
+ eu.decideh2020.ACSmI.discovery.backend.client.api,
+ eu.decideh2020.ACSmI.discovery.backend.client.model,
+ eu.decideh2020.optimus.client.api,
+ eu.decideh2020.optimus.client.model,
+ javax.ws.rs,
+ org.apache.cxf.bus.extension,
+ org.apache.cxf.endpoint,
+ org.apache.cxf.jaxrs.client,
+ org.apache.cxf.jaxrs.ext.multipart,
+ org.apache.cxf.jaxrs.impl,
+ org.apache.cxf.ws.policy,
+ org.apache.cxf.ws.policy.attachment,
+ org.apache.cxf.ws.policy.attachment.external,
+ org.apache.cxf.ws.policy.attachment.reference,
+ org.apache.cxf.ws.policy.attachment.wsdl11,
+ org.apache.cxf.ws.policy.blueprint,
+ org.apache.cxf.ws.policy.builder.jaxb,
+ org.apache.cxf.ws.policy.builder.primitive,
+ org.apache.cxf.ws.policy.mtom,
+ org.apache.cxf.ws.policy.selector,
+ org.apache.cxf.ws.policy.spring,
+ org.apache.cxf.ws.policy.v200607,
+ org.apache.neethi,
+ org.eclipse.wb.swt;uses:="org.eclipse.swt.graphics,org.eclipse.jface.resource",
+ org.json.simple
 Bundle-Activator: eu.DECIDEh2020.architect.plugin.Activator
diff --git a/ARCHITECT/architect/editor/build.properties b/ARCHITECT/architect/editor/build.properties
index b67cf0afd67306c507cae852cdcb33cc524df115..c89b45496515d8bb02e9e14637ffe2f08d3257cd 100644
--- a/ARCHITECT/architect/editor/build.properties
+++ b/ARCHITECT/architect/editor/build.properties
@@ -5,8 +5,8 @@ bin.includes = plugin.xml,\
                icons/,\
                .,\
                libs/animal-sniffer-annotations-1.14.jar,\
-               libs/app-controller-0.0.15.jar,\
-               libs/cloudpatterns-1.2.0.jar,\
+               libs/app-controller-0.0.16-SNAPSHOT.jar,\
+               libs/cloudpatterns-2.0-SNAPSHOT.jar,\
                libs/collection-0.7.jar,\
                libs/commons-beanutils-1.9.2.jar,\
                libs/commons-cli-1.4.jar,\
@@ -25,9 +25,9 @@ bin.includes = plugin.xml,\
                libs/httpclient-cache-4.5.3.jar,\
                libs/httpcore-4.4.6.jar,\
                libs/j2objc-annotations-1.1.jar,\
-               libs/jackson-annotations-2.9.5.jar,\
-               libs/jackson-core-2.9.5.jar,\
-               libs/jackson-databind-2.9.5.jar,\
+               libs/jackson-annotations-2.9.6.jar,\
+               libs/jackson-core-2.9.6.jar,\
+               libs/jackson-databind-2.9.6.jar,\
                libs/JavaEWAH-1.1.6.jar,\
                libs/jcl-over-slf4j-1.7.25.jar,\
                libs/jena-arq-3.7.0.jar,\
@@ -56,7 +56,24 @@ bin.includes = plugin.xml,\
                libs/re2j-1.1.jar,\
                libs/slf4j-api-1.7.25.jar,\
                libs/xercesImpl-2.11.0.jar,\
-               libs/xml-apis-1.4.01.jar
+               libs/xml-apis-1.4.01.jar,\
+               /CloudPatterns/target/cloudpatterns-1.2.1-SNAPSHOT-shaded.jar,\
+               libs/eu.DECIDEh2020.architect.plugin-1.0.1.qualifier-libs/,\
+               libs/jackson-jaxrs-base-2.9.5.jar,\
+               libs/jackson-jaxrs-json-provider-2.9.5.jar,\
+               libs/cxf-rt-rs-client-3.1.11.jar,\
+               libs/eu.DECIDEh2020.optimus.client-2.0.0.jar,\
+               libs/json-simple-1.1.1.jar,\
+               libs/javax.ws.rs-api-2.0.1.jar,\
+               libs/cxf-core-3.1.11.jar,\
+               libs/cxf-rt-frontend-jaxrs-3.1.11.jar,\
+               libs/cxf-rt-rs-service-description-3.1.11.jar,\
+               libs/cxf-rt-transports-http-3.1.11.jar,\
+               libs/cxf-rt-ws-policy-3.1.11.jar,\
+               libs/cxf-rt-wsdl-3.1.11.jar,\
+               libs/neethi-3.0.3.jar,\
+               libs/eu.decideh2020.ACSmI.discovery.backend.client-1.0.0.jar
 jars.compile.order = .
 bin.excludes = libs/apache-jena-libs-3.7.0.pom,\
-               libs/eu.DECIDEh2020.architect.plugin-1.0.1-libs/
+               libs/eu.DECIDEh2020.architect.plugin-1.0.0.qualifier-libs/
+source./CloudPatterns/target/cloudpatterns-1.2.1-SNAPSHOT-shaded.jar = src/
diff --git a/ARCHITECT/architect/editor/pom.xml b/ARCHITECT/architect/editor/pom.xml
index 1609c8510925aabe3d1eaec0fde3534cdd951b8e..e8d98bae97a05af269a8b572e31d5e3d301deb2c 100644
--- a/ARCHITECT/architect/editor/pom.xml
+++ b/ARCHITECT/architect/editor/pom.xml
@@ -7,7 +7,7 @@
 	<parent>
 		<groupId>eu.DECIDEh2020</groupId>
 		<artifactId>architect</artifactId>
-		<version>1.0.1</version>
+		<version>1.0.1-SNAPSHOT</version>
 		<relativePath>..</relativePath>
 	</parent>
 
@@ -22,12 +22,12 @@
 		<dependency>
 			<groupId>eu.DECIDEh2020</groupId>
 			<artifactId>cloudpatterns</artifactId>
-			<version>1.2.0</version>
+			<version>2.0-SNAPSHOT</version>
 		</dependency>
 		<dependency>
 			<groupId>eu.DECIDEh2020</groupId>
 			<artifactId>app-controller</artifactId>
-			<version>0.0.15</version>
+			<version>0.0.16-SNAPSHOT</version>
 		</dependency>
 	</dependencies>
 
diff --git a/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/descriptorWizard/MicroservicePage.java b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/descriptorWizard/MicroservicePage.java
index 373b4c3f1f8bedcb4198c13fd6e90d69e10274c0..edafe9f98dfd469199cd93733e1bc4a987284ac8 100644
--- a/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/descriptorWizard/MicroservicePage.java
+++ b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/descriptorWizard/MicroservicePage.java
@@ -1,97 +1,94 @@
-/*
-* Copyright (c) 2017 Fraunhofer FOKUS.
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the
-* Eclipse Public License version 2.0 which accompanies
-* this distribution, and is available at
-* https://opensource.org/licenses/EPL-2.0
-*
-* Contributors:
-*
-* Torben Jastrow (Fraunhofer FOKUS) 
-* 
-* **Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu */
-
-package eu.DECIDEh2020.architect.plugin.descriptorWizard;
-
-import org.eclipse.jface.wizard.WizardPage;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.custom.ScrolledComposite;
-
-import eu.DECIDEh2020.appManager.models.AppDescription;
-import eu.DECIDEh2020.appManager.models.Microservice;
-import eu.DECIDEh2020.architect.plugin.layoutComponents.MicroserviceComposite;
-
-import java.util.List;
-
-//Wizard page that contains a list of all microservices & functions to change their properties
-public class MicroservicePage extends WizardPage {
-
-    private ScrolledComposite scrolledComposite;
-    private Composite container;
-    private AppDescription project;
-
-    public MicroservicePage(AppDescription project) {
-	super("Microservice Settings");
-	setTitle("Microservice Settings");
-	setDescription("Configure each Microservice here");
-	this.project = project;
-    }
-
-    @Override
-    public void createControl(Composite parent) {
-
-	scrolledComposite = new ScrolledComposite(parent, SWT.V_SCROLL);
-	scrolledComposite.setExpandHorizontal(true);
-	scrolledComposite.setExpandVertical(true);
-	setControl(scrolledComposite);
-	container = new Composite(scrolledComposite, SWT.NONE);
-	scrolledComposite.setContent(container);
-	container.setLayout(new GridLayout(1, false));
-	scrolledComposite.setExpandVertical(true);
-	scrolledComposite.setExpandHorizontal(true);
-	scrolledComposite.addListener(SWT.Resize, event -> {
-	    int width = scrolledComposite.getClientArea().width;
-	    scrolledComposite.setMinSize(container.computeSize(width, SWT.DEFAULT));
-	});
-
-	setPageComplete(true);
-    }
-
-    private void addMicroserviceComposite(Microservice microservice) {
-	if (microservice != null) {
-	    @SuppressWarnings("unused")
-	    Composite msvContainer = new MicroserviceComposite(container, microservice, project);
-	}
-    }
-
-    public void setMicroservices() {
-	// first remove all microservice composites & then add new ones
-	Control[] children = container.getChildren();
-	for (int i = 0; i < children.length; i++) {
-	    children[i].dispose();
-	}
-
-	addMicroservices();
-	container.requestLayout();
-	int width = scrolledComposite.getClientArea().width;
-	scrolledComposite.setMinSize(container.computeSize(width, SWT.DEFAULT));
-	scrolledComposite.requestLayout();
-
-    }
-
-    private void addMicroservices() {
-
-	List<Microservice> microservices = project.getMicroservices();
-	if (microservices.size() > 0) {
-	    for (Microservice m : microservices) {
-		addMicroserviceComposite(m);
-	    }
-
-	}
-
-    }
-}
+/*
+* Copyright (c) 2017 Fraunhofer FOKUS.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the
+* Eclipse Public License version 2.0 which accompanies
+* this distribution, and is available at
+* https://opensource.org/licenses/EPL-2.0
+*
+* Contributors:
+*
+* Torben Jastrow (Fraunhofer FOKUS) 
+* 
+* **Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu */
+
+package eu.DECIDEh2020.architect.plugin.descriptorWizard;
+
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.wb.swt.SWTResourceManager;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.custom.ScrolledComposite;
+
+import eu.DECIDEh2020.appManager.models.AppDescription;
+import eu.DECIDEh2020.appManager.models.Microservice;
+import eu.DECIDEh2020.architect.plugin.layoutComponents.MicroserviceComposite;
+
+import java.util.List;
+
+//Wizard page that contains a list of all microservices & functions to change their properties
+public class MicroservicePage extends WizardPage {
+
+    private ScrolledComposite scrolledComposite;
+    private Composite container;
+    private AppDescription project;
+
+    public MicroservicePage(AppDescription project) {
+    	super("Microservice Settings");
+    	setTitle("Microservice Settings");
+    	setDescription("Configure each Microservice here");
+    	this.project = project;
+    }
+
+    @Override
+    public void createControl(Composite parent) {
+
+    	scrolledComposite = new ScrolledComposite(parent, SWT.V_SCROLL);
+    	scrolledComposite.setExpandHorizontal(true);
+    	scrolledComposite.setExpandVertical(true);
+    	setControl(scrolledComposite); 
+    	container = new Composite(scrolledComposite, SWT.NONE);
+    	scrolledComposite.setContent(container);
+    	container.setLayout(new GridLayout(1, false));
+    	container.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+    	scrolledComposite.addListener(SWT.Resize, event -> {
+    		int width = scrolledComposite.getClientArea().width;
+    		scrolledComposite.setMinSize(container.computeSize(width, SWT.DEFAULT));
+    	});
+
+    	setPageComplete(true);
+    }
+
+    private void addMicroserviceComposite(Microservice microservice) {
+	if (microservice != null) {
+	    @SuppressWarnings("unused")
+	    Composite msvContainer = new MicroserviceComposite(container, microservice, project);
+	}
+    }
+
+    public void setMicroservices() {
+	// first remove all microservice composites & then add new ones
+	Control[] children = container.getChildren();
+	for (int i = 0; i < children.length; i++) {
+	    children[i].dispose();
+	}
+
+	addMicroservices();
+	container.requestLayout();
+	int width = scrolledComposite.getClientArea().width;
+	scrolledComposite.setMinSize(container.computeSize(width, SWT.DEFAULT));
+	scrolledComposite.requestLayout();
+
+    }
+
+    private void addMicroservices() {
+    	List<Microservice> microservices = project.getMicroservices();
+    	if (microservices.size() > 0) {
+    		for (Microservice m : microservices) {
+    			addMicroserviceComposite(m);
+    		}
+    	}
+    }
+}
diff --git a/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/editor/MultiPageEditor.java b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/editor/MultiPageEditor.java
index fe987a44a61e7e26708d04d9c68ea8d3971af903..72d07eb936ab0c79c7b778dc247f3ba5e0e1986e 100644
--- a/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/editor/MultiPageEditor.java
+++ b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/editor/MultiPageEditor.java
@@ -1,23 +1,23 @@
-/*
-* Copyright (c) 2017 Fraunhofer FOKUS.
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the
-* Eclipse Public License version 2.0 which accompanies
-* this distribution, and is available at
-* https://opensource.org/licenses/EPL-2.0
-*
-* Contributors:
-*
-* Torben Jastrow (Fraunhofer FOKUS) 
-* 
-* **Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu */
-package eu.DECIDEh2020.architect.plugin.editor;
+/*
+* Copyright (c) 2017 Fraunhofer FOKUS.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the
+* Eclipse Public License version 2.0 which accompanies
+* this distribution, and is available at
+* https://opensource.org/licenses/EPL-2.0
+*
+* Contributors:
+*
+* Torben Jastrow (Fraunhofer FOKUS) 
+* 
+* **Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu */
+package eu.DECIDEh2020.architect.plugin.editor;
 
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.List;
-
+import java.util.List;
+
 import org.eclipse.core.resources.IMarker;
 import org.eclipse.core.resources.IResourceChangeEvent;
 import org.eclipse.core.resources.IResourceChangeListener;
@@ -27,8 +27,8 @@ import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.ISafeRunnable;
 import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.SafeRunner;
-import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.SafeRunner;
+import org.eclipse.core.runtime.Status;
 import org.eclipse.jface.dialogs.ErrorDialog;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Display;
@@ -40,14 +40,13 @@ import org.eclipse.ui.ide.IDE;
 import org.eclipse.ui.views.contentoutline.*;
 import org.eclipse.wst.json.core.contenttype.ContentTypeIdForJSON;
 import org.eclipse.wst.sse.ui.StructuredTextEditor;
-import org.eclipse.swt.custom.ScrolledComposite;
 
-import com.fasterxml.jackson.core.JsonProcessingException;
-
+import com.fasterxml.jackson.core.JsonProcessingException;
+
 import eu.DECIDEh2020.appManager.AppDescriptionFactory;
 import eu.DECIDEh2020.appManager.AppDescriptionHelper;
-import eu.DECIDEh2020.appManager.models.AppDescription;
-import eu.DECIDEh2020.architect.plugin.Activator;
+import eu.DECIDEh2020.appManager.models.AppDescription;
+import eu.DECIDEh2020.architect.plugin.Activator;
 import eu.DECIDEh2020.architect.plugin.layoutComponents.NfrPageComposite;
 import eu.DECIDEh2020.architect.plugin.layoutComponents.ProjectPageComposite;
 
@@ -63,9 +62,10 @@ import eu.DECIDEh2020.architect.plugin.layoutComponents.ProjectPageComposite;
  * </ul>
  */
 public class MultiPageEditor extends MultiPageEditorPart implements IResourceChangeListener {
+
 	private static final String EXTENSION_ID ="eu.DECIDEh2020.architect.extension";
 	
-	/** The text editor used in the json page. */
+	/** The text editor used in the json page */
 	private StructuredTextEditor editor;
 
 	private AppDescription project;
@@ -92,6 +92,7 @@ public class MultiPageEditor extends MultiPageEditorPart implements IResourceCha
 		IConfigurationElement[] config = Platform.getExtensionRegistry().getConfigurationElementsFor(EXTENSION_ID);
 		evalConfigs(config);
 	}
+	
 	void evalConfigs(IConfigurationElement[] config) {
 		System.out.println("configs: " + config.length);
 		try {
@@ -130,6 +131,7 @@ public class MultiPageEditor extends MultiPageEditorPart implements IResourceCha
 	 * Creates the page of the multi-page editor,
 	 * which contains a json editor.
 	 */
+	
 	void createJSONPage() {
 		try {
 			editor = new StructuredTextEditor();
@@ -137,7 +139,6 @@ public class MultiPageEditor extends MultiPageEditorPart implements IResourceCha
 			int index = addPage(editor, getEditorInput());
 			setPageText(index, editor.getTitle());
 
-
 		} catch (PartInitException e) {
 			ErrorDialog.openError(
 					getSite().getShell(),
@@ -145,8 +146,8 @@ public class MultiPageEditor extends MultiPageEditorPart implements IResourceCha
 					null,
 					e.getStatus());
 		}
-		
 	}
+	
 	/**
 	 * Creates page 1 of the multi-page editor,
 	 * which contains the project overview.
@@ -158,6 +159,7 @@ public class MultiPageEditor extends MultiPageEditorPart implements IResourceCha
 		int index = addPage(ppage);
 		setPageText(index, "Project");
 	}
+	
 	/**
 	 * Creates page 2 of the multi-page editor,
 	 * which shows the NFR Editor.
@@ -201,6 +203,7 @@ public class MultiPageEditor extends MultiPageEditorPart implements IResourceCha
 		toJSON();
 		getEditor(0).doSave(monitor);
 	}
+
 	/**
 	 * Saves the multi-page editor's document as another file.
 	 * Also updates the text for page 0's tab, and updates this multi-page editor's input
@@ -212,6 +215,7 @@ public class MultiPageEditor extends MultiPageEditorPart implements IResourceCha
 		setPageText(0, editor.getTitle());
 		setInput(editor.getEditorInput());
 	}
+	
 	/* (non-Javadoc)
 	 * Method declared on IEditorPart
 	 */
@@ -273,12 +277,12 @@ public class MultiPageEditor extends MultiPageEditorPart implements IResourceCha
 			try {
 				page = (Page) getControl(newPageIndex);
 				page.open(project);
-			} catch (ClassCastException e) {
+			} catch (ClassCastException e) {
 				Activator.getDefault().getLog().log(new Status(Status.ERROR, Activator.PLUGIN_ID, "Open project page.", e));
 			}			
 		}
 		pageIndex= newPageIndex;
-	}
+	}
 	
 	/**
 	 * Closes all project files on project close.
@@ -308,15 +312,14 @@ public class MultiPageEditor extends MultiPageEditorPart implements IResourceCha
 	 */
 	void fromJSON() {
 		String editorText = editor.getDocumentProvider().getDocument(editor.getEditorInput()).get();
-			try {
+			try {
 				
 				project = AppDescriptionFactory.fromJson(editorText);
 			} catch (IOException e) {
-				// TODO Auto-generated catch block
 				e.printStackTrace();
 			}
-		if (project == null) {
-
+		if (project == null) {
+
 			System.out.println("project is null after reading JSON");
 		}
 
@@ -336,7 +339,6 @@ public class MultiPageEditor extends MultiPageEditorPart implements IResourceCha
 				AppDescriptionHelper adh = AppDescriptionHelper.create(project);
 				contents = adh.getJson();
 			} catch (JsonProcessingException e) {
-				// TODO Auto-generated catch block
 				e.printStackTrace();
 			}
 			// get editor content
@@ -405,7 +407,6 @@ public class MultiPageEditor extends MultiPageEditorPart implements IResourceCha
 			//show the view again     
 			PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView("org.eclipse.ui.views.ContentOutline");
 		} catch (PartInitException e) {
-			// TODO Auto-generated catch block
 			e.printStackTrace();
 		} 
 	}
diff --git a/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/editor/Page.java b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/editor/Page.java
index 6005fb5a22fa8357dfe0e20f0cb41aaa54cc370e..c62ca10485d4e8dae75829f9cedf20bdd2c25056 100644
--- a/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/editor/Page.java
+++ b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/editor/Page.java
@@ -1,35 +1,31 @@
-package eu.DECIDEh2020.architect.plugin.editor;
-
-import org.eclipse.swt.widgets.Composite;
-
-import eu.DECIDEh2020.appManager.models.AppDescription;
-
-// Used as Interface for all Pages from other plugins that need to be added to the main editor
-public abstract class Page extends Composite {
-	
-	private int index;
-	
-	public Page(Composite parent, int style,AppDescription appdescription) {
-		super(parent, style);
-		// TODO Auto-generated constructor stub
-	}
-
-	public abstract void open(AppDescription appdescription);
-
-	/**
-	 * @return the index
-	 */
-	public int getIndex() {
-		return index;
-	}
-
-	/**
-	 * @param index the index to set
-	 */
-	public void setIndex(int index) {
-		this.index = index;
-	}
-	
-	
-	
-}
+package eu.DECIDEh2020.architect.plugin.editor;
+
+import org.eclipse.swt.widgets.Composite;
+import eu.DECIDEh2020.appManager.models.AppDescription;
+
+// Used as Interface for all Pages from other plugins that need to be added to the main editor
+public abstract class Page extends Composite {
+	
+	private int index;
+	
+	public Page(Composite parent, int style, AppDescription appdescription) {
+		super(parent, style);
+	}
+
+	public abstract void open(AppDescription appdescription);
+
+	/**
+	 * @return the index
+	 */
+	public int getIndex() {
+		return index;
+	}
+
+	/**
+	 * @param index the index to set
+	 */
+	public void setIndex(int index) {
+		this.index = index;
+	}	
+}
+
diff --git a/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/AbstractValueEditingSupport.java b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/AbstractValueEditingSupport.java
new file mode 100644
index 0000000000000000000000000000000000000000..5dd47b9bbe9ce5db973e0cfc1a54e873189931e1
--- /dev/null
+++ b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/AbstractValueEditingSupport.java
@@ -0,0 +1,120 @@
+package eu.DECIDEh2020.architect.plugin.layoutComponents;
+
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.jface.viewers.ComboBoxCellEditor;
+import org.eclipse.jface.viewers.EditingSupport;
+import org.eclipse.jface.viewers.TableViewer;
+
+import eu.DECIDEh2020.appManager.models.AvailabilityNfr;
+import eu.DECIDEh2020.appManager.models.CostNfr;
+import eu.DECIDEh2020.appManager.models.LocationNfr;
+import eu.DECIDEh2020.appManager.models.PerformanceNfr;
+import eu.DECIDEh2020.appManager.models.ScalabilityNfr;
+
+public class AbstractValueEditingSupport extends EditingSupport {
+	private final TableViewer viewer;
+	private final ComboBoxCellEditor editor;
+	String[] abstractValues;
+	String type;
+	
+	public AbstractValueEditingSupport(TableViewer viewer, String type) {
+		super(viewer);
+		this.type = type;
+		this.viewer = viewer;
+		if(type == "Location")
+			abstractValues =  new String[] {"Single Location", "Single Country", "Cross Border"};
+		else
+			abstractValues =  new String[] {"Low", "Medium", "High"};
+		this.editor = new ComboBoxCellEditor(viewer.getTable(),
+				abstractValues);
+	}
+
+	@Override
+	protected CellEditor getCellEditor(Object element) {
+		editor.setItems(abstractValues);
+		return editor;
+	}
+
+	@Override
+	protected boolean canEdit(Object element) {
+		return true;
+	}
+
+	@Override
+	protected Object getValue(Object element) {
+
+		String[] items = ((ComboBoxCellEditor) editor).getItems();		
+		int idx = 0;
+
+        switch (type) {
+            case "Performance":
+            	for (int i = 0; i < items.length; i++) {
+        			if (items[i].equals((((PerformanceNfr) element).getAbstractValue()))) {
+        				idx = i;
+        				break;
+        			}
+        		}
+            	break;
+            case "Availability":
+            	for (int i = 0; i < items.length; i++) {
+        			if (items[i].equals((((AvailabilityNfr) element).getAbstractValue()))) {
+        				idx = i;
+        				break;
+        			}
+        		}
+            	break;
+            case "Scalability":
+            	for (int i = 0; i < items.length; i++) {
+        			if (items[i].equals((((ScalabilityNfr) element).getAbstractValue()))) {
+        				idx = i;
+        				break;
+        			}
+        		}
+            	break;
+            case "Cost":
+            	for (int i = 0; i < items.length; i++) {
+        			if (items[i].equals((((CostNfr) element).getAbstractValue()))) {
+        				idx = i;
+        				break;
+        			}
+        		}
+            	break;
+            case "Location":
+            	for (int i = 0; i < items.length; i++) {
+        			if (items[i].equals((((LocationNfr) element).getAbstractValue()))) {
+        				idx = i;
+        				break;
+        			}
+        		}
+            	break;
+        }
+
+		return idx;
+	}
+
+	@Override
+	protected void setValue(Object element, Object value) {
+		String[] items = ((ComboBoxCellEditor) editor).getItems();
+		String selected = items[(Integer) value];
+		   
+		switch (type) {
+           case "Performance":
+        	   ((PerformanceNfr) element).setAbstractValue(selected);
+        	   break;
+           case "Availability":
+        	   ((AvailabilityNfr) element).setAbstractValue(selected);
+        	   break;
+           case "Scalability":
+        	   ((ScalabilityNfr) element).setAbstractValue(selected);
+        	   break;
+           case "Cost":
+        	   ((CostNfr) element).setAbstractValue(selected);
+        	   break;
+           case "Location":
+        	   ((LocationNfr) element).setAbstractValue(selected);
+        	   break;
+		   }
+
+		viewer.update(element, null);
+	}
+}
diff --git a/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/AddSelectionAdapter.java b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/AddSelectionAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..ef05fc07067e8a465bb1357f8e2d520f59a6e2b6
--- /dev/null
+++ b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/AddSelectionAdapter.java
@@ -0,0 +1,97 @@
+package eu.DECIDEh2020.architect.plugin.layoutComponents;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+
+import eu.DECIDEh2020.appManager.models.AppDescription;
+import eu.DECIDEh2020.appManager.models.AvailabilityNfr;
+import eu.DECIDEh2020.appManager.models.CostNfr;
+import eu.DECIDEh2020.appManager.models.LocationNfr;
+import eu.DECIDEh2020.appManager.models.Nfr;
+import eu.DECIDEh2020.appManager.models.PerformanceNfr;
+import eu.DECIDEh2020.appManager.models.ScalabilityNfr;
+import eu.DECIDEh2020.architect.plugin.utils.CloudPatternHelper;
+
+public class AddSelectionAdapter extends SelectionAdapter {
+		private AppDescription appDescription;
+		private TableViewer tableViewer;
+		private String type;
+		private ListViewer listViewerPatterns;
+		
+		public AddSelectionAdapter(String type, AppDescription appDescription, TableViewer tableViewer, ListViewer listViewerPatterns) {
+			super();
+			this.appDescription = appDescription;
+			this.tableViewer = tableViewer;
+			this.type = type;
+			this.listViewerPatterns = listViewerPatterns;
+		}
+		
+		@Override
+		public void widgetSelected(SelectionEvent e) {
+			List<Nfr> nfrs = appDescription.getNfrs();
+			
+			Nfr n;
+			List<String> l = new ArrayList<String>();
+			l.add("Application");
+			
+			switch(type) {
+				case "Scalability":
+					n = new ScalabilityNfr();
+					((ScalabilityNfr) n).setType("Scalability");
+					((ScalabilityNfr) n).setAbstractValue("Medium");
+					((ScalabilityNfr) n).setValue(0);
+					((ScalabilityNfr) n).setUnit("requests/sec");
+					((ScalabilityNfr) n).setTags(l);
+					nfrs.add((ScalabilityNfr) n);
+					break;
+				case "Availability":
+					n = new AvailabilityNfr();
+					((AvailabilityNfr) n).setType("Availability");
+					((AvailabilityNfr) n).setUnit("percentage");
+					((AvailabilityNfr) n).setValue(0);
+					((AvailabilityNfr) n).setAbstractValue("Medium");
+					((AvailabilityNfr) n).setTags(l);
+					nfrs.add((AvailabilityNfr) n);
+					break;
+				case "Location":
+					n = new LocationNfr();
+					((LocationNfr) n).setType("Location");
+					((LocationNfr) n).setAbstractValue("Single Location");
+					((LocationNfr) n).setTags(l);
+					List<String> v = new ArrayList<String>();
+					v.add("Germany");
+					((LocationNfr) n).setValue(v);
+					nfrs.add((LocationNfr) n);
+					break;
+				case "Cost":
+					n = new CostNfr();
+					((CostNfr) n).setType("Cost");
+					((CostNfr) n).setUnit("Euro");
+					((CostNfr) n).setValue(0.00);
+					((CostNfr) n).setAbstractValue("Medium");
+					((CostNfr) n).setTags(l);
+					nfrs.add((CostNfr) n);
+					break;
+				case "Performance":
+					n = new PerformanceNfr();
+					((PerformanceNfr) n).setType("Performance");
+					((PerformanceNfr) n).setUnit("milliseconds");
+					((PerformanceNfr) n).setValue(0.00);
+					((PerformanceNfr) n).setAbstractValue("Medium");
+					((PerformanceNfr) n).setTags(l);
+					nfrs.add((PerformanceNfr) n);
+					break;				
+			}
+					
+			appDescription.setNfrs(nfrs);
+			tableViewer.refresh();
+			listViewerPatterns.setInput(CloudPatternHelper.inferPatterns(nfrs));
+			appDescription.setRecommendedPatterns(CloudPatternHelper.inferPatterns(nfrs));
+			listViewerPatterns.refresh();
+		}
+}
\ No newline at end of file
diff --git a/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/MicroserviceComposite.java b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/MicroserviceComposite.java
index 303d4ab419b0151a8fadfac3708f14534c0ead4b..164d77b637fd8fd31e3c2132b5d3d4e31ca550ec 100644
--- a/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/MicroserviceComposite.java
+++ b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/MicroserviceComposite.java
@@ -36,14 +36,14 @@ import org.eclipse.wb.swt.SWTResourceManager;
 import eu.DECIDEh2020.appManager.models.Microservice;
 
 import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.Set;
+//import java.util.HashSet;
+//import java.util.Set;
 
 import org.eclipse.jface.viewers.IStructuredContentProvider;
 import org.eclipse.jface.viewers.LabelProvider;
 import org.eclipse.jface.viewers.Viewer;
-import org.apache.jena.rdf.model.Resource;
-import org.apache.jena.vocabulary.DCTerms;
+//import org.apache.jena.rdf.model.Resource;
+//import org.apache.jena.vocabulary.DCTerms;
 import org.eclipse.core.databinding.DataBindingContext;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
 import org.eclipse.jface.databinding.swt.WidgetProperties;
@@ -51,7 +51,8 @@ import org.eclipse.core.databinding.beans.PojoProperties;
 import eu.DECIDEh2020.appManager.models.AppDescription;
 //composite for a single Microservice
 public class MicroserviceComposite extends Composite {
-	private DataBindingContext m_bindingContext;
+	
+	//private DataBindingContext m_bindingContext;
 
 	private static class DependecyLabelProvider extends LabelProvider {
 		public Image getImage(Object element) {
@@ -69,19 +70,19 @@ public class MicroserviceComposite extends Composite {
 		}
 
 		public void dispose() {
-		}
+		} 
 
 		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
 		}
 	}
 
-	private Color background = SWTResourceManager.getColor(SWT.COLOR_WIDGET_BACKGROUND);
+	//private Color background = SWTResourceManager.getColor(SWT.COLOR_WIDGET_BACKGROUND);
 	private Button btnStateless;
 	private Microservice microservice;
 	private java.util.List<ContentChangeListener> contentChangeListeners = new ArrayList<ContentChangeListener>();
 	private Text txtAddDependency;
 	private Text msRepo;
-private AppDescription appDescription;
+    //private AppDescription appDescription;
 	
 	
 	
@@ -95,10 +96,10 @@ private AppDescription appDescription;
 	 */
 	public MicroserviceComposite(Composite parent, Microservice microservice, Color background, AppDescription appDescription) {
 		super(parent, SWT.None);
-		this.background = background;
+		//this.background = background;
 		setBackground(background);
 		this.microservice = microservice;
-		this.appDescription = appDescription;
+		//this.appDescription = appDescription;
 
 		this.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1));
 		this.setLayout(new FillLayout(SWT.HORIZONTAL));
@@ -174,16 +175,16 @@ private AppDescription appDescription;
 		lblNfr.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false, 1, 1));
 		lblNfr.setText("Tags:");
 				
-		TagListViewer tagListViewer = new TagListViewer(composite, SWT.NONE,microservice, appDescription, background);
+		TagListViewer tagListViewer = new TagListViewer(composite, SWT.NONE, microservice, appDescription, SWTResourceManager.getColor(SWT.COLOR_WHITE));
 		tagListViewer.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-		
+		tagListViewer.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
 
 		Label lblDependencies = new Label(composite, SWT.NONE);
 		lblDependencies.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false, 1, 1));
 		lblDependencies.setText("Dependencies:");
 		lblDependencies.setBackground(background);
 
-		Composite dependenciesComposite = new Composite(composite, SWT.NONE);
+		Composite dependenciesComposite = new Composite(composite, SWT.NONE);	
 		GridLayout gl_dependenciesComposite = new GridLayout(2, false);
 		gl_dependenciesComposite.marginLeft = -5;
 		dependenciesComposite.setLayout(gl_dependenciesComposite);
@@ -272,7 +273,7 @@ private AppDescription appDescription;
 		msRepo = new Text(composite, SWT.BORDER);
 		msRepo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
 
-		m_bindingContext = initDataBindings();
+		/*m_bindingContext = */initDataBindings();
 		
 		
 	}
@@ -286,7 +287,6 @@ private AppDescription appDescription;
 	 */
 	public MicroserviceComposite(Composite parent, Microservice microservice, AppDescription appDescription) {
 		this(parent, microservice, SWTResourceManager.getColor(SWT.COLOR_WIDGET_BACKGROUND), appDescription);
-
 	}
 
 	@Override
@@ -307,8 +307,8 @@ private AppDescription appDescription;
 	protected DataBindingContext initDataBindings() {
 		DataBindingContext bindingContext = new DataBindingContext();
 		//
-		IObservableValue observeTextMsRepoObserveWidget = WidgetProperties.text(SWT.Modify).observe(msRepo);
-		IObservableValue repoMicroserviceObserveValue = PojoProperties.value("repo").observe(microservice);
+		IObservableValue<?> observeTextMsRepoObserveWidget = WidgetProperties.text(SWT.Modify).observe(msRepo);
+		IObservableValue<?> repoMicroserviceObserveValue = PojoProperties.value("repo").observe(microservice);
 		bindingContext.bindValue(observeTextMsRepoObserveWidget, repoMicroserviceObserveValue, null, null);
 		//
 		return bindingContext;
diff --git a/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/NfrAvailabilityComposite.java b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/NfrAvailabilityComposite.java
deleted file mode 100644
index b591e78826e37893a89f17f0b562b280fd780497..0000000000000000000000000000000000000000
--- a/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/NfrAvailabilityComposite.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package eu.DECIDEh2020.architect.plugin.layoutComponents;
-
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.RowLayout;
-import org.eclipse.swt.widgets.Scale;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-
-import eu.DECIDEh2020.appManager.models.AvailabilityNfr;
-
-//first version of an availability  NFR Composite, not used
-public class NfrAvailabilityComposite extends Composite {
-
-	public NfrAvailabilityComposite(Composite parent, AvailabilityNfr nfr) {
-		super(parent, SWT.NONE);
-		setLayout(new GridLayout(2, false));
-		
-		Label lblAutomaticSupervision = new Label(this, SWT.NONE);
-		lblAutomaticSupervision.setAlignment(SWT.CENTER);
-		lblAutomaticSupervision.setText("Automatic supervision + repair\r\n(high availability)");
-		
-		Button btnYes = new Button(this, SWT.CHECK);
-		btnYes.setText("yes?");
-		
-		Label lblRelationalDb = new Label(this, SWT.NONE);
-		lblRelationalDb.setLayoutData(new GridData(SWT.CENTER, SWT.TOP, false, false, 1, 1));
-		lblRelationalDb.setText("Relational DB");
-		
-		Composite composite = new Composite(this, SWT.NONE);
-		composite.setLayout(new RowLayout(SWT.HORIZONTAL));
-		composite.setLayoutData(new GridData(SWT.LEFT, SWT.FILL, true, false, 1, 1));
-		
-		Button btnFromCloudService = new Button(composite, SWT.CHECK);
-		btnFromCloudService.setText("from Cloud Service Provider");
-		
-		Button btnOwnImplementation = new Button(composite, SWT.CHECK);
-		btnOwnImplementation.setText("own implementation");
-		
-		Composite composite_1 = new Composite(this, SWT.NONE);
-		composite_1.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1));
-		RowLayout rl_composite_1 = new RowLayout(SWT.HORIZONTAL);
-		rl_composite_1.justify = true;
-		composite_1.setLayout(rl_composite_1);
-		
-		Label lblQuantitativeAvailability = new Label(composite_1, SWT.NONE);
-		lblQuantitativeAvailability.setText("Quantitative availability (%):");
-		
-		Label lblScaleValue = new Label(composite_1, SWT.NONE);
-		lblScaleValue.setAlignment(SWT.RIGHT);
-		lblScaleValue.setText("Best effort");
-		
-		Scale scale = new Scale(this, SWT.NONE);
-		scale.addSelectionListener(new SelectionAdapter() {
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-				if(scale.getSelection()>=0) {
-					lblScaleValue.setText("~ "+ scale.getSelection() + "%");
-				}else {
-					lblScaleValue.setText("Best Effort");
-				}
-			}
-		});
-		scale.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-	}
-
-}
diff --git a/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/NfrComposite.java b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/NfrComposite.java
index ba13b7d96eabbb1853426a20c55594e442f34574..634ad972681aa1cd7f2c9be2d1f26b821d2bb6fa 100644
--- a/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/NfrComposite.java
+++ b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/NfrComposite.java
@@ -1,90 +1,257 @@
 package eu.DECIDEh2020.architect.plugin.layoutComponents;
 
-import java.util.ArrayList;
+import java.util.List;
 
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.ColumnLabelProvider;
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TableViewerColumn;
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.layout.FillLayout;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
 import org.eclipse.wb.swt.SWTResourceManager;
-import org.eclipse.swt.widgets.Label;
 
 import eu.DECIDEh2020.appManager.models.AppDescription;
 import eu.DECIDEh2020.appManager.models.AvailabilityNfr;
-import eu.DECIDEh2020.appManager.models.Microservice;
+import eu.DECIDEh2020.appManager.models.CostNfr;
+import eu.DECIDEh2020.appManager.models.LocationNfr;
 import eu.DECIDEh2020.appManager.models.Nfr;
+import eu.DECIDEh2020.appManager.models.PerformanceNfr;
 import eu.DECIDEh2020.appManager.models.ScalabilityNfr;
+import eu.DECIDEh2020.architect.plugin.layoutComponents.NfrFilter;
+import eu.DECIDEh2020.architect.plugin.layoutComponents.NfrNameLabelProvider;
+import eu.DECIDEh2020.architect.plugin.layoutComponents.NfrUnitLabelProvider;
 
-//first version of a NFR Composite, not used
 public class NfrComposite extends Composite {
+		
+	private String type;
+	private TableViewer tableViewer;
 	private AppDescription appDescription;
-	private Color background = SWTResourceManager.getColor(SWT.COLOR_WIDGET_BACKGROUND);
-	private Button btnStateless;
-	private Nfr nfr;
-	private java.util.List<ContentChangeListener> contentChangeListeners = new ArrayList<ContentChangeListener>();
+	private Table table;
 	
-	public NfrComposite(Composite parent, Nfr nfr, Color background, AppDescription appDescription) {
+	// create Nfr table composite
+	public NfrComposite(String type, Composite parent, AppDescription appDescription) {
 		super(parent, SWT.None);
-		this.background = background;
-		setBackground(background);
-		this.nfr = nfr;
+		
+		this.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, true, false, 1, 1));
+		this.setLayout(new GridLayout(2, false));
+		this.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+		
 		this.appDescription = appDescription;
-		createContent();
+		this.type = type;
 	}
-
-	private void createContent() {
-		this.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1));
-		this.setLayout(new FillLayout(SWT.HORIZONTAL));
-			
-		Group grpNfr = new Group(this, SWT.NONE);
-		grpNfr.setBackground(background);
-		grpNfr.setLayout(new FillLayout(SWT.HORIZONTAL));
-		grpNfr.setText(nfr.getType());
+	
+	// create Nfr table
+	public void createTable(TableViewer tableViewer) {
+		tableViewer = new TableViewer(this, SWT.BORDER | SWT.FULL_SELECTION);
+		this.tableViewer = tableViewer;
+		
+		Table table = tableViewer.getTable();
+		table.setLinesVisible(true);
+		table.setHeaderVisible(true);
 		
-		Composite composite = new Composite(grpNfr, SWT.NONE);
-		composite.setBackground(background);
-		composite.setLayout(new FillLayout(SWT.HORIZONTAL));
+		// table layout
+		GridData gd_table_scalability = new GridData(SWT.NONE, SWT.CENTER, true, false, 1, 1);
+		gd_table_scalability.heightHint = 100;
+		table.setLayoutData(gd_table_scalability);
+		this.table = table;
+	}
+	
+	public void setFilter() {
+		NfrFilter filter = new NfrFilter();
+		filter.setType(type);
+		tableViewer.setFilters(filter);
+	}
+	
+	public void createTagColumn() {
+		// 1st column
+		TableViewerColumn tableViewerColumnTags = new TableViewerColumn(tableViewer, SWT.NONE);
+		tableViewerColumnTags.setEditingSupport(new TagEditingSupport(tableViewer, appDescription));
+		tableViewerColumnTags.setLabelProvider(new NfrNameLabelProvider());
+
+		TableColumn tblclmnNameservicegroup = tableViewerColumnTags.getColumn();
+		tblclmnNameservicegroup.setWidth(200);
+		tblclmnNameservicegroup.setText("Name (µService/Group)");
+	}
+	
+	public void createValueColumn(String columnLabel) {
+
+		TableViewerColumn tableViewerColumnValue = new TableViewerColumn(tableViewer, SWT.NONE);
+		tableViewerColumnValue.setEditingSupport(new ValueEditingSupport(type, tableViewer));
 		
-		Composite nfrComposite;
-		switch (nfr.getType()) {
-		case ("Availability"):
-			try {
-				nfrComposite = new NfrAvailabilityComposite(composite, (AvailabilityNfr) nfr);
-			} catch (Exception e) {
-				// TODO Auto-generated catch block
-				e.printStackTrace();
+		tableViewerColumnValue.setLabelProvider(new ColumnLabelProvider() {
+			public Image getImage(Object element) {
+				return null;
 			}
-			break;
-		case ("Scalability"):
-			try {
-				nfrComposite = new NfrScalabilityComposite(composite, (ScalabilityNfr) nfr);
-			} catch (Exception e) {
-				// TODO Auto-generated catch block
-				e.printStackTrace();
+			
+			public String getText(Object element) {
+				switch(type) {
+					case "Scalability":
+						return String.valueOf(((ScalabilityNfr) element).getValue());
+					case "Availability":
+						return String.valueOf(((AvailabilityNfr) element).getValue());
+					case "Cost":
+						return String.valueOf(((CostNfr) element).getValue());
+					case "Performance":
+						return String.valueOf(((PerformanceNfr) element).getValue());
+					case "Location":
+						return ((LocationNfr) element).getValue().toString();
+				}
+				return null;
 			}
+		});
+
+		TableColumn tblclmnValue = tableViewerColumnValue.getColumn();
+		tblclmnValue.setWidth(150);
+		tblclmnValue.setText(columnLabel);
+		/*switch(type) {
+			case "Scalability":
+				tblclmnValue.setText("Scale by");
+				break;
+			case "Availability":
+				tblclmnValue.setText("Actual Availability");
+				break;
+			case "Performance":
+				tblclmnValue.setText("Response Time");
+				break;
+			case "Location":
+				tblclmnValue.setText("Locations");
+				break;
+			case "Cost":
+				tblclmnValue.setText("Actual Cost");
+				break;
+		}*/
+	}
+	
+	public void createAbstractValueColumn(String columnLabel) {
+
+		TableViewerColumn tableViewerColumnAbstractValue = new TableViewerColumn(tableViewer, SWT.NONE);
+		tableViewerColumnAbstractValue.setEditingSupport(new AbstractValueEditingSupport(tableViewer, type));
+
+		tableViewerColumnAbstractValue.setLabelProvider(new ColumnLabelProvider() {
+			public Image getImage(Object element) {
+				return null;
+			}
+
+			public String getText(Object element) {
+				switch(type) {
+				case "Scalability":
+					return String.valueOf(((ScalabilityNfr) element).getAbstractValue());
+				case "Availability":
+					return String.valueOf(((AvailabilityNfr) element).getAbstractValue());
+				case "Cost":
+					return String.valueOf(((CostNfr) element).getAbstractValue());
+				case "Performance":
+					return String.valueOf(((PerformanceNfr) element).getAbstractValue());
+				case "Location":
+					return String.valueOf(((LocationNfr) element).getAbstractValue());
+				}
+				return null;
+			}
+		});
+
+		TableColumn abstractValue = tableViewerColumnAbstractValue.getColumn();
+		abstractValue.setWidth(150);
+		abstractValue.setText(columnLabel);
+		/*switch(type) {
+		case "Scalability":
+			abstractValue.setText("General Scaling Ability");
 			break;
-		default:
-			nfrComposite = new Composite(composite, SWT.NONE);
-			nfrComposite.setLayout(new FillLayout(SWT.HORIZONTAL));
-
-			Label lblNfrHasNo = new Label(nfrComposite, SWT.NONE);
-			lblNfrHasNo.setAlignment(SWT.CENTER);
-			lblNfrHasNo.setText("NFR has no Type");
-		}
+		case "Availability":
+			abstractValue.setText("Quantitative Availability");
+			break;
+		case "Cost":
+			abstractValue.setText("General Scaling Ability");
+			break;
+		case "Performance":
+			abstractValue.setText("General Response Time");
+			break;
+		case "Location":
+			abstractValue.setText("General Location");
+			break;
+		}*/
 	}
+	
+	public void createUnitColumn() {
 
-	public void addContentChangeListener(ContentChangeListener contentChangedListener) {
-		contentChangeListeners.add(contentChangedListener);
+		TableViewerColumn tableViewerColumnUnit = new TableViewerColumn(tableViewer, SWT.NONE);
+		tableViewerColumnUnit.setLabelProvider(new NfrUnitLabelProvider());
+		TableColumn tblclmnUnit = tableViewerColumnUnit.getColumn();
+		tblclmnUnit.setWidth(150);
+		tblclmnUnit.setText("Unit");
+	}
+	
+	public void createContent(List<Nfr> nfrs) {
+		tableViewer.setContentProvider(ArrayContentProvider.getInstance());
+		tableViewer.setInput(nfrs);
 	}
+	
+	public void createButtons(ListViewer listViewerPatterns) {
+		// Buttons
+		Composite btnComposite = new Composite(this, SWT.NONE);
+		btnComposite.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, true, 1, 1));
+		btnComposite.setLayout(new FillLayout(SWT.VERTICAL));
+
+		Button btnAddScal = new Button(btnComposite, SWT.NONE);
+		btnAddScal.setText("Add");
 
-	public void setContentChanged() {
-		for (ContentChangeListener ccl : contentChangeListeners) {
-			ccl.contentChanged();
-		}
+		Button btnRemoveScal = new Button(btnComposite, SWT.NONE);
+		btnRemoveScal.setText("Remove");
+		
+		btnAddScal.addSelectionListener(new AddSelectionAdapter(type, appDescription, tableViewer, listViewerPatterns));
+		
+		btnRemoveScal.addSelectionListener(new RemoveSelectionAdapter(table, appDescription, tableViewer, listViewerPatterns));
 	}
 	
-}
\ No newline at end of file
+}
+
+
+// Tag editing, adding and removing
+/*Composite tagComposite = new Composite(performanceComposite, SWT.NONE);
+tagComposite.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, true, 1, 1));
+tagComposite.setLayout(new FillLayout(SWT.VERTICAL));
+
+Text performanceNfrTag = new Text(tagComposite, SWT.BORDER);
+
+Button btnAddTag= new Button(btnComposite, SWT.NONE);
+btnAddTag.setText("Add Tag");
+
+Button btnRemoveTag= new Button(btnComposite, SWT.NONE);
+btnRemoveTag.setText("Remove Tag");
+
+btnAddTag.addSelectionListener(new SelectionAdapter() {
+	@Override
+	public void widgetSelected(SelectionEvent e) {
+		int idx = performanceTable.getSelectionIndex();
+
+		PerformanceNfr selected = (PerformanceNfr) tableViewerPerformance.getElementAt(idx);
+		
+		List<String> l = new ArrayList<String>(selected.getTags());
+				
+		l.add(performanceNfrTag.getText());
+		selected.setTags(l);
+		
+		performanceNfrTag.setText("");
+		
+		tableViewerPerformance.refresh();
+	}
+});
+
+btnRemoveTag.addSelectionListener(new SelectionAdapter() {
+	@Override
+	public void widgetSelected(SelectionEvent e) {
+		int idx = performanceTable.getSelectionIndex();
+
+		//performanceEditor.getValue(element);
+		PerformanceNfr selected = (PerformanceNfr) tableViewerPerformance.getElementAt(idx);
+		
+		tableViewerPerformance.refresh();
+	}
+});*/
\ No newline at end of file
diff --git a/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/NfrFilter.java b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/NfrFilter.java
new file mode 100644
index 0000000000000000000000000000000000000000..e1b3690e740f041c0e8de611439b375d5b443804
--- /dev/null
+++ b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/NfrFilter.java
@@ -0,0 +1,30 @@
+package eu.DECIDEh2020.architect.plugin.layoutComponents;
+
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+
+import eu.DECIDEh2020.appManager.models.Nfr;
+
+public class NfrFilter extends ViewerFilter {
+
+		private String type;
+
+		public void setType(String type) {
+			// ensure that the value can be used for matching
+			this.type = type;
+		}
+
+		@Override
+		public boolean select(Viewer viewer, Object parentElement, Object element) {
+			if (type == null || type.length() == 0) {
+				return true;
+			}
+			
+			Nfr p = (Nfr) element;
+			if (p.getType().equals(type)) {
+				return true;
+			}
+
+			return false;
+		}
+}
diff --git a/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/NfrNameLabelProvider.java b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/NfrNameLabelProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..bb87651dd6cf417ff5a2ad6aa6bca5b3a3950f5b
--- /dev/null
+++ b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/NfrNameLabelProvider.java
@@ -0,0 +1,22 @@
+package eu.DECIDEh2020.architect.plugin.layoutComponents;
+
+import org.eclipse.jface.viewers.ColumnLabelProvider;
+import org.eclipse.swt.graphics.Image;
+
+import eu.DECIDEh2020.appManager.models.Nfr;
+
+public class NfrNameLabelProvider extends ColumnLabelProvider {
+	
+	public Image getImage(Object element) {
+		return null;
+	}
+
+	public String getText(Object element) {
+
+		if (((Nfr) element).getTags().size() > 0) {
+			return ((Nfr) element).getTags().get(0);
+		} else {
+			return null;
+		}
+	}
+}
\ No newline at end of file
diff --git a/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/NfrPageComposite.java b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/NfrPageComposite.java
index b404f39c0a292713ffad076ea58bbad3aea47db4..3f894185df1f4de2ce8cd8b377e2e0621df91abd 100644
--- a/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/NfrPageComposite.java
+++ b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/NfrPageComposite.java
@@ -1,610 +1,204 @@
-package eu.DECIDEh2020.architect.plugin.layoutComponents;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.CLabel;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.wb.swt.SWTResourceManager;
-
-import eu.DECIDEh2020.appManager.AppDescriptionHelper;
-import eu.DECIDEh2020.appManager.models.AppDescription;
-import eu.DECIDEh2020.appManager.models.AvailabilityNfr;
-import eu.DECIDEh2020.appManager.models.Nfr;
-import eu.DECIDEh2020.appManager.models.Pattern;
-import eu.DECIDEh2020.appManager.models.PerformanceNfr;
-import eu.DECIDEh2020.architect.plugin.utils.CloudPatternHelper;
-
-import org.eclipse.jface.viewers.ListViewer;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.jface.viewers.EditingSupport;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.widgets.Table;
-import org.eclipse.swt.widgets.TableColumn;
-import org.eclipse.jface.viewers.ArrayContentProvider;
-import org.eclipse.jface.viewers.CellEditor;
-import org.eclipse.jface.viewers.TableViewerColumn;
-import org.eclipse.jface.viewers.TextCellEditor;
-import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.jface.viewers.ComboBoxCellEditor;
-import org.eclipse.swt.layout.FillLayout;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.viewers.ViewerFilter;
-import org.eclipse.jface.viewers.ColumnLabelProvider;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.jface.viewers.LabelProvider;
-
-//composite for the NFR Editor
-public class NfrPageComposite extends Composite {
-	private static class PatternLabelProvider extends LabelProvider {
-		public Image getImage(Object element) {
-			return null;
-		}
-
-		public String getText(Object element) {
-			return ((Pattern) element).getTitle();
-		}
-	}
-
-	private static class PatternContentProvider implements IStructuredContentProvider {
-		@SuppressWarnings("unchecked")
-		public Object[] getElements(Object inputElement) {
-
-			return ((java.util.List<Pattern>) inputElement).toArray();
-
-		}
-
-		public void dispose() {
-		}
-
-		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-		}
-	}
-
-	public class NfrFilter extends ViewerFilter {
-
-		private String type;
-
-		public void setType(String type) {
-			// ensure that the value can be used for matching
-			this.type = type;
-		}
-
-		@Override
-		public boolean select(Viewer viewer, Object parentElement, Object element) {
-			if (type == null || type.length() == 0) {
-				return true;
-			}
-			Nfr p = (Nfr) element;
-			if (p.getType().equals(type)) {
-				return true;
-			}
-
-			return false;
-		}
-	}
-
-	public class NfrNameLabelProvider extends ColumnLabelProvider {
-		public Image getImage(Object element) {
-			// TODO Auto-generated method stub
-			return null;
-		}
-
-		public String getText(Object element) {
-
-			if (((Nfr) element).getTags().size() > 0) {
-				return ((Nfr) element).getTags().get(0);
-			} else {
-				return null;
-			}
-		}
-	}
-
-	public class NfrUnitLabelProvider extends ColumnLabelProvider {
-		public Image getImage(Object element) {
-			return null;
-		}
-
-		public String getText(Object element) {
-			if (((Nfr) element).getAdditionalProperties().containsKey("unit")) {
-				return ((Nfr) element).getAdditionalProperties().get("unit").asText();
-			} else if (PerformanceNfr.class.isInstance(element)) {
-				return ((PerformanceNfr) element).getUnit();
-			} else if (AvailabilityNfr.class.isInstance(element)) {
-				return ((AvailabilityNfr) element).getUnit();
-			} else {
-				return null;
-			}
-
-		}
-	}
-
-	public class TagEditingSupport extends EditingSupport {
-		private final TableViewer viewer;
-		private final ComboBoxCellEditor editor;
-
-		public TagEditingSupport(TableViewer viewer) {
-			super(viewer);
-			this.viewer = viewer;
-			AppDescriptionHelper adh = AppDescriptionHelper.create(appDescription);
-			this.editor = new ComboBoxCellEditor(viewer.getTable(),
-					adh.getTags().toArray(new String[adh.getTags().size()]));
-		}
-
-		@Override
-		protected CellEditor getCellEditor(Object element) {
-			AppDescriptionHelper adh = AppDescriptionHelper.create(appDescription);
-			editor.setItems(adh.getTags().toArray(new String[adh.getTags().size()]));
-			return editor;
-		}
-
-		@Override
-		protected boolean canEdit(Object element) {
-			return true;
-		}
-
-		@Override
-		protected Object getValue(Object element) {
-			Nfr n = (Nfr) element;
-			String[] items = ((ComboBoxCellEditor) editor).getItems();
-			int idx = 0;
-			for (int i = 0; i < items.length; i++) {
-				if (items[i].equals((n.getTags().size() > 0 ? n.getTags().get(0) : ""))) {
-					idx = i;
-					break;
-				}
-			}
-
-			return idx;
-		}
-
-		@Override
-		protected void setValue(Object element, Object value) {
-			String[] items = ((ComboBoxCellEditor) editor).getItems();
-			String selected = items[(Integer) value];
-
-			((Nfr) element).setTags(Collections.singletonList(selected));
-
-			viewer.update(element, null);
-		}
-
-	}
-
-	private Color background;
-	private AppDescription appDescription;
-	private AppDescriptionHelper helper;
-	private Table table_location;
-	private TableViewer tableViewer_performance;
-	private TableViewer tableViewer_availability;
-	private List<Nfr> nfrs;
-	private Table table;
-	private ListViewer listViewerPatterns;
-	private org.eclipse.swt.widgets.List listPatterns;
-
-	public NfrPageComposite(Composite parent, AppDescription appDescription) {
-		super(parent, SWT.NONE);
-
-		this.appDescription = appDescription;
-		this.nfrs = appDescription.getNfrs();
-
-		helper = AppDescriptionHelper.create(appDescription);
-
-		background = SWTResourceManager.getColor(SWT.COLOR_WHITE);
-		setBackground(background);
-		createContent();
-		fillContent();
-		requestLayout();
-	}
-
-	private void createContent() {
-		Control[] children = this.getChildren();
-		for (int i = 0; i < children.length; i++) {
-			children[i].dispose();
-		}
-		setLayout(new GridLayout(2, false));
-
-		Composite composite_8 = new Composite(this, SWT.NONE);
-		composite_8.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
-		composite_8.setLayout(new GridLayout(1, false));
-
-		CLabel lblOverview = new CLabel(composite_8, SWT.NONE);
-		lblOverview.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-		lblOverview.setSize(44, 27);
-		lblOverview.setFont(SWTResourceManager.getFont("Segoe UI", 12, SWT.BOLD));
-		lblOverview.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
-		lblOverview.setText("NFRs");
-
-		Label label = new Label(composite_8, SWT.SEPARATOR | SWT.HORIZONTAL);
-		label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-		label.setSize(236, 2);
-
-		CLabel lblScalability = new CLabel(composite_8, SWT.NONE);
-		lblScalability.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-		lblScalability.setSize(61, 15);
-		lblScalability.setTopMargin(0);
-		lblScalability.setText("Scalability");
-		lblScalability.setFont(SWTResourceManager.getFont("Segoe UI", 9, SWT.BOLD));
-		lblScalability.setBottomMargin(0);
-		lblScalability.setBackground(SWTResourceManager.getColor(SWT.COLOR_WIDGET_BACKGROUND));
-
-		Composite composite = new Composite(composite_8, SWT.NONE);
-		composite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-		composite.setSize(236, 131);
-		composite.setLayout(new GridLayout(2, false));
-
-		TableViewer tableViewer_3 = new TableViewer(composite, SWT.BORDER | SWT.FULL_SELECTION);
-		table = tableViewer_3.getTable();
-		table.setLinesVisible(true);
-		table.setHeaderVisible(true);
-		GridData gd_table = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
-		gd_table.heightHint = 100;
-		table.setLayoutData(gd_table);
-
-		TableViewerColumn tableViewerColumn_7 = new TableViewerColumn(tableViewer_3, SWT.NONE);
-		TableColumn tblclmnNameservicegroup = tableViewerColumn_7.getColumn();
-		tblclmnNameservicegroup.setWidth(100);
-		tblclmnNameservicegroup.setText("Name (µService/Group)");
-
-		TableViewerColumn tableViewerColumn_8 = new TableViewerColumn(tableViewer_3, SWT.NONE);
-		TableColumn tblclmnScaleBy = tableViewerColumn_8.getColumn();
-		tblclmnScaleBy.setWidth(100);
-		tblclmnScaleBy.setText("Scale by");
-
-		Composite composite_7 = new Composite(composite, SWT.NONE);
-		composite_7.setLayoutData(new GridData(SWT.LEFT, SWT.BOTTOM, false, false, 1, 1));
-		composite_7.setLayout(new FillLayout(SWT.VERTICAL));
-
-		Button btnAdd_1 = new Button(composite_7, SWT.NONE);
-		btnAdd_1.setEnabled(false);
-		btnAdd_1.setText("Add");
-
-		Button btnRemove_1 = new Button(composite_7, SWT.NONE);
-		btnRemove_1.setText("Remove");
-
-		CLabel lblPerformance = new CLabel(composite_8, SWT.NONE);
-		lblPerformance.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-		lblPerformance.setSize(301, 15);
-		lblPerformance.setTopMargin(0);
-		lblPerformance.setText("Performance");
-		lblPerformance.setFont(SWTResourceManager.getFont("Segoe UI", 9, SWT.BOLD));
-		lblPerformance.setBottomMargin(0);
-		lblPerformance.setBackground(SWTResourceManager.getColor(SWT.COLOR_WIDGET_BACKGROUND));
-
-		Composite composite_1 = new Composite(composite_8, SWT.NONE);
-		composite_1.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-		composite_1.setSize(301, 131);
-		composite_1.setLayout(new GridLayout(2, false));
-
-		tableViewer_performance = new TableViewer(composite_1, SWT.BORDER | SWT.FULL_SELECTION);
-		Table table_performance = tableViewer_performance.getTable();
-		table_performance.setLinesVisible(true);
-		table_performance.setHeaderVisible(true);
-		GridData gd_table_performance = new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1);
-		gd_table_performance.heightHint = 100;
-		table_performance.setLayoutData(gd_table_performance);
-		NfrFilter perfFilter = new NfrFilter();
-		perfFilter.setType("Performance");
-		tableViewer_performance.setFilters(perfFilter);
-
-		TableViewerColumn tableViewerColumn_2 = new TableViewerColumn(tableViewer_performance, SWT.NONE);
-		tableViewerColumn_2.setEditingSupport(new TagEditingSupport(tableViewer_performance));
-		tableViewerColumn_2.setLabelProvider(new NfrNameLabelProvider());
-
-		TableColumn tblclmnNewColumn = tableViewerColumn_2.getColumn();
-		tblclmnNewColumn.setWidth(100);
-		tblclmnNewColumn.setText("Name (µService/Group)");
-
-		TableViewerColumn tableViewerColumn_3 = new TableViewerColumn(tableViewer_performance, SWT.NONE);
-		tableViewerColumn_3.setEditingSupport(new EditingSupport(tableViewer_performance) {
-			protected boolean canEdit(Object element) {
-				// TODO Auto-generated method stub
-				return true;
-			}
-
-			protected CellEditor getCellEditor(Object element) {
-				// TODO Auto-generated method stub
-				return new TextCellEditor(tableViewer_performance.getTable());
-			}
-
-			protected Object getValue(Object element) {
-				// TODO Auto-generated method stub
-				return String.valueOf(((PerformanceNfr) element).getValue());
-			}
-
-			protected void setValue(Object element, Object value) {
-				PerformanceNfr n = (PerformanceNfr) element;
-				Double d = Double.valueOf((String) value);
-				n.setValue(d);
-
-				tableViewer_performance.update(element, null);
-			}
-		});
-		tableViewerColumn_3.setLabelProvider(new ColumnLabelProvider() {
-			public Image getImage(Object element) {
-				// TODO Auto-generated method stub
-				return null;
-			}
-
-			public String getText(Object element) {
-				
-				return String.valueOf(((PerformanceNfr) element).getValue());
-				
-			}
-		});
-		TableColumn tblclmnResponseTime = tableViewerColumn_3.getColumn();
-		tblclmnResponseTime.setWidth(100);
-		tblclmnResponseTime.setText("Response Time");
-
-		TableViewerColumn tableViewerColumn_5 = new TableViewerColumn(tableViewer_performance, SWT.NONE);
-		tableViewerColumn_5.setLabelProvider(new NfrUnitLabelProvider());
-		TableColumn tblclmnUnit = tableViewerColumn_5.getColumn();
-		tblclmnUnit.setWidth(100);
-		tblclmnUnit.setText("Unit");
-
-		tableViewer_performance.setContentProvider(ArrayContentProvider.getInstance());
-		tableViewer_performance.setInput(nfrs);
-
-		Composite composite_4 = new Composite(composite_1, SWT.NONE);
-		composite_4.setLayoutData(new GridData(SWT.LEFT, SWT.BOTTOM, false, true, 1, 1));
-		composite_4.setLayout(new FillLayout(SWT.VERTICAL));
-
-		Button btnAddPerf = new Button(composite_4, SWT.NONE);
-
-		btnAddPerf.setText("Add");
-
-		Button btnRemovePerf = new Button(composite_4, SWT.NONE);
-
-		btnRemovePerf.setText("Remove");
-
-		CLabel lblAvailability = new CLabel(composite_8, SWT.NONE);
-		lblAvailability.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-		lblAvailability.setSize(301, 15);
-		lblAvailability.setTopMargin(0);
-		lblAvailability.setText("Availability");
-		lblAvailability.setFont(SWTResourceManager.getFont("Segoe UI", 9, SWT.BOLD));
-		lblAvailability.setBottomMargin(0);
-		lblAvailability.setBackground(SWTResourceManager.getColor(SWT.COLOR_WIDGET_BACKGROUND));
-
-		Composite composite_3 = new Composite(composite_8, SWT.NONE);
-		composite_3.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-		composite_3.setSize(301, 60);
-		composite_3.setLayout(new GridLayout(2, false));
-
-		tableViewer_availability = new TableViewer(composite_3, SWT.BORDER | SWT.FULL_SELECTION);
-		Table table_availability = tableViewer_availability.getTable();
-		table_availability.setLinesVisible(true);
-		table_availability.setHeaderVisible(true);
-		GridData gd_table_availability = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
-		gd_table_availability.heightHint = 100;
-		table_availability.setLayoutData(gd_table_availability);
-		NfrFilter availFilter = new NfrFilter();
-		availFilter.setType("Availability");
-		tableViewer_availability.setFilters(availFilter);
-
-		TableViewerColumn tableViewerColumn_4 = new TableViewerColumn(tableViewer_availability, SWT.NONE);
-		tableViewerColumn_4.setEditingSupport(new TagEditingSupport(tableViewer_availability));
-		tableViewerColumn_4.setLabelProvider(new NfrNameLabelProvider());
-		TableColumn tblclmnName_1 = tableViewerColumn_4.getColumn();
-		tblclmnName_1.setWidth(100);
-		tblclmnName_1.setText("Name (µService/Group)");
-
-		TableViewerColumn tableViewerColumn_6 = new TableViewerColumn(tableViewer_availability, SWT.NONE);
-		tableViewerColumn_6.setEditingSupport(new EditingSupport(tableViewer_availability) {
-			protected boolean canEdit(Object element) {
-				// TODO Auto-generated method stub
-				return true;
-			}
-
-			protected CellEditor getCellEditor(Object element) {
-				// TODO Auto-generated method stub
-				return new TextCellEditor(tableViewer_availability.getTable());
-			}
-
-			protected Object getValue(Object element) {
-				// TODO Auto-generated method stub
-				return String.valueOf(((AvailabilityNfr) element).getValue());
-			}
-
-			protected void setValue(Object element, Object value) {
-				AvailabilityNfr n = (AvailabilityNfr) element;
-				Double d = Double.valueOf((String) value);
-				n.setValue(d);
-				tableViewer_availability.update(element, null);
-			}
-		});
-		tableViewerColumn_6.setLabelProvider(new ColumnLabelProvider() {
-			public Image getImage(Object element) {
-				// TODO Auto-generated method stub
-				return null;
-			}
-
-			public String getText(Object element) {
-				return String.valueOf(((AvailabilityNfr) element).getValue());
-			}
-		});
-		TableColumn tblclmnQuant = tableViewerColumn_6.getColumn();
-		tblclmnQuant.setWidth(100);
-		tblclmnQuant.setText("Quantitative Availability");
-
-		TableViewerColumn tableViewerColumn_9 = new TableViewerColumn(tableViewer_availability, SWT.NONE);
-		tableViewerColumn_9.setLabelProvider(new NfrUnitLabelProvider());
-		TableColumn tblclmnUnit_1 = tableViewerColumn_9.getColumn();
-		tblclmnUnit_1.setWidth(100);
-		tblclmnUnit_1.setText("Unit");
-
-		tableViewer_availability.setContentProvider(ArrayContentProvider.getInstance());
-		tableViewer_availability.setInput(nfrs);
-
-		Composite composite_5 = new Composite(composite_3, SWT.NONE);
-		composite_5.setLayoutData(new GridData(SWT.LEFT, SWT.BOTTOM, false, false, 1, 1));
-		composite_5.setLayout(new FillLayout(SWT.VERTICAL));
-
-		Button btnAddAvail = new Button(composite_5, SWT.NONE);
-
-		btnAddAvail.setText("Add");
-
-		Button btnRemoveAvail = new Button(composite_5, SWT.NONE);
-
-		btnRemoveAvail.setText("Remove");
-
-		CLabel lblLocation = new CLabel(composite_8, SWT.NONE);
-		lblLocation.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-		lblLocation.setSize(301, 15);
-		lblLocation.setTopMargin(0);
-		lblLocation.setText("Location");
-		lblLocation.setFont(SWTResourceManager.getFont("Segoe UI", 9, SWT.BOLD));
-		lblLocation.setBottomMargin(0);
-		lblLocation.setBackground(SWTResourceManager.getColor(SWT.COLOR_WIDGET_BACKGROUND));
-
-		Composite composite_2 = new Composite(composite_8, SWT.NONE);
-		composite_2.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-		composite_2.setSize(301, 45);
-		composite_2.setLayout(new GridLayout(2, false));
-
-		TableViewer tableViewer_location = new TableViewer(composite_2, SWT.BORDER | SWT.FULL_SELECTION);
-		table_location = tableViewer_location.getTable();
-		GridData gd_table_location = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
-		gd_table_location.heightHint = 100;
-		table_location.setLayoutData(gd_table_location);
-		table_location.setHeaderVisible(true);
-		table_location.setLinesVisible(true);
-
-		TableViewerColumn tableViewerColumn = new TableViewerColumn(tableViewer_location, SWT.NONE);
-		TableColumn tblclmnName = tableViewerColumn.getColumn();
-		tblclmnName.setText("Name");
-
-		TableViewerColumn tableViewerColumn_1 = new TableViewerColumn(tableViewer_location, SWT.NONE);
-		TableColumn tblclmnRegion = tableViewerColumn_1.getColumn();
-		tblclmnRegion.setText("Region");
-
-		Composite composite_9 = new Composite(composite_2, SWT.NONE);
-		composite_9.setLayout(new FillLayout(SWT.VERTICAL));
-		composite_9.setLayoutData(new GridData(SWT.LEFT, SWT.BOTTOM, false, false, 1, 1));
-
-		Button btnAddLoc = new Button(composite_9, SWT.NONE);
-		btnAddLoc.setEnabled(false);
-		btnAddLoc.setBounds(0, 0, 75, 25);
-		btnAddLoc.setText("Add");
-
-		Button btnRemoveLoc = new Button(composite_9, SWT.NONE);
-		btnRemoveLoc.setText("Remove");
-
-		Composite composite_6 = new Composite(this, SWT.NONE);
-		composite_6.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
-		composite_6.setLayout(new GridLayout(1, false));
-
-		listViewerPatterns = new ListViewer(composite_6, SWT.BORDER | SWT.V_SCROLL);
-		listPatterns = listViewerPatterns.getList();
-		listPatterns.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
-		listViewerPatterns.setLabelProvider(new PatternLabelProvider());
-		listViewerPatterns.setContentProvider(new PatternContentProvider());
-		listViewerPatterns.setInput(CloudPatternHelper.inferPatterns(nfrs));
-		listViewerPatterns.refresh();
-
-		btnAddAvail.addSelectionListener(new SelectionAdapter() {
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-
-				AvailabilityNfr n = new AvailabilityNfr();
-				n.setType("Availability");
-				List<String> l = new ArrayList<String>();
-				l.add("Application");
-				n.setTags(l);
-
-				n.setUnit("percentage");
-				n.setValue(0.00);
-				n.setAbstractValue("Medium");
-				addnfr(n);
-				tableViewer_availability.refresh();
-				tableViewer_availability.getTable().update();
-				listViewerPatterns.setInput(CloudPatternHelper.inferPatterns(nfrs));
-				listViewerPatterns.refresh();
-				listPatterns.update();
-			}
-		});
-
-		btnRemoveAvail.addSelectionListener(new SelectionAdapter() {
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-				int idx = table_availability.getSelectionIndex();
-				Nfr selected = (Nfr) tableViewer_availability.getElementAt(idx);
-				removenfr(selected);
-				tableViewer_availability.refresh();
-				listViewerPatterns.setInput(CloudPatternHelper.inferPatterns(nfrs));
-				listViewerPatterns.refresh();
-			}
-		});
-		btnAddPerf.addSelectionListener(new SelectionAdapter() {
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-				PerformanceNfr n = new PerformanceNfr();
-				n.setType("Performance");
-				List<String> l = new ArrayList<String>();
-				l.add("Application");
-				n.setTags(l);
-				n.setAbstractValue("Medium");
-				n.setValue(0.00);
-				n.setUnit("milliseconds");
-				addnfr(n);
-				tableViewer_performance.refresh();
-				listViewerPatterns.setInput(CloudPatternHelper.inferPatterns(nfrs));
-				listViewerPatterns.refresh();
-			}
-		});
-
-		btnRemovePerf.addSelectionListener(new SelectionAdapter() {
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-				int idx = table_performance.getSelectionIndex();
-
-				Nfr selected = (Nfr) tableViewer_performance.getElementAt(idx);
-				removenfr(selected);
-				tableViewer_performance.refresh();
-				listViewerPatterns.setInput(CloudPatternHelper.inferPatterns(nfrs));
-				listViewerPatterns.refresh();
-			}
-		});
-
-		requestLayout();
-
-	}
-
-	private void addnfr(Nfr n) {
-		this.nfrs.add(n);
-		this.appDescription.setNfrs(nfrs);
-
-		fillContent();
-	}
-
-	private void removenfr(Nfr n) {
-		this.nfrs.remove(n);
-		this.appDescription.setNfrs(nfrs);
-
-		fillContent();
-	}
-
-	public void refreshContent(AppDescription appDescription) {
-		this.appDescription = appDescription;
-		this.nfrs = appDescription.getNfrs();
-		if (nfrs == null) {
-			nfrs = new ArrayList<Nfr>();
-		}
-		fillContent();
-	}
-
-	private void fillContent() {
-
-		tableViewer_availability.setInput(nfrs);
-		tableViewer_performance.setInput(nfrs);
-
-	}
-}
+package eu.DECIDEh2020.architect.plugin.layoutComponents;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CLabel;
+import org.eclipse.swt.custom.ScrolledComposite;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.wb.swt.SWTResourceManager;
+
+import eu.DECIDEh2020.appManager.AppDescriptionHelper;
+import eu.DECIDEh2020.appManager.models.AppDescription;
+import eu.DECIDEh2020.appManager.models.Nfr;
+import eu.DECIDEh2020.appManager.models.Pattern;
+import eu.DECIDEh2020.architect.plugin.utils.CloudPatternHelper;
+
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.jface.viewers.LabelProvider;
+
+import eu.DECIDEh2020.architect.plugin.layoutComponents.NfrComposite;
+
+//composite for the NFR Editor
+public class NfrPageComposite extends Composite {
+
+	private static class PatternContentProvider implements IStructuredContentProvider {
+		@SuppressWarnings("unchecked")
+		public Object[] getElements(Object inputElement) {
+			return ((java.util.List<Pattern>) inputElement).toArray();
+		}
+
+		public void dispose() {
+		}
+
+		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+		}
+	}
+
+	private Color background;
+	private AppDescription appDescription;
+	private TableViewer tableViewerPerformance;
+	private TableViewer tableViewerAvailability;
+	private TableViewer tableViewerScalability;
+	private TableViewer tableViewerCost;
+	private TableViewer tableViewerLocation;
+	private List<Nfr> nfrs;
+	private ListViewer listViewerPatterns;
+	private org.eclipse.swt.widgets.List listPatterns;
+
+	public NfrPageComposite(Composite parent, AppDescription appDescription) {
+		super(parent, SWT.NONE);
+
+		AppDescriptionHelper.create(appDescription);
+		this.appDescription = appDescription;
+		this.nfrs = appDescription.getNfrs();
+
+		this.background = SWTResourceManager.getColor(SWT.COLOR_WHITE);
+		setBackground(background);
+		
+		this.setLayout(new GridLayout(2, false));
+		createLayoutContent();
+	}
+
+	private void createLayoutContent() {
+
+	    // Configure scrolled composite
+	    ScrolledComposite scrolledComposite = new ScrolledComposite(this, SWT.V_SCROLL);
+	    scrolledComposite.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, true));
+	    scrolledComposite.setExpandVertical(true);
+	    scrolledComposite.setExpandHorizontal(true);
+	    scrolledComposite.setAlwaysShowScrollBars(true);
+
+	    // Composite for NFR Editing in table form
+		Composite nfrComposite = new Composite(scrolledComposite, SWT.NONE);
+		scrolledComposite.setContent(nfrComposite);
+		nfrComposite.setLayout(new GridLayout(1, false));
+		nfrComposite.setBackground(background);
+		
+		//Composite for Pattern display
+		Composite patternDisplayComposite = new Composite(this, SWT.NONE);
+		patternDisplayComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		patternDisplayComposite.setLayout(new GridLayout(1, false));
+		
+		// Pattern list to display
+		listViewerPatterns = new ListViewer(patternDisplayComposite, SWT.BORDER | SWT.V_SCROLL);
+		listPatterns = listViewerPatterns.getList();
+		listPatterns.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
+		listViewerPatterns.setLabelProvider(new LabelProvider() {
+			public Image getImage(Object element) {
+				return null;
+			}
+
+			public String getText(Object element) {
+				return ((Pattern) element).getTitle();
+			}
+		});
+		listViewerPatterns.setContentProvider(new PatternContentProvider());
+		listViewerPatterns.setInput(CloudPatternHelper.inferPatterns(nfrs));
+		
+		// Head Label NFR
+		// composite, labelName, width, height, fontSize, topMarginLine, bottomMarginLine, background
+		createLabel(nfrComposite, "NFRs", 44, 27, 12, 1, 1, background);	
+		
+		// Scalability NFR
+		createLabel(nfrComposite, "Scalability", 61, 15, 9, 0, 0, null);
+		NfrComposite scalabilityComposite = new NfrComposite("Scalability", nfrComposite, appDescription);
+		scalabilityComposite.createTable(tableViewerScalability);
+		scalabilityComposite.setFilter();
+		scalabilityComposite.createTagColumn();
+		scalabilityComposite.createAbstractValueColumn("General Scaling");
+		scalabilityComposite.createValueColumn("Scale by");
+		scalabilityComposite.createUnitColumn();
+		scalabilityComposite.createContent(nfrs);
+		scalabilityComposite.createButtons(listViewerPatterns);
+		
+		// Performance NFR
+		createLabel(nfrComposite, "Performance", 61, 15, 9, 0, 0, null);
+		NfrComposite performanceComposite = new NfrComposite("Performance", nfrComposite, appDescription);
+		performanceComposite.createTable(tableViewerPerformance);
+		performanceComposite.setFilter();
+		performanceComposite.createTagColumn();
+		performanceComposite.createAbstractValueColumn("General Response Rate");
+		performanceComposite.createValueColumn("Response Time");
+		performanceComposite.createUnitColumn();
+		performanceComposite.createContent(nfrs);
+		performanceComposite.createButtons(listViewerPatterns);
+		
+		//Availability NFR
+		createLabel(nfrComposite, "Availability", 61, 15, 9, 0, 0, null);
+		NfrComposite availabilityComposite = new NfrComposite("Availability", nfrComposite, appDescription);
+		availabilityComposite.createTable(tableViewerAvailability);
+		availabilityComposite.setFilter();
+		availabilityComposite.createTagColumn();
+		availabilityComposite.createAbstractValueColumn("General Availability");
+		availabilityComposite.createValueColumn("Actual Availability");
+		availabilityComposite.createUnitColumn();
+		availabilityComposite.createContent(nfrs);
+		availabilityComposite.createButtons(listViewerPatterns);
+		
+		//Location NFR
+		createLabel(nfrComposite, "Location", 61, 15, 9, 0, 0, null);
+		NfrComposite locationComposite = new NfrComposite("Location", nfrComposite, appDescription);
+		locationComposite.createTable(tableViewerLocation);
+		locationComposite.setFilter();
+		locationComposite.createTagColumn();
+		locationComposite.createAbstractValueColumn("Location Setting");
+		locationComposite.createValueColumn("Locations");
+		locationComposite.createContent(nfrs);
+		locationComposite.createButtons(listViewerPatterns);
+		
+		//Cost NFR
+		createLabel(nfrComposite, "Cost", 61, 15, 9, 0, 0, null);
+		NfrComposite costComposite = new NfrComposite("Cost", nfrComposite, appDescription);
+		costComposite.createTable(tableViewerCost);
+		costComposite.setFilter();
+		costComposite.createTagColumn();
+		costComposite.createAbstractValueColumn("Cost Estimation");
+		costComposite.createValueColumn("Actual Cost");
+		costComposite.createUnitColumn();
+		costComposite.createContent(nfrs);
+		costComposite.createButtons(listViewerPatterns);
+		
+		// size scrolledComposite
+		nfrComposite.setSize(nfrComposite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
+		scrolledComposite.setMinSize(nfrComposite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
+
+		listViewerPatterns.refresh();
+	}
+
+	public void refreshContent(AppDescription appDescription) {
+		this.appDescription = appDescription;
+		this.nfrs = appDescription.getNfrs();
+		if (nfrs == null) {
+			nfrs = new ArrayList<Nfr>();
+		}
+	}
+
+	public void createLabel(Composite parent, String labelName, int width, int height, int fontSize, int topMargin, int bottomMargin, Color background) {
+		
+		CLabel label = new CLabel(parent, SWT.NONE);
+		label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		label.setSize(width, height);
+		if(topMargin == 0)
+			label.setTopMargin(0);
+		if(bottomMargin == 0)
+			label.setBottomMargin(0);
+		label.setText(labelName);
+		label.setFont(SWTResourceManager.getFont("Segoe UI", fontSize, SWT.BOLD));
+		label.setBackground(background);
+
+		// macht den unterstrich unter dem label...
+		/*Label labelUnderground = new Label(parent, SWT.SEPARATOR | SWT.HORIZONTAL);
+		labelUnderground.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		labelUnderground.setSize(236, 2);*/
+
+	}
+}
\ No newline at end of file
diff --git a/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/NfrScalabilityComposite.java b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/NfrScalabilityComposite.java
deleted file mode 100644
index fad0dbceb8af0d54233e8c0b809520809083b579..0000000000000000000000000000000000000000
--- a/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/NfrScalabilityComposite.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package eu.DECIDEh2020.architect.plugin.layoutComponents;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Composite;
-
-import eu.DECIDEh2020.appManager.models.ScalabilityNfr;
-
-
-public class NfrScalabilityComposite extends Composite {
-
-	public NfrScalabilityComposite(Composite parent, ScalabilityNfr nfr) {
-		super(parent, SWT.NONE);
-	}
-
-}
-
-
-
diff --git a/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/NfrSelector.java b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/NfrSelector.java
index 8d19997368458112e22ab597595c11acff3f47fb..334e0dd1011491a2f68928c04333e7324795f30b 100644
--- a/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/NfrSelector.java
+++ b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/NfrSelector.java
@@ -54,7 +54,7 @@ public class NfrSelector extends Composite {
 		private Composite content;
 		private String name;
 		private String toolTipText;
-		private Nfr nfrObject;
+		//private Nfr nfrObject;
 		
 		public nfr(String name, CTabFolder itemParent, Composite itemContent, Composite buttonParent, String toolTipText) {
 			this.name= name;
@@ -67,13 +67,14 @@ public class NfrSelector extends Composite {
 			addListener();
 		}
 		
-		private void createObject() {
-			//nfrObject= new Nfr();
-			
+		/*private void createObject() {
+			nfrObject= new Nfr();
 		}
+		
 		private String getName() {
 			return name;
-		}
+		}*/
+		
 		private void addItem() {
 			tabItem = new CTabItem(parentFolder, SWT.NONE);
 			tabItem.setShowClose(true);
@@ -91,11 +92,9 @@ public class NfrSelector extends Composite {
 			buttonParent.redraw();
 			buttonParent.layout();
 			buttonParent.getParent().layout();
-			//System.out.println("button added");
 		}
 		
 		public void closeItem() {
-			//System.out.println("dispose");
 			tabItem.dispose();
 			tabItem = null;
 			addButton();
@@ -125,7 +124,6 @@ public class NfrSelector extends Composite {
 	
 	public NfrSelector(Composite parent, int style) {
 		super(parent, style);
-		// TODO Auto-generated constructor stub
 		createGUI();
 	}
 	
diff --git a/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/NfrUnitLabelProvider.java b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/NfrUnitLabelProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..738ae67d346d5e3e3eaaa61ca174b1c0b8a857d5
--- /dev/null
+++ b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/NfrUnitLabelProvider.java
@@ -0,0 +1,33 @@
+package eu.DECIDEh2020.architect.plugin.layoutComponents;
+
+import org.eclipse.jface.viewers.ColumnLabelProvider;
+import org.eclipse.swt.graphics.Image;
+
+import eu.DECIDEh2020.appManager.models.AvailabilityNfr;
+import eu.DECIDEh2020.appManager.models.CostNfr;
+import eu.DECIDEh2020.appManager.models.Nfr;
+import eu.DECIDEh2020.appManager.models.PerformanceNfr;
+import eu.DECIDEh2020.appManager.models.ScalabilityNfr;
+
+public class NfrUnitLabelProvider extends ColumnLabelProvider {
+	public Image getImage(Object element) {
+		return null;
+	}
+
+	public String getText(Object element) {
+		if (((Nfr) element).getAdditionalProperties().containsKey("unit")) {
+			return ((Nfr) element).getAdditionalProperties().get("unit").asText();
+		} else if (PerformanceNfr.class.isInstance(element)) {
+			return ((PerformanceNfr) element).getUnit();
+		} else if (AvailabilityNfr.class.isInstance(element)) {
+			return ((AvailabilityNfr) element).getUnit();
+		} else if (ScalabilityNfr.class.isInstance(element)) {
+			return ((ScalabilityNfr) element).getUnit();
+		} else if (CostNfr.class.isInstance(element)) {
+			return ((CostNfr) element).getUnit();
+		} else {
+			return null;
+		}
+
+	}
+}
\ No newline at end of file
diff --git a/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/ProjectPageComposite.java b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/ProjectPageComposite.java
index f4091289d66eae63d7967ef5d247c554023b4432..aed1b1d093f1b145ae43936378d0519a72ec9689 100644
--- a/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/ProjectPageComposite.java
+++ b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/ProjectPageComposite.java
@@ -106,18 +106,12 @@ public class ProjectPageComposite extends Composite {
 		lblMicroservices.setBottomMargin(0);
 		lblMicroservices.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
 		lblMicroservices.setText("Microservice List");
-		
 
-		
 		Composite composite = new Composite(container, SWT.NONE);
 		composite.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1));
 		composite.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
 		composite.setLayout(new GridLayout(1, false));
-		
-	
-		
-		
-		
+
 		Composite projectInfo = new Composite(composite, SWT.NONE);
 		projectInfo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
 		projectInfo.setSize(202, 130);
@@ -155,10 +149,6 @@ public class ProjectPageComposite extends Composite {
 		microserviceListComposite = new MicroserviceListComposite(composite, SWT.NONE, project, false,SWTResourceManager.getColor(SWT.COLOR_WHITE));
 		microserviceListComposite.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, true, 1, 1));
 		
-		
-		
-		
-		
 		txtProjectname.addKeyListener(new KeyAdapter() {
 			@Override
 			public void keyPressed(KeyEvent e) {
@@ -166,8 +156,6 @@ public class ProjectPageComposite extends Composite {
 			}
 		});
 		
-		
-		
 		ScrolledComposite scrolledComposite = new ScrolledComposite(container, SWT.V_SCROLL);
 		
 		
@@ -194,9 +182,8 @@ public class ProjectPageComposite extends Composite {
 	        });
 		  
 		scrolledComposite.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
-		
-		
-		
+
+		// Microservice List is also in scrolledComposite
 		Composite mcontainer = new Composite(scrolledComposite, SWT.NONE);
 		mcontainer.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
 		mcontainer.setLayout(new GridLayout(1, false));
diff --git a/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/RemoveSelectionAdapter.java b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/RemoveSelectionAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..5e1b50e42660afdf30f726ded682169b490a21e4
--- /dev/null
+++ b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/RemoveSelectionAdapter.java
@@ -0,0 +1,45 @@
+package eu.DECIDEh2020.architect.plugin.layoutComponents;
+
+import java.util.List;
+
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.widgets.Table;
+
+import eu.DECIDEh2020.appManager.models.AppDescription;
+import eu.DECIDEh2020.appManager.models.Nfr;
+import eu.DECIDEh2020.architect.plugin.utils.CloudPatternHelper;
+
+public class RemoveSelectionAdapter extends SelectionAdapter {
+	private Table table;
+	private AppDescription appDescription;
+	private TableViewer tableViewer;
+	private ListViewer listViewerPatterns;
+	
+	public RemoveSelectionAdapter(Table table, AppDescription appDescription, TableViewer tableViewerScalability, ListViewer listViewerPatterns) {
+		super();
+		this.table = table;
+		this.appDescription = appDescription;
+		this.tableViewer = tableViewerScalability;
+		this.listViewerPatterns = listViewerPatterns;
+	}
+	
+	@Override
+	public void widgetSelected(SelectionEvent e) {
+		int idx = table.getSelectionIndex();
+		Nfr selected = (Nfr) tableViewer.getElementAt(idx);
+		
+		List<Nfr> nfrs = appDescription.getNfrs();
+		nfrs.remove(selected);
+		appDescription.setNfrs(nfrs);
+		
+		tableViewer.refresh();
+		
+		listViewerPatterns.setInput(CloudPatternHelper.inferPatterns(nfrs));
+		appDescription.setRecommendedPatterns(CloudPatternHelper.inferPatterns(nfrs));
+		
+		listViewerPatterns.refresh();
+	}
+}
diff --git a/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/TagEditingSupport.java b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/TagEditingSupport.java
new file mode 100644
index 0000000000000000000000000000000000000000..60d17d9deb4188a384ca41b7dd8751c0671333d9
--- /dev/null
+++ b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/TagEditingSupport.java
@@ -0,0 +1,65 @@
+package eu.DECIDEh2020.architect.plugin.layoutComponents;
+
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.jface.viewers.ComboBoxCellEditor;
+import org.eclipse.jface.viewers.EditingSupport;
+import org.eclipse.jface.viewers.TableViewer;
+
+import eu.DECIDEh2020.appManager.AppDescriptionHelper;
+import eu.DECIDEh2020.appManager.models.AppDescription;
+import eu.DECIDEh2020.appManager.models.Nfr;
+
+public class TagEditingSupport extends EditingSupport {
+	private final TableViewer viewer;
+	private final ComboBoxCellEditor editor;
+	//private final AppDescription appDescription;
+	private final AppDescriptionHelper adh;
+	
+	public TagEditingSupport(TableViewer viewer, AppDescription appDescription) {
+		super(viewer);
+		this.viewer = viewer;
+		//this.appDescription = appDescription;
+		this.adh = AppDescriptionHelper.create(appDescription);
+		this.editor = new ComboBoxCellEditor(viewer.getTable(),
+				adh.getTags().toArray(new String[adh.getTags().size()]));
+	}
+
+	@Override
+	protected CellEditor getCellEditor(Object element) {
+		editor.setItems(adh.getTags().toArray(new String[adh.getTags().size()]));
+		return editor;
+	}
+
+	@Override
+	protected boolean canEdit(Object element) {
+		return true;
+	}
+
+	@Override
+	protected Object getValue(Object element) {
+		Nfr n = (Nfr) element;
+		String[] items = ((ComboBoxCellEditor) editor).getItems();
+		
+		int idx = 0;
+		for (int i = 0; i < items.length; i++) {
+			if (items[i].equals((n.getTags().size() > 0 ? n.getTags().get(0) : ""))) {
+				idx = i;
+				break;
+			}
+		}
+
+		return idx;
+	}
+
+	@Override
+	protected void setValue(Object element, Object value) {
+		//String[] items = ((ComboBoxCellEditor) editor).getItems();
+		
+		//String selected = items[(Integer) value];
+
+		//((Nfr) element).setTags(Collections.singletonList(selected));
+
+		viewer.update(element, null);
+	}
+
+}
\ No newline at end of file
diff --git a/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/TagListViewer.java b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/TagListViewer.java
index b5971f1067f62afb23ccc9f4f4342839cdad3ff5..34d513708748d8392f739bd0f332848b9d3b597c 100644
--- a/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/TagListViewer.java
+++ b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/TagListViewer.java
@@ -20,23 +20,19 @@ import org.eclipse.wb.swt.SWTResourceManager;
 import eu.DECIDEh2020.appManager.AppDescriptionHelper;
 import eu.DECIDEh2020.appManager.models.AppDescription;
 import eu.DECIDEh2020.appManager.models.Microservice;
-import eu.DECIDEh2020.architect.cloudpatterns.Patterns;
 
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.Set;
 import java.util.stream.Collectors;
 
-import org.apache.jena.rdf.model.Resource;
 import org.eclipse.jface.viewers.ArrayContentProvider;
 import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.LabelProvider;
 import org.eclipse.jface.viewers.ListViewer;
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Label;
@@ -46,9 +42,11 @@ import org.eclipse.jface.viewers.ComboViewer;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.TraverseListener;
 import org.eclipse.swt.events.TraverseEvent;
+
 //composite for the list of tags a microservice can have
 public class TagListViewer extends Composite {
-	private static class TagLabelProvider extends LabelProvider {
+	
+	/*private static class TagLabelProvider extends LabelProvider {
 		public Image getImage(Object element) {
 			return null;
 		}
@@ -56,13 +54,12 @@ public class TagListViewer extends Composite {
 		public String getText(Object element) {
 			return (String) element;
 		}
-	}
+	}*/
 
 	private static class TagContentProvider implements IStructuredContentProvider {
 		@SuppressWarnings("unchecked")
 		public Object[] getElements(Object inputElement) {
 			return ((Set<String>) inputElement).toArray();
-
 		}
 
 		public void dispose() {
@@ -75,11 +72,9 @@ public class TagListViewer extends Composite {
 
 	private List list;
 	private ListViewer listViewer;
-	private AppDescription appDescription;
 	private AppDescriptionHelper appDescriptionHelper;
 	private Set<String> allTags;
 	private Set<String> microserviceTags;
-	private Color background;
 
 	/**
 	 * Create the composite.
@@ -87,24 +82,29 @@ public class TagListViewer extends Composite {
 	 * @param parent
 	 * @param style
 	 * @param microservice
+	 * @param appDescription
+	 * @param background
 	 */
-	public TagListViewer(Composite parent, int style, Microservice microservice, AppDescription appDescription,Color background) {
+	
+	public TagListViewer(Composite parent, int style, Microservice microservice, AppDescription appDescription, Color background) {
+		
 		super(parent, SWT.NONE);
-		this.background=background;
-		this.setBackground(background);
-		this.appDescription = appDescription;
+
+		this.setBackground(background); 
+		
 		appDescriptionHelper = AppDescriptionHelper.create(appDescription);
+		
 		if (appDescription != null) {
 			allTags = appDescriptionHelper.getTags();
 		} else {
 			allTags = new HashSet<String>();
 		}
-		Patterns patterns = Patterns.createDefaultPatterns();
-		java.util.List<Resource> nfrs = patterns.listNFRs();
+		
 		setLayout(new GridLayout(1, false));
 		
 		listViewer = new ListViewer(this, SWT.BORDER);
 		list = listViewer.getList();
+		
 		GridData gd_list = new GridData(SWT.FILL, SWT.CENTER, true, true, 1, 1);
 		gd_list.minimumHeight = 75;
 		list.setLayoutData(gd_list);
@@ -121,8 +121,7 @@ public class TagListViewer extends Composite {
 
 		ComboViewer comboViewer = new ComboViewer(composite, SWT.NONE);
 		Combo combo = comboViewer.getCombo();
-		
-		
+				
 		combo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
 
 		comboViewer.setContentProvider(new ArrayContentProvider());
@@ -135,20 +134,17 @@ public class TagListViewer extends Composite {
 		btnAdd.setLayoutData(gd_btnAdd);
 		btnAdd.setText("Add");
 
-		Composite composite_1 = new Composite(composite, SWT.NONE);
-		composite_1.setBackground(background);
-		composite_1.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1));
-		composite_1.setLayout(new GridLayout(1, false));
-
 		Button btnRemove = new Button(composite, SWT.NONE);
 
 		GridData gd_btnRemove = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
 		gd_btnRemove.widthHint = 50;
 		btnRemove.setLayoutData(gd_btnRemove);
 		btnRemove.setText("Remove");
+		
 		if (microservice != null) {
 			microserviceTags = microservice.getTags().stream().collect(Collectors.toSet());
 		}
+		
 		listViewer.setContentProvider(new TagContentProvider());
 		listViewer.setInput(microserviceTags);
 
@@ -157,9 +153,9 @@ public class TagListViewer extends Composite {
 			@Override
 			public void widgetSelected(SelectionEvent e) {
 				addToList(microservice, appDescription, comboViewer, combo);
-
 			}
 		});
+		
 		combo.addTraverseListener(new TraverseListener() {
 			public void keyTraversed(TraverseEvent e) {
 				if(e.detail == SWT.TRAVERSE_RETURN) {
@@ -192,19 +188,21 @@ public class TagListViewer extends Composite {
 			}
 		});
 	}
+	
 	/**
 	 * @wbp.parser.constructor
 	 */
 	public TagListViewer(Composite parent, int style, Microservice microservice, AppDescription appDescription) {
 		this(parent, SWT.NONE,microservice, appDescription,SWTResourceManager.getColor(SWT.COLOR_WIDGET_BACKGROUND));
 	}
-	public java.util.List<Resource> getSelection() {
+	
+	/*public java.util.List<Resource> getSelection() {
 
 		java.util.List<Resource> selection = listViewer.getStructuredSelection().toList();
 
 		return selection;
 
-	}
+	}*/
 
 	public void addSelection(java.util.List<String> nfrs) {
 
diff --git a/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/ValueEditingSupport.java b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/ValueEditingSupport.java
new file mode 100644
index 0000000000000000000000000000000000000000..ac033bfc233985c3cf3aa463ec8156adc1041a23
--- /dev/null
+++ b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/ValueEditingSupport.java
@@ -0,0 +1,103 @@
+package eu.DECIDEh2020.architect.plugin.layoutComponents;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.jface.viewers.EditingSupport;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TextCellEditor;
+
+import eu.DECIDEh2020.appManager.models.ScalabilityNfr;
+import eu.DECIDEh2020.appManager.models.LocationNfr;
+import eu.DECIDEh2020.appManager.models.CostNfr;
+import eu.DECIDEh2020.appManager.models.PerformanceNfr;
+import eu.DECIDEh2020.appManager.models.AvailabilityNfr;
+
+
+public class ValueEditingSupport extends EditingSupport {
+
+	private final TableViewer viewer;
+	private final TextCellEditor editor;
+	private final String type;
+
+	public ValueEditingSupport(String type, TableViewer viewer) {
+		super(viewer);
+		
+		this.viewer = viewer;
+		this.type = type;
+		this.editor = new TextCellEditor(viewer.getTable());
+	}
+
+	@Override
+	protected CellEditor getCellEditor(Object element) {
+		return this.editor;
+	}
+
+	@Override
+	protected boolean canEdit(Object element) {
+		return true;
+	}
+
+	@Override
+	protected Object getValue(Object element) {
+		switch(type) {
+		case "Scalability":
+			return String.valueOf(((ScalabilityNfr) element).getValue());
+		case "Availability":
+			return String.valueOf(((AvailabilityNfr) element).getValue());
+		case "Performance":
+			return String.valueOf(((PerformanceNfr) element).getValue());
+		case "Cost":
+			return String.valueOf(((CostNfr) element).getValue());
+		case "Location":
+			return ((LocationNfr) element).getValue().toString();
+		}
+		return null;
+	}
+
+	@Override
+	protected void setValue(Object element, Object value) {
+		Double d;
+		Integer i;
+		switch(type) {
+		case "Scalability":
+			ScalabilityNfr n = (ScalabilityNfr) element;
+			i = Integer.valueOf((String) value);
+			n.setValue(i);
+			this.viewer.update(element, null);
+			break;
+		case "Availability":
+			AvailabilityNfr availNfr = (AvailabilityNfr) element;
+			d = Double.valueOf((String) value);
+			availNfr.setValue(d);
+			viewer.update(element, null);
+			break;
+		case "Performance":
+			PerformanceNfr perfNfrn = (PerformanceNfr) element;
+			d = Double.valueOf((String) value);
+			perfNfrn.setValue(d);
+			viewer.update(element, null);
+			break;
+		case "Cost":
+			CostNfr costNfr = (CostNfr) element;
+			d = Double.valueOf((String) value);
+			costNfr.setValue(d);
+			viewer.update(element, null);
+			break;
+		case "Location":
+			LocationNfr locNfr = (LocationNfr) element;
+	        String[] locations = value.toString().replace(",", "").replace("[", "").replace("]", "").split(" ");
+	        List<String> v = new ArrayList<String>();
+	        for(int j = 0; j < locations.length; ++j) {
+	                v.add(locations[j]);
+	        }
+	        locNfr.setValue(v);
+	        viewer.update(element, null);
+	        break;
+		}
+		
+		
+		
+	}
+}
\ No newline at end of file
diff --git a/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/utils/CloudPatternHelper.java b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/utils/CloudPatternHelper.java
index 2078ffbcd10738c562f01f34ad14277f2fd8f4a4..69f2760e25aaf9e51fd5c74723b0b64fd16c04c4 100644
--- a/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/utils/CloudPatternHelper.java
+++ b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/utils/CloudPatternHelper.java
@@ -18,7 +18,7 @@ import eu.DECIDEh2020.architect.plugin.Activator;
 public class CloudPatternHelper {
 
 	public static ObjectNode getPattern(String uriRef) {
-		return Patterns.createDefaultPatterns().getPatternAsJson(uriRef);
+		return Patterns.createDefaultPatterns().getPatternJson(uriRef);
 	}
 
 	public static List<Pattern> inferPatterns(List<Nfr> nfrs) {
@@ -37,7 +37,24 @@ public class CloudPatternHelper {
 				Activator.getDefault().getLog().log(new Status(Status.ERROR, Activator.PLUGIN_ID, "Map pattern class.", e));
 			}
 		});
-		return patterns;
+		
+		List<Pattern> patternsDupl = new ArrayList<>();
+		for (Pattern element : patterns) {
+			if(patternsDupl.isEmpty() == true) {
+				patternsDupl.add(element);
+			} else {
+				int i = 0;
+				while(patternsDupl.get(i).getTitle() != element.getTitle()) {
+					++i;
+					if (i == patternsDupl.size()) {
+						patternsDupl.add(element);
+						break;
+					}
+				}
+			}
+		}
+  
+		return patternsDupl;
 	}
 	
 }
diff --git a/ARCHITECT/architect/feature/feature.xml b/ARCHITECT/architect/feature/feature.xml
index ea2d17ba3688c46c8f042c48466bd7f414bb5fc9..c03173a5fbfcd1706d7d7b06ba0bc1c9c00d75ee 100644
--- a/ARCHITECT/architect/feature/feature.xml
+++ b/ARCHITECT/architect/feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="eu.DECIDEh2020.architect.feature"
       label="ARCHITECT"
-      version="1.0.1">
+      version="1.0.1.qualifier">
 
    <description url="http://decide-h2020.eu/">
       ARCHITECT description
@@ -32,14 +32,14 @@
          id="eu.DECIDEh2020.architect.patterns"
          download-size="0"
          install-size="0"
-         version="1.0.1"
+         version="1.0.1.qualifier"
          unpack="false"/>
 
    <plugin
          id="eu.DECIDEh2020.architect.plugin"
          download-size="0"
          install-size="0"
-         version="1.0.1"
+         version="1.0.1.qualifier"
          unpack="false"/>
 
 </feature>
diff --git a/ARCHITECT/architect/feature/pom.xml b/ARCHITECT/architect/feature/pom.xml
index 3655d812de47da4dee013af6ae1bf879760a8b5c..1b961786002b3f411b8fda5631dd2e28a387d928 100644
--- a/ARCHITECT/architect/feature/pom.xml
+++ b/ARCHITECT/architect/feature/pom.xml
@@ -5,7 +5,7 @@
   <parent>
   	<groupId>eu.DECIDEh2020</groupId>
   	<artifactId>architect</artifactId>
-  	<version>1.0.1</version>
+  	<version>1.0.1-SNAPSHOT</version>
   	<relativePath>..</relativePath>
   </parent>
 </project>
diff --git a/ARCHITECT/architect/optimusclas/META-INF/MANIFEST.MF b/ARCHITECT/architect/optimusclas/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000000000000000000000000000000000..f9a4e3c219f8d2dbbcb64d2b2e74e02ea4fd8de8
--- /dev/null
+++ b/ARCHITECT/architect/optimusclas/META-INF/MANIFEST.MF
@@ -0,0 +1,20 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: optimusclas
+Bundle-SymbolicName: eu.DECIDEh2020.optimus; singleton:=true
+Bundle-Version: 1.0.1.qualifier
+Require-Bundle: org.eclipse.swt;bundle-version="3.106.1",
+ org.eclipse.ui;bundle-version="3.109.0",
+ org.eclipse.ui.ide;bundle-version="3.13.1",
+ org.eclipse.ui.views;bundle-version="3.9.0",
+ org.eclipse.jface.databinding;bundle-version="1.8.100",
+ org.apache.log4j;bundle-version="1.2.15",
+ org.eclipse.e4.core.di;bundle-version="1.6.100",
+ org.eclipse.core.runtime;bundle-version="3.13.0",
+ org.eclipse.core.resources;bundle-version="3.12.0",
+ org.eclipse.jface.text;bundle-version="3.12.0",
+ eu.DECIDEh2020.architect.plugin;bundle-version="1.0.1",
+ org.eclipse.ui.workbench
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Automatic-Module-Name: eu.DECIDEh2020.optimus
+Bundle-ClassPath: .
diff --git a/ARCHITECT/architect/optimusclas/build.properties b/ARCHITECT/architect/optimusclas/build.properties
new file mode 100644
index 0000000000000000000000000000000000000000..42d1ee3c214d64d78c166d0113524d95517f0228
--- /dev/null
+++ b/ARCHITECT/architect/optimusclas/build.properties
@@ -0,0 +1,4 @@
+source.. = src/
+output.. = target/classes
+bin.includes = META-INF/,\
+               plugin.xml
diff --git a/ARCHITECT/architect/optimusclas/plugin.xml b/ARCHITECT/architect/optimusclas/plugin.xml
new file mode 100644
index 0000000000000000000000000000000000000000..58329c6a3ae844f5c68659081b24d57aa7423a64
--- /dev/null
+++ b/ARCHITECT/architect/optimusclas/plugin.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+
+   <extension
+         point="eu.DECIDEh2020.architect.extension">
+      <pagebuilder
+            PageName="Classification"
+            class="eu.DECIDEh2020.optimus.editors.ClassificationPageBuilder">
+      </pagebuilder>
+      <pagebuilder
+            PageName="Simulation"
+            class="eu.DECIDEh2020.optimus.editors.SimulationPageBuilder">
+      </pagebuilder>
+   </extension>
+  
+
+</plugin>
diff --git a/ARCHITECT/architect/optimusclas/pom.xml b/ARCHITECT/architect/optimusclas/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3199298f90fd879375e0307b5da1a100f66f5a02
--- /dev/null
+++ b/ARCHITECT/architect/optimusclas/pom.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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>
+    <artifactId>eu.DECIDEh2020.optimus</artifactId>
+  <packaging>eclipse-plugin</packaging>
+  
+  <parent>
+    <artifactId>architect</artifactId>
+    <groupId>eu.DECIDEh2020</groupId>
+    <version>1.0.1-SNAPSHOT</version>
+    <relativePath>..</relativePath>
+  </parent>
+<!-- https://mvnrepository.com/artifact/com.googlecode.json-simple/json-simple -->
+<!-- <dependencies> -->
+<!--  <dependency> -->
+<!--     <groupId>com.googlecode.json-simple</groupId> -->
+<!--     <artifactId>json-simple</artifactId> -->
+<!--     <version>1.1.1</version> -->
+<!--  </dependency> -->
+<!--  		<dependency> -->
+<!-- 			<groupId>eu.decideh2020</groupId> -->
+<!-- 			<artifactId>eu.decideh2020.ACSmI.discovery.backend.client</artifactId> -->
+<!-- 			<version>1.0.0</version> -->
+<!-- 		</dependency> -->
+<!--  		<dependency> -->
+<!-- 			<groupId>eu.DECIDEh2020</groupId> -->
+<!-- 			<artifactId>optimus.client</artifactId> -->
+<!-- 			<version>2.0.0</version> -->
+<!-- 		</dependency> -->
+ <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.jaxrs/jackson-jaxrs-json-provider -->
+<!-- <dependency> -->
+<!--     <groupId>com.fasterxml.jackson.jaxrs</groupId> -->
+<!--     <artifactId>jackson-jaxrs-json-provider</artifactId> -->
+<!--     <version>2.9.6</version> -->
+<!-- </dependency> -->
+<!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-rt-rs-client -->
+<!-- <dependency> -->
+<!--     <groupId>org.apache.cxf</groupId> -->
+<!--     <artifactId>cxf-rt-rs-client</artifactId> -->
+<!--     <version>3.1.11</version> -->
+<!-- </dependency> -->
+ 
+<!-- </dependencies> -->
+
+</project>
diff --git a/ARCHITECT/architect/optimusclas/src/eu/DECIDEh2020/optimus/editors/Classification.java b/ARCHITECT/architect/optimusclas/src/eu/DECIDEh2020/optimus/editors/Classification.java
new file mode 100644
index 0000000000000000000000000000000000000000..f8df12c72a546b5f87639ad471a73b20e49678c6
--- /dev/null
+++ b/ARCHITECT/architect/optimusclas/src/eu/DECIDEh2020/optimus/editors/Classification.java
@@ -0,0 +1,166 @@
+
+/*********************************************************************
+* Copyright (c) 2018 Tecnalia.
+*
+* This program and the accompanying materials are made
+* available under the terms of the Eclipse Public License 2.0
+* which is available at https://www.eclipse.org/legal/epl-2.0/
+*
+* SPDX-License-Identifier: EPL-2.0
+* Contributors (in alphabetical order):
+* Alberto Molinuevo                         Tecnalia
+* Gorka Benguria                            Tecnalia
+* I�aki Etxaniz                             Tecnalia
+* Juncal Alonso                             Tecnalia
+* Leire Orue-Echevarria                     Tecnalia
+* Maria Jose Lopez                          Tecnalia
+* Marisa Escalante                          Tecnalia
+* Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+**********************************************************************/
+package eu.DECIDEh2020.optimus.editors;
+
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.ScrolledComposite;
+import org.eclipse.swt.custom.StyledText;
+import org.eclipse.swt.events.FocusEvent;
+import org.eclipse.swt.events.FocusListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.wb.swt.SWTResourceManager;
+//import org.eclipse.wb.swt.SWTResourceManager;
+import org.json.simple.JSONArray;
+//import org.json.simple.JSONException;
+import org.json.simple.JSONObject;
+//import org.json.parser.JSONParser;
+import java.io.BufferedWriter;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import eu.DECIDEh2020.appManager.models.AppDescription;
+import eu.DECIDEh2020.appManager.models.Microservice;
+import eu.DECIDEh2020.architect.plugin.editor.Page;
+import org.eclipse.swt.graphics.Point;
+
+public class Classification extends Page {
+
+	/**
+	 * Create the composite.
+	 * @param parent
+	 * @param style
+	 */
+
+	/** The text widget used in page 2. */
+	private StyledText text;
+	/** The font chosen in page 1. */
+	private Font font;
+	private Text text_1;
+	private Composite text_2;
+	public int microservicesNumber = 0;
+
+	public int y = 5;
+	public String newcontent;
+	private AppDescription appdescription;
+	private Color background;
+
+
+	
+	public Classification(Composite parent, int style, AppDescription appdescription) {
+		super(parent, SWT.NO_FOCUS, appdescription);
+		this.appdescription = appdescription;
+		background= SWTResourceManager.getColor(SWT.COLOR_WHITE);
+
+		setBackground(background);
+		createClassificationGUI(appdescription);
+	}
+		
+	private void createClassificationGUI(AppDescription appdescription) {
+		//to redraw the page/tab
+		microservicesNumber = 0;
+		y = 5;
+		Control[] children = this.getChildren();
+	    for (int i = 0 ; i < children.length; i++) {
+	        children[i].dispose();
+	    }
+	    
+	  
+		Label lblAppName = new Label(this, SWT.RIGHT);
+		lblAppName.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
+		lblAppName.setBounds(10, 10, 55, 20);
+		lblAppName.setText("Multi-cloud Application name:");
+		
+		
+		text_1 = new Text(this,SWT.BORDER);
+		GridData gd_text_1 = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
+		gd_text_1.widthHint = 112;
+		text_1.setLayoutData(gd_text_1);
+		text_1.setBounds(10, 10, 100, 21);
+		text_1.setText(appdescription.getName());
+		
+		setLayout(new GridLayout(2, true));
+		Composite container  = new Composite(this, SWT.NONE);
+		container.setLayoutData(new GridData(SWT.RIGHT, SWT.TOP, false, true, 2, 1));
+		container.setBackground(background);
+		GridLayout gl_container = new GridLayout(1,true);
+		gl_container.horizontalSpacing = 10;
+		container.setLayout(gl_container);
+		
+		ScrolledComposite scrolledComposite = new ScrolledComposite(container, SWT.V_SCROLL);
+		  
+		  Composite mcontainer = new Composite(scrolledComposite, SWT.NONE);
+			mcontainer.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+			mcontainer.setLayout(new GridLayout(1, false));
+			
+		  
+     	for (int i = 0; i <appdescription.getMicroservices().size(); i++)
+    	
+    	{
+		microservicesNumber = microservicesNumber + 1;
+		text_2 = new MicroserviceClassification(mcontainer, SWT.BORDER, y, appdescription, i);
+     	
+		text_2.setBounds(10, y, 600, 100);
+		y = (120* microservicesNumber);
+		
+		}
+     	//mcontainer.requestLayout();
+		mcontainer.requestLayout();
+		scrolledComposite.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, true, 1, 1));
+		scrolledComposite.setContent(mcontainer);
+		scrolledComposite.setExpandVertical( true );
+		scrolledComposite.setExpandHorizontal( true );
+		int width = scrolledComposite.getClientArea().width/2;
+		scrolledComposite.setMinSize( mcontainer.computeSize( width, SWT.DEFAULT ) );
+		new Label(this, SWT.NONE);
+		new Label(this, SWT.NONE);
+		
+		scrolledComposite.addListener( SWT.Resize, event -> {
+			  final int w = scrolledComposite.getClientArea().width/2;
+			  scrolledComposite.setMinSize( mcontainer.computeSize( w, SWT.DEFAULT ) );
+			} );
+     	
+
+	}	
+	@Override
+	protected void checkSubclass() {
+		// Disable the check that prevents subclassing of SWT components
+	}
+	@Override
+	public void open(AppDescription appd) {
+		this.appdescription = appd;
+		createClassificationGUI(appd);
+		
+	}
+}
diff --git a/ARCHITECT/architect/optimusclas/src/eu/DECIDEh2020/optimus/editors/ClassificationPageBuilder.java b/ARCHITECT/architect/optimusclas/src/eu/DECIDEh2020/optimus/editors/ClassificationPageBuilder.java
new file mode 100644
index 0000000000000000000000000000000000000000..4ac3156a2730287e9fbc3ef6a8d87ddc4f2fcc43
--- /dev/null
+++ b/ARCHITECT/architect/optimusclas/src/eu/DECIDEh2020/optimus/editors/ClassificationPageBuilder.java
@@ -0,0 +1,43 @@
+/*********************************************************************
+* Copyright (c) 2018 Tecnalia.
+*
+* This program and the accompanying materials are made
+* available under the terms of the Eclipse Public License 2.0
+* which is available at https://www.eclipse.org/legal/epl-2.0/
+*
+* SPDX-License-Identifier: EPL-2.0
+* Contributors (in alphabetical order):
+* Alberto Molinuevo                         Tecnalia
+* Gorka Benguria                            Tecnalia
+* I�aki Etxaniz                             Tecnalia
+* Juncal Alonso                             Tecnalia
+* Leire Orue-Echevarria                     Tecnalia
+* Maria Jose Lopez                          Tecnalia
+* Marisa Escalante                          Tecnalia
+* Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+**********************************************************************/
+
+package eu.DECIDEh2020.optimus.editors;
+
+
+//import java.awt.Composite;
+import org.eclipse.swt.widgets.*;
+
+import eu.DECIDEh2020.appManager.models.AppDescription;
+import eu.DECIDEh2020.architect.plugin.editor.IPageBuilder;
+import eu.DECIDEh2020.architect.plugin.editor.Page;
+
+public class ClassificationPageBuilder implements IPageBuilder {
+	/**
+	 * 
+	 */
+	public ClassificationPageBuilder() {
+		super();
+		// TODO Auto-generated constructor stub
+	}
+	@Override
+	public  Page getPage(Composite parent, int style,AppDescription appdescription) {
+		return new Classification(parent, style, appdescription);
+	}
+
+}
diff --git a/ARCHITECT/architect/optimusclas/src/eu/DECIDEh2020/optimus/editors/MicroserviceClassification.java b/ARCHITECT/architect/optimusclas/src/eu/DECIDEh2020/optimus/editors/MicroserviceClassification.java
new file mode 100644
index 0000000000000000000000000000000000000000..691e40cf51073cb257e69eb5b7ff208ff1580f8f
--- /dev/null
+++ b/ARCHITECT/architect/optimusclas/src/eu/DECIDEh2020/optimus/editors/MicroserviceClassification.java
@@ -0,0 +1,362 @@
+
+/*********************************************************************
+* Copyright (c) 2018 Tecnalia.
+*
+* This program and the accompanying materials are made
+* available under the terms of the Eclipse Public License 2.0
+* which is available at https://www.eclipse.org/legal/epl-2.0/
+*
+* SPDX-License-Identifier: EPL-2.0
+* Contributors (in alphabetical order):
+* Alberto Molinuevo                         Tecnalia
+* Gorka Benguria                            Tecnalia
+* I�aki Etxaniz                             Tecnalia
+* Juncal Alonso                             Tecnalia
+* Leire Orue-Echevarria                     Tecnalia
+* Maria Jose Lopez                          Tecnalia
+* Marisa Escalante                          Tecnalia
+* Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+**********************************************************************/
+package eu.DECIDEh2020.optimus.editors;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.StyledText;
+import org.eclipse.swt.events.FocusEvent;
+import org.eclipse.swt.events.FocusListener;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+import org.json.simple.JSONArray;
+import org.json.simple.JSONObject;
+
+
+import eu.DECIDEh2020.appManager.models.Microservice;
+import eu.DECIDEh2020.appManager.AppDescriptionHelper;
+import eu.DECIDEh2020.appManager.models.AppDescription;
+import eu.DECIDEh2020.appManager.models.DetachableResource;
+import eu.DECIDEh2020.appManager.models.InfrastructureRequirements;
+
+import org.eclipse.swt.custom.ScrolledComposite;
+
+
+public class MicroserviceClassification extends Composite {
+
+	/**
+	 * Create the composite.
+	 * @param parent
+	 * @param style
+	 */
+	/** The text widget used in page 2. */
+	private StyledText text;
+	/** The font chosen in page 1. */
+	private Font font;
+	private Text text_1;
+	private Text text_2;
+	private static JSONObject micros;
+	private Text Detach_text;
+	private AppDescription appdescription;
+	private String DRes_type;
+	private Text disk_text;
+	private Text memory_text;
+	private Text cores_text;
+
+	
+	public MicroserviceClassification(Composite parent, int style, int y, AppDescription appdescription, int i) {
+		super(parent, style);
+		setEnabled(true);
+		this.appdescription = appdescription;
+		
+		if (appdescription.getMicroservices().get(i).getDetachableResources().isEmpty())
+			
+		{	DetachableResource DR = new DetachableResource();
+			DR.setName("none");
+			DR.setId(UUID.randomUUID().toString());
+			appdescription.getMicroservices().get(i).getDetachableResources().add(0, DR);
+		}
+			Label lblMicroserviceName = new Label(this, SWT.NONE);
+			lblMicroserviceName.setBounds(10, 13, 50, 30);
+			lblMicroserviceName.setText("Name");
+			Text text_2 = new Text(this, SWT.BORDER);
+			text_2.setTouchEnabled(true);
+			text_2.setEnabled(true);
+			text_2.setBounds(69, 13, 228, 30);
+			text_2.setText(appdescription.getMicroservices().get(i).getName());
+			
+			Label microserviceID = new Label(this, SWT.NONE);
+			microserviceID.setBounds(275, 13, 50, 15);
+			microserviceID.setVisible(false);
+			microserviceID.setText(appdescription.getMicroservices().get(i).getId());
+			
+			
+			
+			Combo ms_type = new Combo(this, SWT.NONE);
+			ms_type.setTouchEnabled(true);
+			ms_type.setEnabled(true);
+			ms_type.setItems(new String[] {"Computing", "Computing Public IP"});
+			ms_type.setBounds(505, 13, 233, 28);
+			
+			//take from appdescription the ms_type
+			String mstype = appdescription.getMicroservices().get(i).getClassification();
+			if (mstype != null)
+			{
+				ms_type.setText(mstype);
+				if (mstype.contentEquals("Computing Public IP"))
+				{
+				appdescription.getMicroservices().get(i).setPublicIP(true);
+				}
+			}
+			else 
+			{
+			appdescription.getMicroservices().get(i).setClassification("Computing");
+			ms_type.setText("Computing");
+			}
+						
+			ms_type.addFocusListener(new FocusListener() {
+
+				
+				@Override
+				public void focusGained(FocusEvent arg0) {
+					
+				}
+
+				@Override
+				public void focusLost(FocusEvent arg0) {
+					appdescription.getMicroservices().get(i).setClassification(ms_type.getText());
+				}
+				
+				
+			});
+			
+			
+			Label lblDetachableResource = new Label(this, SWT.NONE);
+			lblDetachableResource.setBounds(73, 115, 163, 27);
+			lblDetachableResource.setText("Detachable Resource");
+			Detach_text = new Text(this, SWT.BORDER);
+			Detach_text.setText("none");
+			Detach_text.setTouchEnabled(true);
+			Detach_text.setEnabled(true);
+			Detach_text.setBounds(242, 112, 117, 30);
+			String DRname = appdescription.getMicroservices().get(i).getDetachableResources().get(0).getName();
+			//if (DRname != "none")
+			if (!DRname.contains("none"))
+							
+			{	
+				Detach_text.setText(DRname);
+			}
+			
+			Detach_text.addFocusListener(new FocusListener(){
+		    	
+
+				@Override
+				public void focusGained(FocusEvent arg0) {
+					
+				}
+
+				@Override
+				public void focusLost(FocusEvent arg0) {
+					String name = Detach_text.getText();
+						appdescription.getMicroservices().get(i).getDetachableResources().get(0).setName(name);
+						appdescription.getMicroservices().get(i).getDetachableResources().get(0).setId(UUID.randomUUID().toString());
+				}
+			});
+						
+			Combo Detach_type = new Combo(this, SWT.NONE);
+			Detach_type.setTouchEnabled(true);
+			Detach_type.setEnabled(true);
+			Detach_type.setItems(new String[] {"db", "storage", "queue system"});
+			Detach_type.setBounds(543, 112, 195, 28);
+			
+			String DRtype = appdescription.getMicroservices().get(i).getDetachableResources().get(0).getClassification();
+			
+			if (DRname.contains("none"))
+			{
+				Detach_type.setText("storage");
+				appdescription.getMicroservices().get(i).getDetachableResources().get(0).setClassification("storage");
+			}
+			
+			else
+			{
+				Detach_type.setText(appdescription.getMicroservices().get(i).getDetachableResources().get(0).getClassification());
+			}
+			
+			Detach_type.addFocusListener(new FocusListener(){
+		    	
+
+				@Override
+				public void focusGained(FocusEvent arg0) {
+					
+				}
+
+				@Override
+				public void focusLost(FocusEvent arg0) {
+					String type = Detach_type.getText();
+						appdescription.getMicroservices().get(i).getDetachableResources().get(0).setClassification(type);
+				}
+			});
+			Button Det_DB = new Button(this, SWT.RADIO);
+			Det_DB.setSelection(false);
+			Det_DB.setBounds(365, 117, 43, 21);
+			Det_DB.setText("DB");
+				DetachableResource detdet = new DetachableResource();
+				detdet = appdescription.getMicroservices().get(i).getDetachableResources().get(0);
+				String name = detdet.getName();
+				
+				//detdet.setDb(true);
+				if (detdet.isDb()==null) {
+					detdet.setDb(false);
+				}
+				Boolean isdb =  detdet.isDb();
+				Det_DB.setSelection(isdb);
+				
+				Label lblMsclassification = new Label(this, SWT.NONE);
+				lblMsclassification.setBounds(363, 13, 136, 30);
+				lblMsclassification.setText("MSClassification:");
+				
+				Label lblDrclassification = new Label(this, SWT.NONE);
+				lblDrclassification.setBounds(424, 115, 117, 28);
+				lblDrclassification.setText("DRClassification:");
+				
+				InfrastructureRequirements infReq = new InfrastructureRequirements(); 
+				Label lblDisk = new Label(this, SWT.NONE);
+				lblDisk.setBounds(79, 67, 70, 20);
+				lblDisk.setText("Disk (GB):");
+				
+				disk_text = new Text(this, SWT.BORDER);
+				disk_text.setBounds(150, 67, 111, 26);
+				if (appdescription.getMicroservices().get(i).getInfrastructureRequirements() != null)
+				{
+					if (appdescription.getMicroservices().get(i).getInfrastructureRequirements().getMinDisk() != 0 ) {
+				disk_text.setText(String.valueOf(appdescription.getMicroservices().get(i).getInfrastructureRequirements().getMinDisk()));}
+				}
+				disk_text.addFocusListener(new FocusListener(){
+			    	
+
+					public void focusGained(FocusEvent arg0) {}
+					public void focusLost(FocusEvent arg0) {
+						if (!disk_text.getText().isEmpty()) {
+							infReq.setMinDisk(Integer.valueOf(disk_text.getText()));
+							infReq.setMaxDisk(Integer.valueOf(disk_text.getText()));
+							appdescription.getMicroservices().get(i).setInfrastructureRequirements(infReq);
+						}
+					}
+				});
+				
+				Label lblMemorygb = new Label(this, SWT.NONE);
+				lblMemorygb.setBounds(280, 70, 100, 20);
+				lblMemorygb.setText("Memory (GB):");
+				
+				
+				memory_text = new Text(this, SWT.BORDER);
+				memory_text.setBounds(386, 64, 103, 26);
+				if (appdescription.getMicroservices().get(i).getInfrastructureRequirements() != null)
+				{
+					if (appdescription.getMicroservices().get(i).getInfrastructureRequirements().getMinRam() != 0) {
+				memory_text.setText(String.valueOf(appdescription.getMicroservices().get(i).getInfrastructureRequirements().getMinRam()));}
+				}
+				memory_text.addFocusListener(new FocusListener(){
+			    	
+
+					public void focusGained(FocusEvent arg0) {}
+					public void focusLost(FocusEvent arg0) {
+						if (!memory_text.getText().isEmpty()) {
+							infReq.setMinRam(Integer.valueOf(memory_text.getText()));
+							infReq.setMaxRam(Integer.valueOf(memory_text.getText()));
+							appdescription.getMicroservices().get(i).setInfrastructureRequirements(infReq);
+						}
+					}
+				});
+							
+				Label lblNumberOfCpu = new Label(this, SWT.WRAP);
+				lblNumberOfCpu.setBounds(494, 67, 160, 30);
+				lblNumberOfCpu.setText("Number of CPU Cores:");
+				
+				cores_text = new Text(this, SWT.BORDER);
+				cores_text.setBounds(660, 64, 78, 26);
+//				if (appdescription.getMicroservices().get(i).getInfrastructureRequirements() != null)
+//				{
+//				infReq.setNumCores(cores_text.getText());
+	//			appdescription.getMicroservices().get(i).setInfrastructureRequirements(infReq);
+//				}
+				cores_text.addFocusListener(new FocusListener(){
+			    	
+
+					public void focusGained(FocusEvent arg0) {}
+					public void focusLost(FocusEvent arg0) {
+						if (!cores_text.getText().isEmpty()) {
+						//appdescription.getMicroservices().get(i).getInfrastructureRequirements().setNumCores(cores_text.getText());
+							System.out.println("numcores is: "+cores_text.getText());
+						}
+					}
+				});
+				
+			Det_DB.addFocusListener(new FocusListener(){
+		    	
+
+				public void focusGained(FocusEvent arg0) {
+					
+						
+					
+				}
+				public void focusLost(FocusEvent arg0) {
+					//appdescription.getMicroservices().get(i).getDetachableResources().get(0).setDb(false);
+					
+					if (Det_DB.getSelection()) {
+						if (appdescription.getMicroservices().get(i).getDetachableResources().get(0).isDb()) {
+							appdescription.getMicroservices().get(i).getDetachableResources().get(0).setDb(false);
+						appdescription.getMicroservices().get(i).getDetachableResources().get(0).setSql(false);
+						Detach_type.setText("storage");
+						Det_DB.setSelection(false);
+						}
+						else {
+							Det_DB.setSelection(true);
+							appdescription.getMicroservices().get(i).getDetachableResources().get(0).setDb(true);
+							Detach_type.setText("db");
+							if (appdescription.getMicroservices().get(i).getDetachableResources().get(0).getName().equals("MySQL")) {
+								appdescription.getMicroservices().get(i).getDetachableResources().get(0).setSql(true);
+								}
+						}
+						DRes_type="db";
+//						if (appdescription.getMicroservices().get(i).getDetachableResources().get(0).getName().equals("MySQL")) {
+//						appdescription.getMicroservices().get(i).getDetachableResources().get(0).setSql(true);
+//						}
+						//appdescription.getMicroservices().get(i).getDetachableResources().get(0).setDb(true);
+						//Detach_type.setText("db");
+						//Det_DB.setSelection(true);
+
+											} 
+//					else {
+//						appdescription.getMicroservices().get(i).getDetachableResources().get(0).setSql(false);
+//						Det_DB.setSelection(true);
+//						DRes_type="db";
+//						if (appdescription.getMicroservices().get(i).getDetachableResources().get(0).getName().equals("MySQL")) {
+//						appdescription.getMicroservices().get(i).getDetachableResources().get(0).setSql(true);
+//						}
+//					}
+					if (!Det_DB.getSelection() && !appdescription.getMicroservices().get(i).getDetachableResources().get(0).getClassification().contains("System Queue") ) {
+						Detach_type.setText("storage");
+						DRes_type="storage";
+						Det_DB.setSelection(false);
+						
+						}
+					
+						appdescription.getMicroservices().get(i).getDetachableResources().get(0).setClassification(DRes_type);
+				}
+			}
+					);
+
+		}
+
+	@Override
+	protected void checkSubclass() {
+		// Disable the check that prevents subclassing of SWT components
+	}
+}
diff --git a/ARCHITECT/architect/optimusclas/src/eu/DECIDEh2020/optimus/editors/SimulateSchema.java b/ARCHITECT/architect/optimusclas/src/eu/DECIDEh2020/optimus/editors/SimulateSchema.java
new file mode 100644
index 0000000000000000000000000000000000000000..4d2ebec795dd98ff5b02c068a9a6a726d1f42b65
--- /dev/null
+++ b/ARCHITECT/architect/optimusclas/src/eu/DECIDEh2020/optimus/editors/SimulateSchema.java
@@ -0,0 +1,385 @@
+
+/*********************************************************************
+* Copyright (c) 2018 Tecnalia.
+*
+* This program and the accompanying materials are made
+* available under the terms of the Eclipse Public License 2.0
+* which is available at https://www.eclipse.org/legal/epl-2.0/
+*
+* SPDX-License-Identifier: EPL-2.0
+* Contributors (in alphabetical order):
+* Alberto Molinuevo                         Tecnalia
+* Gorka Benguria                            Tecnalia
+* I�aki Etxaniz                             Tecnalia
+* Juncal Alonso                             Tecnalia
+* Leire Orue-Echevarria                     Tecnalia
+* Maria Jose Lopez                          Tecnalia
+* Marisa Escalante                          Tecnalia
+* Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+**********************************************************************/
+package eu.DECIDEh2020.optimus.editors;
+
+import java.io.DataInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.Paths;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Properties;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.ScrolledComposite;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+//import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.wb.swt.SWTResourceManager;
+//import org.eclipse.swt.widgets.Table;
+import org.json.simple.JSONArray;
+import eu.DECIDEh2020.appManager.AppManager;
+import eu.DECIDEh2020.appManager.HistoryManager;
+import eu.DECIDEh2020.appManager.exceptions.AppManagerException;
+
+
+
+
+//import com.fasterxml.jackson.databind.JsonNode;
+
+import eu.DECIDEh2020.appManager.models.AppDescription;
+import eu.DECIDEh2020.appManager.models.HistoryEntry;
+import eu.DECIDEh2020.appManager.models.SchemaElement;
+import eu.DECIDEh2020.architect.plugin.editor.Page;
+import eu.decideh2020.ACSmI.discovery.backend.client.api.DefinitionResourceApi;
+import eu.decideh2020.ACSmI.discovery.backend.client.api.ServiceResourceApi;
+import eu.decideh2020.ACSmI.discovery.backend.client.model.Definition;
+//import eu.decideh2020.ACSmI.discovery.backend.client.api.ServiceResourceApi;
+import eu.decideh2020.ACSmI.discovery.backend.client.model.Service;
+import eu.decideh2020.optimus.client.api.DefaultApi;
+import eu.decideh2020.optimus.client.model.ReturnedSimulation;
+import eu.decideh2020.optimus.client.model.ReturnedSc;
+import eu.decideh2020.optimus.client.model.Simulation;
+
+
+
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
+
+//import javax.ws.rs.core.Response;
+import org.apache.cxf.jaxrs.client.JAXRSClientFactory;
+import org.apache.cxf.jaxrs.client.ClientConfiguration;
+import org.apache.cxf.jaxrs.client.WebClient;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.swt.widgets.Combo;
+
+
+
+public class SimulateSchema extends Page {
+
+
+
+	/**
+	 * Create the composite.
+	 * @param parent
+	 * @param style
+	 */
+	private DefaultApi apiInstance;
+	private DefinitionResourceApi api;
+	private JSONArray NFRs;
+	private AppDescription appdescription;
+	private Text simText;
+	
+	public SimulateSchema(Composite parent, int style, AppDescription appdescription) {
+		super(parent, SWT.NONE, appdescription);
+		this.appdescription = appdescription;
+		createSimulationGUI(appdescription);
+		
+
+	}
+	
+	
+	private void createSimulationGUI(AppDescription appd) {
+		// TODO Auto-generated method stub
+		Control[] children = this.getChildren();
+	    for (int i = 0 ; i < children.length; i++) {
+	        children[i].dispose();
+	    }
+
+		ScrolledComposite scrolledComposite = new ScrolledComposite(this, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
+		scrolledComposite.setAlwaysShowScrollBars(true);
+		scrolledComposite.setBounds(10, 43, 982, 680);
+		scrolledComposite.setExpandHorizontal(true);
+		scrolledComposite.setExpandVertical(true);
+		
+		Group group = new Group(scrolledComposite, SWT.NONE);
+		NFRs = new JSONArray();
+		
+		
+		Button btnSimulate = new Button(group, SWT.NONE);
+		btnSimulate.setBounds(10, 8, 75, 25);
+		btnSimulate.setText("Simulate");
+		
+		Composite composite_1 = new Composite(group, SWT.NONE);
+		composite_1.setBounds(0, 51, 901, 596);
+		
+		Label lblNewLabel = new Label(composite_1, SWT.NONE);
+		lblNewLabel.setFont(SWTResourceManager.getFont("Calibri", 14, SWT.BOLD));
+		lblNewLabel.setBounds(10, 10, 484, 28);
+		lblNewLabel.setText("Best Deployment Schema obtained by Simulation:");
+		
+		simText = new Text(composite_1, SWT.BORDER | SWT.WRAP | SWT.MULTI);
+		simText.setBounds(10, 62, 1070, 507);
+
+		
+		this.apiInstance = apiInstance;
+        simText.setText("No simulation launched");
+        
+        Label lblProvider = new Label(group, SWT.NONE);
+        lblProvider.setToolTipText("This selects services from a specific provider");
+        lblProvider.setBounds(157, 10, 70, 20);
+        lblProvider.setText("Provider:");
+        
+        Combo comboProviders = new Combo(group, SWT.NONE);
+        comboProviders.setBounds(243, 10, 97, 28);
+        JacksonJsonProvider provider = new JacksonJsonProvider();
+		
+        List providers = new ArrayList();
+        providers.add(provider);
+        
+        api = JAXRSClientFactory.create("http://85.91.40.245:8087/acsmiservices", DefinitionResourceApi.class, providers);
+        List<Definition> items = api.getDefinitionsByAttributeUsingGET((long) 3);
+        
+        //String[] providersList = null;
+        String providersList[] = new String[items.size()];
+        for (int i = 0 ; i < items.size(); i++) {
+        	String name = items.get(i).getValue();
+	        providersList[i] = name;
+	    }
+        //String[] providersList = {"Amazon", "AIMES","ARSYS","AZURE" };
+		comboProviders.setItems(providersList);
+		
+		comboProviders.addSelectionListener(new SelectionListener() {
+
+			@Override
+			public void widgetDefaultSelected(SelectionEvent arg0) {
+				// TODO Auto-generated method stub
+				
+			}
+
+			@Override
+			public void widgetSelected(SelectionEvent arg0) {
+				// TODO Auto-generated method stub
+				appdescription.setPreferredProvider(comboProviders.getText());
+			}
+		});
+		
+		
+		//testing curl and vault
+		
+//		VaultTemplate vaultTemplate = new VaultTemplate(new VaultEndpoint(),new TokenAuthentication("s.ry9XFWOO7BLZK4XhW4W1m1eg"));
+//		VaultEndpoint endpoint = VaultEndpoint.create("http://85.91.40.245", 8200);
+//		
+//		VaultResponseSupport<Map<String, Object>> response = vaultTemplate.read("v1/secret/testuser/sockshop");
+
+//		 Process curlProc;
+//		 //String command="curl -X GET --header 'Accept: application/json' 'http://85.91.40.245:8087/acsmiservices/api/services/find?filter=%7B%22classid%22%3A2%2C%22attributes%22%3A%5B%5D%7D'";
+//		 //String command = "curl -H �X-Vault-Token: s.ry9XFWOO7BLZK4XhW4W1m1eg� -X GET http://85.91.40.245:8200/v1/secret/testuser/sockshop/s.ry9XFWOO7BLZK4XhW4W1m1eg";
+//		 String command = "curl -H 'X-Vault-Token: s.ry9XFWOO7BLZK4XhW4W1m1eg' -X GET http://85.91.40.245:8200/v1/secret/testuser/sockshop";		 
+//		 String outputString;
+//		 try {
+//			curlProc = Runtime.getRuntime().exec(command);
+//			DataInputStream curlIn = new DataInputStream(
+//	                curlProc.getInputStream());
+//			outputString = curlIn.readLine();
+//	        while (outputString != null) {
+//	            System.out.println(outputString);
+//	            outputString = curlIn.readLine();
+//	        }
+//		} catch (IOException e1) {
+//			// TODO Auto-generated catch block
+//			e1.printStackTrace();
+//		}
+//	
+		//end testing curl and vault
+		btnSimulate.addSelectionListener(new SelectionAdapter() {
+		public void widgetSelected(SelectionEvent event) {
+			
+
+			Simulation simL = new Simulation();
+			System.out.println("estoy en el folder: "+System.getProperty("user.dir"));
+					
+			System.out.println("estoy en el folder: "+ResourcesPlugin.getWorkspace().getRoot().getProject(appd.getName()).getLocation());
+			//how to obtain the git repository from which it has been cloned (D:\W\2017-Decide\DECIDE\test\aimestest\.git\config)
+			//simL.setAppurl(ResourcesPlugin.getWorkspace().getRoot().getProject(appd.getName()).getLocation().toString());
+			//simL.setAppurl("https://git.code.tecnalia.com/decide/SockShop_AppDescription.git");
+			
+			//simL.setAppurl("https://github.com/aimesdecide/optimus.git");
+			simL.setAppurl("https://git.code.tecnalia.com/j2018b/106819.git");
+			//simL.setAppurl("https://git.code.tecnalia.com/decide/SockShop_AppDescription.git");
+
+			JacksonJsonProvider provider = new JacksonJsonProvider();
+			
+	        List providers = new ArrayList();
+	        providers.add(provider);
+	        
+
+	      apiInstance = JAXRSClientFactory.create("http://localhost:8080/optimussimulation", DefaultApi.class, providers);
+	      //apiInstance = JAXRSClientFactory.create("http://localhost:11080/optimussimulation", DefaultApi.class, providers);
+	       //apiInstance = JAXRSClientFactory.create("http://85.91.40.245:8090/optimussimulation", DefaultApi.class, providers);
+	        
+	        org.apache.cxf.jaxrs.client.Client client = WebClient.client(apiInstance);
+	        
+	        ClientConfiguration config = WebClient.getConfig(client); 
+			//try {
+	        
+	        List<ReturnedSimulation> response = new ArrayList<ReturnedSimulation>();
+	        response = apiInstance.createsSimulationUsingPOST(simL);
+	        //ReturnedSimulation simToShow = new ReturnedSimulation();
+	        Integer id = response.get(0).getSimid();
+	       
+	        //simulationText.setText("This Simulation has been launched: \n"+id);
+	        simText.setText("This Simulation has been launched: \n"+id);
+	        
+	        
+	        
+	        String status = response.get(0).getStatus();
+	        while (status.equals("started")) {
+	        	//response = apiInstance.getSimulationUsingGET(id);
+	        	List<ReturnedSimulation> response2 = new ArrayList<ReturnedSimulation>();
+	        	
+	        	response2 = apiInstance.getSimulationUsingGET(id);
+	        	status = response2.get(0).getStatus();
+	        }
+	        //System.out.println("terminada la sim: "+id);
+	        //List<ReturnedSc> rsc = new ArrayList<ReturnedSc>();
+	        List<ReturnedSc> response2 = new ArrayList<ReturnedSc>();
+	        //response2.add(rsc);
+	        //JSONArray jsonArray = new JSONArray();
+        	response2 = apiInstance.getSchemaUsingGET(id);
+	        //response2 = apiInstance.getSchemaUsingGET(id);
+	        List<SchemaElement> schemas = new ArrayList<>();
+	        appdescription.setSchema(schemas);
+	        //at the moment i consider the best of all of them, the first one.
+	        //when integration--> increase index from 0 to 5.
+			for (ReturnedSc rs : response2) {
+				SchemaElement sc = new SchemaElement();
+				sc.setCsId(rs.getCsId());
+				sc.setIndex(rs.getIndex());
+				sc.setMicroservices(rs.getMicros());
+				schemas.add(sc);
+			}
+			
+			//store the schema (5 schemas later) into the history repo
+//			try {
+//				storeHistorySchemas(schemas,id);
+//			} catch (AppManagerException e1) {
+//				// TODO Auto-generated catch block
+//				e1.printStackTrace();
+//			} catch (IOException e1) {
+//				// TODO Auto-generated catch block
+//				e1.printStackTrace();
+//			}
+	       
+	       		appdescription.setSchema(schemas);
+		        //List<SchemaElement> schemas2 = new ArrayList<>();
+		        //schemas2 = appdescription.getSchema();
+		        String scText = "";
+		        if (!schemas.isEmpty())
+		        {
+		        scText = "The best Schema found for the simulation is:\n\n";
+		        for (SchemaElement se : schemas) {
+		    		scText = scText+"    The following microservices: \n"+se.getMicroservices().toString()+"\n\n    will be deployed in the following Cloud Service: "+se.getCsId()+"\n\n";
+		    		//TODO include the name of each microservice
+		    	}
+		        //simulationText.setText(scText);
+		        simText.setText(scText);
+		        }
+
+
+			//simulationText.setText("Simulation launched from btnSimulate.....");
+			addDisposeListener(new DisposeListener() {
+				public void widgetDisposed(DisposeEvent e) {
+				}
+			});
+			
+		}
+
+		private void storeHistorySchemas(List<SchemaElement> schemas, Integer id) throws AppManagerException, IOException {
+			AppManager manager = null;
+			//String localAppDesc = System.getProperty("java.io.tmpdir");
+			//localAppDesc = localAppDesc+"\\"+id;
+			IPath localAppDesc=ResourcesPlugin.getWorkspace().getRoot().getProject(appd.getName()).getLocation();
+			//localAppDesc = localAppDesc+"\\"+System.currentTimeMillis();
+			//this is the way to manage the variables (paths only) by java, obtaining tmp system folder - end
+			
+			//System.out.println("my applocalfolder is: "+Paths.get(localAppDesc));
+			try {
+				manager = AppManager.open(Paths.get(localAppDesc.toString()));
+
+			} catch (AppManagerException e) {
+				e.printStackTrace();
+			}
+			HistoryManager historyManager = manager.getHistoryManager();
+			ArrayList<HistoryEntry> history = new ArrayList(historyManager.getHistory());
+			//history = historyManager.getHistory();
+
+			
+			//List<SchemaElement> deployments = new ArrayList();
+			
+			//for (SchemaElement se : schemas) {
+			HistoryEntry he = new HistoryEntry();
+			DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
+			he.setDate(dateFormat.format(new Date()));
+			he.setSchema(schemas);
+			List<ObjectNode> slaB = new ArrayList<>();
+			he.setSlaBreaches(slaB);
+			history.add(he);
+
+			//}
+			historyManager.writeAndCommit(history, "updating History");
+//			
+//			//he.setSchema(deployments);
+//			history.add(he);
+//			//for now i write it but first i should ask the developer
+//			historyManager.write(history);
+			
+		}
+	});
+		scrolledComposite.setContent(group);
+		scrolledComposite.setMinSize(group.computeSize(SWT.DEFAULT, SWT.DEFAULT));
+		
+	}
+	@Override
+	public void open(AppDescription appd) {
+		// TODO Auto-generated method stub
+		this.appdescription = appd;
+		createSimulationGUI(appd);
+		
+	}
+
+	   private Properties loadProperties() {
+	        Properties props = new Properties();
+	        
+	        InputStream fis = null;
+	        try {
+	            fis = this.getClass().getClassLoader().getResourceAsStream("/optimus.server.properties");
+	            props.load(fis);
+	        }     catch (IOException e) {
+	            // TODO Auto-generated catch block
+	            e.printStackTrace();
+	        }
+	        
+	        return props;
+	  }
+}
diff --git a/ARCHITECT/architect/optimusclas/src/eu/DECIDEh2020/optimus/editors/SimulationPageBuilder.java b/ARCHITECT/architect/optimusclas/src/eu/DECIDEh2020/optimus/editors/SimulationPageBuilder.java
new file mode 100644
index 0000000000000000000000000000000000000000..370bb8ee06d7915e6f579999a5fabd684e076154
--- /dev/null
+++ b/ARCHITECT/architect/optimusclas/src/eu/DECIDEh2020/optimus/editors/SimulationPageBuilder.java
@@ -0,0 +1,43 @@
+/*********************************************************************
+* Copyright (c) 2018 Tecnalia.
+*
+* This program and the accompanying materials are made
+* available under the terms of the Eclipse Public License 2.0
+* which is available at https://www.eclipse.org/legal/epl-2.0/
+*
+* SPDX-License-Identifier: EPL-2.0
+* Contributors (in alphabetical order):
+* Alberto Molinuevo                         Tecnalia
+* Gorka Benguria                            Tecnalia
+* I�aki Etxaniz                             Tecnalia
+* Juncal Alonso                             Tecnalia
+* Leire Orue-Echevarria                     Tecnalia
+* Maria Jose Lopez                          Tecnalia
+* Marisa Escalante                          Tecnalia
+* Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+**********************************************************************/
+
+package eu.DECIDEh2020.optimus.editors;
+
+
+//import java.awt.Composite;
+import org.eclipse.swt.widgets.*;
+
+import eu.DECIDEh2020.appManager.models.AppDescription;
+import eu.DECIDEh2020.architect.plugin.editor.IPageBuilder;
+import eu.DECIDEh2020.architect.plugin.editor.Page;
+
+public class SimulationPageBuilder implements IPageBuilder {
+	/**
+	 * 
+	 */
+	public SimulationPageBuilder() {
+		super();
+		// TODO Auto-generated constructor stub
+	}
+	@Override
+	public  Page getPage(Composite parent, int style,AppDescription appdescription) {
+		return new SimulateSchema(parent, style, appdescription);
+	}
+
+}
diff --git a/ARCHITECT/architect/patterns/META-INF/MANIFEST.MF b/ARCHITECT/architect/patterns/META-INF/MANIFEST.MF
index 4282afc8c210a4181d02b5d9e7e612c57a680f1e..cb929683571898103e2382abe49e51bb92fcc206 100644
--- a/ARCHITECT/architect/patterns/META-INF/MANIFEST.MF
+++ b/ARCHITECT/architect/patterns/META-INF/MANIFEST.MF
@@ -2,10 +2,9 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: Patterns
 Bundle-SymbolicName: eu.DECIDEh2020.architect.patterns;singleton:=true
-Bundle-Version: 1.0.1
+Bundle-Version: 1.0.1.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Require-Bundle: eu.DECIDEh2020.architect.plugin;bundle-version="1.0.1",
- org.eclipse.swt,
+Require-Bundle: org.eclipse.swt,
  org.eclipse.ui;bundle-version="3.109.0",
  org.eclipse.ui.ide;bundle-version="3.13.1",
  org.eclipse.ui.views;bundle-version="3.9.0",
@@ -13,7 +12,8 @@ Require-Bundle: eu.DECIDEh2020.architect.plugin;bundle-version="1.0.1",
  org.apache.log4j,
  org.eclipse.core.runtime;bundle-version="3.13.0",
  org.eclipse.e4.core.di;bundle-version="1.6.100",
- org.eclipse.core.resources;bundle-version="3.12.0"
+ org.eclipse.core.resources;bundle-version="3.12.0",
+ eu.DECIDEh2020.architect.plugin,
+ org.eclipse.jface
 Automatic-Module-Name: eu.DECIDEh2020.architect.patterns
-Bundle-ClassPath: .
-
+Bundle-ClassPath: .
diff --git a/ARCHITECT/architect/patterns/plugins/eu.DECIDEh2020.architect.plugin_1.0.0.201812072049.jar b/ARCHITECT/architect/patterns/plugins/eu.DECIDEh2020.architect.plugin_1.0.0.201812072049.jar
new file mode 100644
index 0000000000000000000000000000000000000000..17056ee3221557ed93eaf93704db06a4240cd514
Binary files /dev/null and b/ARCHITECT/architect/patterns/plugins/eu.DECIDEh2020.architect.plugin_1.0.0.201812072049.jar differ
diff --git a/ARCHITECT/architect/patterns/pom.xml b/ARCHITECT/architect/patterns/pom.xml
index d9a24afa8461f85c70e7f640d373f868e6eabeb4..d26824a1c197865cf18eecdc9bf41eb10d97294d 100644
--- a/ARCHITECT/architect/patterns/pom.xml
+++ b/ARCHITECT/architect/patterns/pom.xml
@@ -8,7 +8,7 @@
 	<parent>
 		<groupId>eu.DECIDEh2020</groupId>
 		<artifactId>architect</artifactId>
-		<version>1.0.1</version>
+		<version>1.0.1-SNAPSHOT</version>
 		<relativePath>..</relativePath>
 	</parent>
 
diff --git a/ARCHITECT/architect/patterns/src/eu/DECIDEh2020/architect/patterns/composites/PatternContentProvider.java b/ARCHITECT/architect/patterns/src/eu/DECIDEh2020/architect/patterns/composites/PatternContentProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..d03c53303830a3e18f33b605499bfd364c7790e4
--- /dev/null
+++ b/ARCHITECT/architect/patterns/src/eu/DECIDEh2020/architect/patterns/composites/PatternContentProvider.java
@@ -0,0 +1,17 @@
+package eu.DECIDEh2020.architect.patterns.composites;
+
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+
+import eu.DECIDEh2020.appManager.models.Pattern;
+
+public class PatternContentProvider implements IStructuredContentProvider {
+	@SuppressWarnings("unchecked")
+	public Object[] getElements(Object inputElement) {
+		return ((java.util.List<Pattern>) inputElement).toArray();
+	}
+
+	public void dispose() {}
+
+	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {}
+}
diff --git a/ARCHITECT/architect/patterns/src/eu/DECIDEh2020/architect/patterns/composites/PatternDetailComposite.java b/ARCHITECT/architect/patterns/src/eu/DECIDEh2020/architect/patterns/composites/PatternDetailComposite.java
index 0862baa25f16590719a2bd5082c6d12449c60b38..26bed23a3e69639c731826dab95143b6182133b6 100644
--- a/ARCHITECT/architect/patterns/src/eu/DECIDEh2020/architect/patterns/composites/PatternDetailComposite.java
+++ b/ARCHITECT/architect/patterns/src/eu/DECIDEh2020/architect/patterns/composites/PatternDetailComposite.java
@@ -15,18 +15,15 @@ package eu.DECIDEh2020.architect.patterns.composites;
 
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.layout.GridLayout;
-
-
-
-
-import eu.DECIDEh2020.appManager.models.Pattern;
-import eu.DECIDEh2020.architect.plugin.utils.CloudPatternHelper;
-
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
 import org.eclipse.wb.swt.SWTResourceManager;
 
+import eu.DECIDEh2020.appManager.models.Pattern;
+import eu.DECIDEh2020.architect.plugin.utils.CloudPatternHelper;
+
+
 import com.fasterxml.jackson.databind.node.ObjectNode;
 
 import org.eclipse.swt.layout.GridData;
@@ -127,7 +124,7 @@ public class PatternDetailComposite extends Composite {
 			txtSolution.setText("");
 		}
 		
-		redraw();
+		//redraw();
 	}
 
 	@Override
diff --git a/ARCHITECT/architect/patterns/src/eu/DECIDEh2020/architect/patterns/composites/PatternFilter.java b/ARCHITECT/architect/patterns/src/eu/DECIDEh2020/architect/patterns/composites/PatternFilter.java
new file mode 100644
index 0000000000000000000000000000000000000000..2db3f065e030b2ab63526347b628cd31e78cb73f
--- /dev/null
+++ b/ARCHITECT/architect/patterns/src/eu/DECIDEh2020/architect/patterns/composites/PatternFilter.java
@@ -0,0 +1,47 @@
+package eu.DECIDEh2020.architect.patterns.composites;
+
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+
+import eu.DECIDEh2020.appManager.models.Pattern;
+
+public class PatternFilter extends ViewerFilter {
+
+	private String filterBasic = "http://decideh2020.eu/resources/patterncategories/basic";
+	private String filterDevelopment = "http://decideh2020.eu/resources/patterncategories/development";
+	private String filterDeployment = "http://decideh2020.eu/resources/patterncategories/deployment";
+	private String filterOptimization = "http://decideh2020.eu/resources/patterncategories/optimization";
+	private String filter;
+	
+	private Boolean show = true;
+
+	PatternFilter(String filter) {
+		switch(filter){
+        case "Basic":
+            this.filter = this.filterBasic;
+            break;
+        case "Development":
+        	this.filter = this.filterDevelopment;
+            break;
+        case "Deployment":
+        	this.filter = this.filterDeployment;
+            break;
+        case "Optimization":
+        	this.filter = this.filterOptimization;
+            break;
+        default: 
+        	break;
+        }
+	}
+	public void show(Boolean f) {
+		// ensure that the value can be used for matching
+		this.show = f;
+	}
+
+
+	@Override
+	public boolean select(Viewer viewer, Object parentElement, Object element) {
+		Pattern p = (Pattern) element;
+		return p.getCategories().contains(filter) ? show : !show;
+	}
+}
\ No newline at end of file
diff --git a/ARCHITECT/architect/patterns/src/eu/DECIDEh2020/architect/patterns/composites/PatternLabelProvider.java b/ARCHITECT/architect/patterns/src/eu/DECIDEh2020/architect/patterns/composites/PatternLabelProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..01ee630dae40bf330d3500aaeb51357577b74718
--- /dev/null
+++ b/ARCHITECT/architect/patterns/src/eu/DECIDEh2020/architect/patterns/composites/PatternLabelProvider.java
@@ -0,0 +1,16 @@
+package eu.DECIDEh2020.architect.patterns.composites;
+
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.swt.graphics.Image;
+
+import eu.DECIDEh2020.appManager.models.Pattern;
+
+public class PatternLabelProvider extends LabelProvider {
+	public Image getImage(Object element) {
+		return null;
+	}
+
+	public String getText(Object element) {
+		return ((Pattern) element).getTitle();
+	}
+}
diff --git a/ARCHITECT/architect/patterns/src/eu/DECIDEh2020/architect/patterns/composites/PatternPageComposite.java b/ARCHITECT/architect/patterns/src/eu/DECIDEh2020/architect/patterns/composites/PatternPageComposite.java
index dbee6e05753986ab4bd78cf0352e32b286613860..1deb4e76e596f8be1d0a531d75292cd776baa982 100644
--- a/ARCHITECT/architect/patterns/src/eu/DECIDEh2020/architect/patterns/composites/PatternPageComposite.java
+++ b/ARCHITECT/architect/patterns/src/eu/DECIDEh2020/architect/patterns/composites/PatternPageComposite.java
@@ -14,19 +14,12 @@
 package eu.DECIDEh2020.architect.patterns.composites;
 
 import java.util.ArrayList;
+import java.util.List;
 
-import org.eclipse.jface.viewers.CheckStateChangedEvent;
 import org.eclipse.jface.viewers.CheckboxTableViewer;
-import org.eclipse.jface.viewers.ICheckStateListener;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.viewers.ViewerFilter;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.CLabel;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.custom.ScrolledComposite;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
@@ -34,252 +27,247 @@ import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Table;
 import org.eclipse.wb.swt.SWTResourceManager;
 
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ObjectNode;
 
 import eu.DECIDEh2020.appManager.models.AppDescription;
-import eu.DECIDEh2020.appManager.models.Nfr;
-import eu.DECIDEh2020.appManager.models.Pattern;
-import eu.DECIDEh2020.architect.cloudpatterns.Patterns;
 import eu.DECIDEh2020.architect.plugin.editor.Page;
-import eu.DECIDEh2020.architect.plugin.utils.CloudPatternHelper;
 
 public class PatternPageComposite extends Page {
 
-	private java.util.List<Pattern> patterns;
-	private CheckboxTableViewer checkboxTableViewer_basic, checkboxTableViewer_good;
-	private PatternDetailComposite patternDetailComposite;
-	private Table table_basic, table_good;
-	private AppDescription appdescription;
-
-	public class PatternFilter extends ViewerFilter {
-
-		private String filter = "http://decideh2020.eu/resources/patterncategories/fundamental";
-		private Boolean show = true;
-
-		public void show(Boolean f) {
-			// ensure that the value can be used for matching
-			this.show = f;
-		}
-
-		
-		@Override
-		public boolean select(Viewer viewer, Object parentElement, Object element) {
-			Pattern p = (Pattern) element;
-			return p.getCategories().contains(filter) ? !show : show;
-		}
-	}
-
-	private static class PatternLabelProvider extends LabelProvider {
-		public Image getImage(Object element) {
-			return null;
-		}
-
-		public String getText(Object element) {
-			return ((Pattern) element).getTitle();
-		}
-	}
-
-	private static class PatternContentProvider implements IStructuredContentProvider {
-		@SuppressWarnings("unchecked")
-		public Object[] getElements(Object inputElement) {
-
-			return ((java.util.List<Pattern>) inputElement).toArray();
-
-		}
-
-		public void dispose() {
-		}
-
-		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-		}
-	}
-
+	
+	private PatternPageHelper patterPageHelper;
+	private List<CheckboxTableViewer> checkBoxListOpt, checkBoxListDev, checkBoxListDep, checkBoxListBas;
+	private Composite compositePatternGrid;
+	private ScrolledComposite scrolledComposite; 
+	
 	/**
 	 * Create the composite.
 	 * 
 	 * @param parent
 	 * @param style
 	 */
-	public PatternPageComposite(Composite parent, int style, AppDescription appdescription) {
-		super(parent, style, appdescription);
-		this.appdescription = appdescription;
-		patterns = new ArrayList<>();
+	
+	public PatternPageComposite(Composite parent, int style, AppDescription appDescription) {
+		super(parent, style, appDescription);
+		
+		patterPageHelper = new PatternPageHelper(appDescription);
+		
 		createGUI();
 
 	}
 
 	private void createGUI() {
-		setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
-		setLayout(new GridLayout(1, false));
+		
+		this.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+		this.setLayout(new GridLayout(1, false));
 
+		// title
 		CLabel lblDesignPatterns = new CLabel(this, SWT.NONE);
 		lblDesignPatterns.setFont(SWTResourceManager.getFont("Segoe UI", 12, SWT.BOLD));
 		lblDesignPatterns.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+		lblDesignPatterns.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false));
 		lblDesignPatterns.setText("Design Patterns");
 
+		//underline
 		Label label = new Label(this, SWT.SEPARATOR | SWT.HORIZONTAL);
 		label.setFont(SWTResourceManager.getFont("Segoe UI", 12, SWT.BOLD));
-		label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-
-		Composite composite_1 = new Composite(this, SWT.NONE);
-		composite_1.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
-		composite_1.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
-		GridLayout gl_composite_1 = new GridLayout(2, true);
-		gl_composite_1.horizontalSpacing = 25;
-		composite_1.setLayout(gl_composite_1);
-
-		Label lblSuggestedPatterns = new Label(composite_1, SWT.NONE);
-		lblSuggestedPatterns.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-		lblSuggestedPatterns.setBackground(SWTResourceManager.getColor(SWT.COLOR_WIDGET_LIGHT_SHADOW));
-		lblSuggestedPatterns.setFont(SWTResourceManager.getFont("Segoe UI", 9, SWT.BOLD));
-		lblSuggestedPatterns.setText("Suggested Patterns");
-
-		Label lblPatternDetail = new Label(composite_1, SWT.NONE);
-		lblPatternDetail.setBackground(SWTResourceManager.getColor(SWT.COLOR_WIDGET_LIGHT_SHADOW));
-		lblPatternDetail.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
+
+		// container composite for suggested pattern grid and pattern detail 
+		Composite parentComposite = new Composite(this, SWT.NONE);
+		parentComposite.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+		parentComposite.setLayout(new GridLayout(2, false));
+		parentComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+		// Suggested Patterns label
+		Composite suggestedPatternsLabelComposite = new Composite(parentComposite, SWT.NONE);
+		suggestedPatternsLabelComposite.setLayout(new GridLayout());
+		suggestedPatternsLabelComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+		suggestedPatternsLabelComposite.setBackground(SWTResourceManager.getColor(230, 230, 230));
+
+		Label suggestedPatternsLabel = new Label(suggestedPatternsLabelComposite, SWT.NONE);
+		suggestedPatternsLabel.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, true));
+		suggestedPatternsLabel.setFont(SWTResourceManager.getFont("Segoe UI", 9, SWT.BOLD));
+		suggestedPatternsLabel.setBackground(SWTResourceManager.getColor(230, 230, 230));
+		suggestedPatternsLabel.setText("Suggested Patterns");
+		
+		// Pattern Detail Label
+		Composite patternDetailLabelComposite = new Composite(parentComposite, SWT.NONE);
+		patternDetailLabelComposite.setLayout(new GridLayout());
+		patternDetailLabelComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+		patternDetailLabelComposite.setBackground(SWTResourceManager.getColor(230, 230, 230));
+		
+		Label lblPatternDetail = new Label(patternDetailLabelComposite, SWT.NONE);
+		lblPatternDetail.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, false));
 		lblPatternDetail.setFont(SWTResourceManager.getFont("Segoe UI", 9, SWT.BOLD));
-		lblPatternDetail.setText("Pattern detail");
-
-		Composite composite_2 = new Composite(composite_1, SWT.NONE);
-		composite_2.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
-		composite_2.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
-		composite_2.setLayout(new GridLayout(1, false));
-
-		checkboxTableViewer_good = CheckboxTableViewer.newCheckList(composite_2, SWT.BORDER | SWT.FULL_SELECTION);
-		table_good = checkboxTableViewer_good.getTable();
-
-		table_good.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
-		checkboxTableViewer_good.setLabelProvider(new PatternLabelProvider());
-		checkboxTableViewer_good.setContentProvider(new PatternContentProvider());
-		checkboxTableViewer_good.setInput(patterns);
-		PatternFilter noFundamentals = new PatternFilter();
-		noFundamentals.show(true);
-		checkboxTableViewer_good.setFilters(noFundamentals);
-
-		Label lblbadPatterns = new Label(composite_2, SWT.NONE);
-		lblbadPatterns.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-		lblbadPatterns.setText("Basic Patterns");
-		lblbadPatterns.setFont(SWTResourceManager.getFont("Segoe UI", 9, SWT.BOLD));
-		lblbadPatterns.setBackground(SWTResourceManager.getColor(SWT.COLOR_WIDGET_LIGHT_SHADOW));
-
-		checkboxTableViewer_basic = CheckboxTableViewer.newCheckList(composite_2, SWT.BORDER | SWT.FULL_SELECTION);
-		checkboxTableViewer_basic.addCheckStateListener(new ICheckStateListener() {
-			public void checkStateChanged(CheckStateChangedEvent event) {
-				Pattern pattern = (Pattern) event.getElement();
-				pattern.setSelected(event.getChecked());
-			}
-		});
-		checkboxTableViewer_basic.setAllGrayed(true);
-		PatternFilter fundamentals = new PatternFilter();
-		fundamentals.show(false);
-		checkboxTableViewer_basic.setFilters(fundamentals);
-
-		table_basic = checkboxTableViewer_basic.getTable();
-
-		table_basic.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
-		checkboxTableViewer_basic.setLabelProvider(new PatternLabelProvider());
-		checkboxTableViewer_basic.setContentProvider(new PatternContentProvider());
-		checkboxTableViewer_basic.setInput(patterns);
-
-		patternDetailComposite = new PatternDetailComposite(composite_1, SWT.NONE);
-		patternDetailComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
-
-		checkboxTableViewer_good.addCheckStateListener(new ICheckStateListener() {
-			public void checkStateChanged(CheckStateChangedEvent event) {
-				Pattern pattern = (Pattern) event.getElement();
-				pattern.setSelected(event.getChecked());
-			}
-		});
-
-		table_basic.addSelectionListener(new SelectionAdapter() {
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-				int i = table_basic.getSelectionIndex();
-				if (i >= 0) {
-					Pattern pattern = (Pattern) checkboxTableViewer_basic.getElementAt(i);
-					patternDetailComposite.updatePattern(pattern);
+		lblPatternDetail.setText("Pattern Detail");
+		
+		// Pattern Grid
+		scrolledComposite = new ScrolledComposite(parentComposite, SWT.V_SCROLL);
+		scrolledComposite.setExpandHorizontal(true);
+		scrolledComposite.setExpandVertical(true);
+		scrolledComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, true));
+		
+		compositePatternGrid = new Composite(scrolledComposite, SWT.NONE);
+		scrolledComposite.setContent(compositePatternGrid);
+		
+		GridLayout compositeLayout = new GridLayout(1, false);
+		compositeLayout.horizontalSpacing = 5;
+		compositeLayout.verticalSpacing = 0;
+		compositeLayout.marginHeight = 0;
+		compositeLayout.marginWidth = 0;
+		compositePatternGrid.setLayout(compositeLayout);
+		compositePatternGrid.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+		
+		// Pattern Detail
+		PatternDetailComposite patternDetailComposite = new PatternDetailComposite(parentComposite, SWT.NONE);
+		patternDetailComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+		// Check Boxes in Pattern Grid
+		checkBoxListBas = new ArrayList<CheckboxTableViewer>();
+		createRow(compositePatternGrid, patternDetailComposite, "Basic", checkBoxListBas);
+		patterPageHelper.addBasicPatterns();
+		
+		checkBoxListDev = new ArrayList<CheckboxTableViewer>();
+		createRow(compositePatternGrid, patternDetailComposite, "Development", checkBoxListDev);
 
-				}
-			}
-		});
-		table_good.addSelectionListener(new SelectionAdapter() {
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-				int i = table_good.getSelectionIndex();
-				if (i >= 0) {
-					Pattern pattern = (Pattern) checkboxTableViewer_good.getElementAt(i);
-					patternDetailComposite.updatePattern(pattern);
+		checkBoxListDep = new ArrayList<CheckboxTableViewer>();
+		createRow(compositePatternGrid, patternDetailComposite, "Deployment", checkBoxListDep);
 
-				}
-			}
-		});
-		if (table_good.getItemCount() > 0) {
-			table_good.select(0);
-			patternDetailComposite.updatePattern((Pattern) checkboxTableViewer_good.getElementAt(0));
-		}
+		checkBoxListOpt = new ArrayList<CheckboxTableViewer>();
+		createRow(compositePatternGrid, patternDetailComposite, "Optimization", checkBoxListOpt);
 
-		recomputeNFRs();
+		// adjust scrolled composite to size
+		scrolledComposite.setMinSize(compositePatternGrid.computeSize(SWT.DEFAULT, SWT.DEFAULT));
 	}
-
-	void recomputeNFRs() {
-
-		updatePatterns(appdescription.getNfrs());
+	
+	void createRow(Composite parent, PatternDetailComposite patternDetailComposite, String patternLabel, List<CheckboxTableViewer> checkBoxList) {
+		Composite row = new Composite(parent, SWT.NONE);
+		GridLayout rowLayout = new GridLayout(3, false);
+		rowLayout.horizontalSpacing = 0;
+		rowLayout.verticalSpacing = 0;
+		rowLayout.marginHeight = 0;
+		rowLayout.marginWidth = 0;
+		rowLayout.marginBottom = 5;
+		
+		row.setLayout(rowLayout);
+		row.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+		row.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+		
+		Composite labelComposite = new Composite(row, SWT.NONE);
+		GridLayout labelLayout = new GridLayout(1, false);
+		labelLayout.horizontalSpacing = 0;
+		labelLayout.verticalSpacing = 0;
+		labelLayout.marginHeight = 0;
+		labelLayout.marginWidth = 5;
+		
+		labelComposite.setLayout(labelLayout);
+		labelComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		labelComposite.setBackground(SWTResourceManager.getColor(235, 235, 235));
+		
+		Label label = new Label(labelComposite, SWT.NONE);
+		label.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, true));
+		label.setBackground(SWTResourceManager.getColor(235, 235, 235));
+		label.setFont(SWTResourceManager.getFont("Segoe UI", 9, SWT.BOLD));
+		label.setText(patternLabel);
+		
+		createCheckBoxField(row, /*"Mandatory", */patternLabel, patternDetailComposite, checkBoxList);
+		/*if(patternLabel != "Basic") {
+			createCheckBoxField(row, "Optional", patternLabel, patternDetailComposite, checkBoxList);
+		}*/
+		
 	}
-
-	public void updatePatterns(java.util.List<Nfr> nfrs) {
-		patterns = CloudPatternHelper.inferPatterns(nfrs);
-		Patterns pat = Patterns.createDefaultPatterns();
-		java.util.List<ObjectNode> funds = pat.getPatternsByCategory("fundamental");
-		ObjectMapper mapper = new ObjectMapper();
-
-		for (ObjectNode objectNode : funds) {
-			try {
-				Pattern p = mapper.treeToValue(objectNode, Pattern.class);
-				patterns.add(p);
-			} catch (JsonProcessingException e) {
-				// TODO Auto-generated catch block
-				e.printStackTrace();
+	
+	void createCheckBoxField(Composite parent, /*String label, */String patternLabel, PatternDetailComposite patternDetailComposite, List<CheckboxTableViewer> checkBoxList) {
+		Composite checkBoxCompositeMandatory = new Composite(parent, SWT.NONE);
+		
+		GridLayout layout = new GridLayout();
+		layout.horizontalSpacing = 0;
+		layout.verticalSpacing = 0;
+		layout.marginHeight = 0;
+		layout.marginWidth = 0;
+		layout.marginLeft = 5;
+		layout.marginRight = 5;
+		
+		checkBoxCompositeMandatory.setLayout(layout);
+		checkBoxCompositeMandatory.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		checkBoxCompositeMandatory.setBackground(SWTResourceManager.getColor(255, 255, 255));
+		
+		/*Composite labelCompositeMandatory = new Composite(checkBoxCompositeMandatory, SWT.NONE);
+		GridLayout labelLayout = new GridLayout();
+		labelLayout.horizontalSpacing = 0;
+		labelLayout.verticalSpacing = 0;
+		labelLayout.marginHeight = 5;
+		labelLayout.marginWidth = 5;
+		
+		labelCompositeMandatory.setLayout(labelLayout);
+		labelCompositeMandatory.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+		labelCompositeMandatory.setBackground(SWTResourceManager.getColor(235, 235, 235));
+		
+		Label labelMandatory = new Label(labelCompositeMandatory, SWT.NONE);
+		labelMandatory.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, true));
+		labelMandatory.setFont(SWTResourceManager.getFont("Segoe UI", 9, SWT.BOLD));
+		labelMandatory.setText(label);*/
+		
+		CheckboxTableViewer checkBoxCompositeViewer = CheckboxTableViewer.newCheckList(checkBoxCompositeMandatory, SWT.FULL_SELECTION | SWT.BORDER);
+		checkBoxList.add(checkBoxCompositeViewer);
+		Table tableMandatory = checkBoxCompositeViewer.getTable();
+		
+		tableMandatory.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		checkBoxCompositeViewer.setLabelProvider(new PatternLabelProvider());
+		checkBoxCompositeViewer.setContentProvider(new PatternContentProvider());
+		
+		PatternFilter patternFilter = new PatternFilter(patternLabel);
+		patternFilter.show(true);
+		checkBoxCompositeViewer.setFilters(patternFilter);
+		
+		//if(patternLabel == "Basic") {
+			checkBoxCompositeViewer.setInput(patterPageHelper.patternList());
+		/*} else {
+			if(label == "Mandatory") {
+				checkBoxCompositeViewer.setInput(patterPageHelper.mandatoryPatternList());
 			}
-		}
-
-		checkboxTableViewer_good.setInput(patterns);
-		checkboxTableViewer_basic.setInput(patterns);
-
-		for (Pattern pattern : patterns) {
-			Boolean selected = false;
-			for (Pattern p : appdescription.getRecommendedPatterns()) {
-				if (pattern.getTitle().equals(p.getTitle())) {
-					selected = Boolean.logicalOr(selected, p.isSelected());
-				}
+			else if(label == "Optional") {
+				checkBoxCompositeViewer.setInput(patterPageHelper.optionalPatternList());
 			}
-			pattern.setSelected(selected);
-		}
-
-		for (Pattern pattern : patterns) {
-			checkboxTableViewer_basic.setChecked(pattern, pattern.isSelected());
-			checkboxTableViewer_good.setChecked(pattern, pattern.isSelected());
-		}
-
-		appdescription.setRecommendedPatterns(patterns);
-		if (table_good.getItemCount() > 0) {
-			table_good.select(0);
-			patternDetailComposite.updatePattern((Pattern) checkboxTableViewer_good.getElementAt(0));
-		} else {
-			patternDetailComposite.updatePattern(null);
-		}
+		}*/
+		
+		patterPageHelper.createCheckStateListener(checkBoxCompositeViewer);
+		
+		patterPageHelper.initialSelection(checkBoxCompositeViewer);
+		
+		patterPageHelper.selectionListenerPatternDetail(patternDetailComposite, checkBoxCompositeViewer);
 	}
-
-	@Override
-	protected void checkSubclass() {
-		// Disable the check that prevents subclassing of SWT components
+	
+	void updatePatterns(AppDescription appDescription) {
+		// update patterns that were added in another tab
+		patterPageHelper.updateAppDescription(appDescription);
+		
+		// update checkboxes with new added patterns
+		checkBoxListDev.get(0).setInput(patterPageHelper.patternList());
+		patterPageHelper.initialSelection(checkBoxListDev.get(0));
+		checkBoxListDep.get(0).setInput(patterPageHelper.patternList());
+		patterPageHelper.initialSelection(checkBoxListDep.get(0));
+		checkBoxListOpt.get(0).setInput(patterPageHelper.patternList());
+		patterPageHelper.initialSelection(checkBoxListOpt.get(0));
+		checkBoxListBas.get(0).setInput(patterPageHelper.patternList());
+		patterPageHelper.initialSelection(checkBoxListBas.get(0));
+		/*checkBoxListDev.get(1).setInput(patterPageHelper.optionalPatternList());
+		patterPageHelper.initialSelection(checkBoxListDev.get(1));
+		checkBoxListDep.get(1).setInput(patterPageHelper.optionalPatternList());
+		patterPageHelper.initialSelection(checkBoxListDep.get(1));
+		checkBoxListOpt.get(1).setInput(patterPageHelper.optionalPatternList());
+		patterPageHelper.initialSelection(checkBoxListOpt.get(1));*/
+		
+		//adjust size of check boxes when filled with new patterns
+		compositePatternGrid.layout(true, true);
+		compositePatternGrid.getParent().getParent().getParent().layout(true, true);
+		scrolledComposite.setMinSize(compositePatternGrid.computeSize(SWT.DEFAULT, SWT.DEFAULT));
 	}
-
+	
 	@Override
-	public void open(AppDescription appdescription) {
-		this.appdescription = appdescription;
-		recomputeNFRs();
+	public void open(AppDescription appDescription) {
+		// when tab is opened update check boxes
+		updatePatterns(appDescription);
 	}
 
-}
+}
diff --git a/ARCHITECT/architect/patterns/src/eu/DECIDEh2020/architect/patterns/composites/PatternPageHelper.java b/ARCHITECT/architect/patterns/src/eu/DECIDEh2020/architect/patterns/composites/PatternPageHelper.java
new file mode 100644
index 0000000000000000000000000000000000000000..0e61ea8d1deda2044b2de86a82227dcbc9616772
--- /dev/null
+++ b/ARCHITECT/architect/patterns/src/eu/DECIDEh2020/architect/patterns/composites/PatternPageHelper.java
@@ -0,0 +1,119 @@
+package eu.DECIDEh2020.architect.patterns.composites;
+
+import java.util.List;
+
+import org.eclipse.jface.viewers.CheckStateChangedEvent;
+import org.eclipse.jface.viewers.CheckboxTableViewer;
+import org.eclipse.jface.viewers.ICheckStateListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
+import eu.DECIDEh2020.appManager.models.AppDescription;
+import eu.DECIDEh2020.appManager.models.Pattern;
+import eu.DECIDEh2020.architect.cloudpatterns.Patterns;
+
+public class PatternPageHelper {
+	
+	private List<Pattern> patterns;
+	private AppDescription appDescription;
+	
+	PatternPageHelper(AppDescription appDescription) {
+		this.appDescription = appDescription;
+		this.patterns = this.appDescription.getRecommendedPatterns();
+	}
+	
+	public void updateAppDescription(AppDescription appDescription) {
+		this.appDescription = appDescription;
+		this.patterns = this.appDescription.getRecommendedPatterns();
+		
+		int basic = 0;
+		for(Pattern p: this.patterns) {
+			for(String s: p.getCategories()) {
+				if(s.contains("basic") == true) {
+					basic = 1;
+				}
+			}
+		}
+		
+		if(basic == 0) {
+			this.addBasicPatterns();
+		}
+	}
+	
+	public List<Pattern> patternList() {
+		return this.patterns;
+	}
+
+	public void addBasicPatterns() {
+		Patterns allPatterns = Patterns.createDefaultPatterns();
+		
+		// get all basic patterns and add them to the inferred patterns in "patterns"
+		List<ObjectNode> basicPatterns = allPatterns.getPatternsByCategory("basic");
+		
+		ObjectMapper mapper = new ObjectMapper();
+
+		for (ObjectNode objectNode : basicPatterns) {
+			try {
+				Pattern p = mapper.treeToValue(objectNode, Pattern.class);
+				this.patterns.add(p);
+			} catch (JsonProcessingException e) {
+				e.printStackTrace();
+			}
+		}
+		//return this.patterns;
+	}
+	
+	public void initialSelection(CheckboxTableViewer checkBox) {
+		
+		// all patterns are unselected
+		for (Pattern pattern : this.patterns) {
+			checkBox.setChecked(pattern, pattern.isSelected());			
+		}
+		
+		// preselctes all selected patterns in AppDescription
+		for (Pattern pattern : this.patterns) {
+			Boolean selected = false;
+			for (Pattern p : this.appDescription.getRecommendedPatterns()) {
+				if (pattern.getTitle().equals(p.getTitle())) {
+					selected = Boolean.logicalOr(selected, p.isSelected());
+				}
+			}
+			
+			pattern.setSelected(selected);
+		}
+	}
+	
+	public void createCheckStateListener(CheckboxTableViewer checkBox) {
+		
+		checkBox.addCheckStateListener(new ICheckStateListener() {
+			public void checkStateChanged(CheckStateChangedEvent event) {
+				((Pattern) event.getElement()).setSelected(event.getChecked());
+			}
+		});
+	}
+
+	public void selectionListenerPatternDetail(PatternDetailComposite patternDetailComposite, CheckboxTableViewer checkBox) {
+		
+		// checks selection of pattern to display pattern detail in pattern detail composite
+		checkBox.getTable().addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				int i = checkBox.getTable().getSelectionIndex();
+				if (i >= 0) {
+					Pattern pattern = (Pattern) checkBox.getElementAt(i);
+					patternDetailComposite.updatePattern(pattern);
+				}
+			}
+		});
+		
+		// initial selection is first pattern in box which is displayed in pattern detail composite
+		if (checkBox.getTable().getItemCount() > 0) {
+			checkBox.getTable().select(0);
+			patternDetailComposite.updatePattern((Pattern) checkBox.getElementAt(0));
+		}
+	}
+}
diff --git a/ARCHITECT/architect/pom.xml b/ARCHITECT/architect/pom.xml
index 648b185e5fd3e19046e348984db9289b7ad3a8a8..e6ae01f57264fea0ac2e23c65d9572e52e1c72fb 100644
--- a/ARCHITECT/architect/pom.xml
+++ b/ARCHITECT/architect/pom.xml
@@ -1,69 +1,68 @@
-<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>eu.DECIDEh2020</groupId>
-	<artifactId>architect</artifactId>
-	<version>1.0.1</version>
-	<packaging>pom</packaging>
-
-	<properties>
-		<tycho.version>1.2.0</tycho.version>
-		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-	</properties>
-
-	<repositories>
-		<repository>
-			<id>2018-09</id>
-			<layout>p2</layout>
-			<url>http://download.eclipse.org/releases/2018-09/</url>
-		</repository>
-	</repositories>
-
-	<build>
-		<plugins>
-			<plugin>
-				<groupId>org.eclipse.tycho</groupId>
-				<artifactId>tycho-maven-plugin</artifactId>
-				<version>${tycho.version}</version>
-				<extensions>true</extensions>
-			</plugin>
-			<plugin>
-				<groupId>org.eclipse.tycho</groupId>
-				<artifactId>target-platform-configuration</artifactId>
-				<version>${tycho.version}</version>
-				<configuration>
-					<environments>
-						<environment>
-							<os>win32</os>
-							<ws>win32</ws>
-							<arch>x86</arch>
-						</environment>
-						<environment>
-							<os>win32</os>
-							<ws>win32</ws>
-							<arch>x86_64</arch>
-						</environment>
-					</environments>
-				</configuration>
-			</plugin>
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-release-plugin</artifactId>
-				<version>2.5.3</version>
-				<configuration>
-					<tagNameFormat>v@{project.version}</tagNameFormat>
-				</configuration>
-			</plugin>
-		</plugins>
-	</build>
-
-	<modules>
-		<module>patterns</module>
-		<module>editor</module>
-		<module>feature</module>
-		<module>site</module>
-	</modules>
-
-</project>
-
+<?xml version="1.0" encoding="UTF-8"?>
+<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>eu.DECIDEh2020</groupId>
+	<artifactId>architect</artifactId>
+	<version>1.0.1-SNAPSHOT</version>
+	<packaging>pom</packaging>
+
+	<properties>
+		<tycho.version>1.2.0</tycho.version>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+	</properties>
+
+	<repositories>
+		<repository>
+			<id>2018-09</id>
+			<layout>p2</layout>
+			<url>http://download.eclipse.org/releases/2018-09/</url>
+		</repository>
+	</repositories>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.eclipse.tycho</groupId>
+				<artifactId>tycho-maven-plugin</artifactId>
+				<version>${tycho.version}</version>
+				<extensions>true</extensions>
+			</plugin>
+			<plugin>
+				<groupId>org.eclipse.tycho</groupId>
+				<artifactId>target-platform-configuration</artifactId>
+				<version>${tycho.version}</version>
+				<configuration>
+					<environments>
+						<environment>
+							<os>win32</os>
+							<ws>win32</ws>
+							<arch>x86</arch>
+						</environment>
+						<environment>
+							<os>win32</os>
+							<ws>win32</ws>
+							<arch>x86_64</arch>
+						</environment>
+					</environments>
+				</configuration>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-release-plugin</artifactId>
+				<version>2.5.3</version>
+				<configuration>
+					<tagNameFormat>v@{project.version}</tagNameFormat>
+				</configuration>
+			</plugin>
+		</plugins>
+	</build>
+
+	<modules>
+		<module>patterns</module>
+		<module>editor</module>
+		<module>feature</module>
+		<module>site</module>
+    <module>optimusclas</module>
+  </modules>
+
+</project>
\ No newline at end of file
diff --git a/ARCHITECT/architect/site/category.xml b/ARCHITECT/architect/site/category.xml
index d05e68a5c60ac2f5426636b2937014a054ba76dc..3a4acb8ad0989ced325bee9208baca2a9a8b00da 100644
--- a/ARCHITECT/architect/site/category.xml
+++ b/ARCHITECT/architect/site/category.xml
@@ -1,7 +1,13 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <site>
-   <feature url="features/eu.DECIDEh2020.architect.feature_1.0.1.jar" id="eu.DECIDEh2020.architect.feature" version="1.0.1">
+   <feature url="features/eu.DECIDEh2020.architect.feature_1.0.1.qualifier.jar" id="eu.DECIDEh2020.architect.feature" version="1.0.1.qualifier">
       <category name="DECIDE"/>
    </feature>
+   <bundle id="eu.DECIDEh2020.architect.patterns" version="1.0.1.qualifier">
+      <category name="DECIDE"/>
+   </bundle>
+   <bundle id="eu.DECIDEh2020.architect.plugin" version="1.0.1.qualifier">
+      <category name="DECIDE"/>
+   </bundle>
    <category-def name="DECIDE" label="DECIDE"/>
 </site>
diff --git a/ARCHITECT/architect/site/pom.xml b/ARCHITECT/architect/site/pom.xml
index e6dfcee11b582c2f76490ca90f5ce35bf73a6bf7..2e5c1408fd2601b47658f7efb1c99a8ccc0aec06 100644
--- a/ARCHITECT/architect/site/pom.xml
+++ b/ARCHITECT/architect/site/pom.xml
@@ -8,7 +8,7 @@
 	<parent>
 		<groupId>eu.DECIDEh2020</groupId>
 		<artifactId>architect</artifactId>
-		<version>1.0.1</version>
+		<version>1.0.1-SNAPSHOT</version>
 		<relativePath>..</relativePath>
 	</parent>
 
diff --git a/ARCHITECT/cloud-patterns-compendium/.gitignore b/ARCHITECT/cloud-patterns-compendium/.gitignore
index f10defac90f7f6acb30aa78adf87aba6b6b2fc87..adf91ce2a3f283b9dff11c1da3c1f4a502e669c1 100644
--- a/ARCHITECT/cloud-patterns-compendium/.gitignore
+++ b/ARCHITECT/cloud-patterns-compendium/.gitignore
@@ -77,4 +77,5 @@ fabric.properties
 .project
 
 #vertx stuff
-.vertx/
\ No newline at end of file
+.vertx/
+src/main/generated/
\ No newline at end of file
diff --git a/ARCHITECT/cloud-patterns-compendium/.gitlab-ci.yml b/ARCHITECT/cloud-patterns-compendium/.gitlab-ci.yml
index fc1da9c0c3c7a6d48d8cb6bac16b546485c71384..720b1e6c59764337786370d7eda9c10b8e9a644a 100644
--- a/ARCHITECT/cloud-patterns-compendium/.gitlab-ci.yml
+++ b/ARCHITECT/cloud-patterns-compendium/.gitlab-ci.yml
@@ -1,18 +1,25 @@
-stages:
-  - build
-  - deploy
+variables:
+  # This will suppress any download for dependencies and plugins or upload messages which would clutter the console log.
+  # `showDateTime` will show the passed time in milliseconds. You need to specify `--batch-mode` to make this work.
+  MAVEN_OPTS: "-Dhttps.protocols=TLSv1.2 -Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true"
+  # As of Maven 3.3.0 instead of this you may define these options in `.mvn/maven.config` so the same config is used
+  # when running from the command line.
+  # `installAtEnd` and `deployAtEnd` are only effective with recent version of the corresponding plugins.
+  MAVEN_CLI_OPTS: "--batch-mode --errors --fail-at-end --show-version"
 
 cache:
   paths:
     - .m2/repository
 
+stages:
+  - build
+  - deploy
+
 build:
   stage: build
-  tags:
-    - docker
   image: maven:3.3.9-jdk-8
   script:
-    - "mvn clean package -B"
+    - "mvn $MAVEN_CLI_OPTS clean package"
   only:
     - master
   artifacts:
@@ -22,7 +29,7 @@ build:
 register:
   stage: deploy
   tags:
-    - docker
+    - dind
   image: docker:latest
   variables:
     DOCKER_DRIVER: overlay2
diff --git a/ARCHITECT/cloud-patterns-compendium/pom.xml b/ARCHITECT/cloud-patterns-compendium/pom.xml
index 9fc076d29394d00381dc975224e6c19c4154efc2..f8fec68ae89f5ac795d683eed74508babe87423c 100644
--- a/ARCHITECT/cloud-patterns-compendium/pom.xml
+++ b/ARCHITECT/cloud-patterns-compendium/pom.xml
@@ -6,14 +6,27 @@
 
     <groupId>eu.DECIDEh2020</groupId>
     <artifactId>cloudpatternscompendium</artifactId>
-    <version>1.1.1-SNAPSHOT</version>
+    <version>2.0.1-SNAPSHOT</version>
 
     <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <vertx.version>3.5.4</vertx.version>
-        <verticle.name>eu.DECIDEh2020.architect.cloudpatterns.compendium.Server</verticle.name>
+        <maven.build.timestamp.format>yyyy-MM-dd HH:mm</maven.build.timestamp.format>
+        <buildTimestamp>${maven.build.timestamp}</buildTimestamp>
+        <vertx.version>3.7.1</vertx.version>
+        <verticle.name>eu.DECIDEh2020.architect.cloudpatterns.compendium.MainVerticle</verticle.name>
     </properties>
 
+    <distributionManagement>
+        <repository>
+            <id>paca</id>
+            <url>https://paca.okd.fokus.fraunhofer.de/repository/maven-releases/</url>
+        </repository>
+        <snapshotRepository>
+            <id>paca</id>
+            <url>https://paca.okd.fokus.fraunhofer.de/repository/maven-snapshots/</url>
+        </snapshotRepository>
+    </distributionManagement>
+
     <dependencyManagement>
         <dependencies>
             <dependency>
@@ -27,12 +40,6 @@
     </dependencyManagement>
 
     <dependencies>
-        <dependency>
-            <groupId>org.testng</groupId>
-            <artifactId>testng</artifactId>
-            <version>6.14.3</version>
-            <scope>test</scope>
-        </dependency>
         <dependency>
             <groupId>ch.qos.logback</groupId>
             <artifactId>logback-classic</artifactId>
@@ -44,7 +51,11 @@
         </dependency>
         <dependency>
             <groupId>io.vertx</groupId>
-            <artifactId>vertx-web</artifactId>
+            <artifactId>vertx-config</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>io.vertx</groupId>
+            <artifactId>vertx-web-api-contract</artifactId>
         </dependency>
         <dependency>
             <groupId>io.vertx</groupId>
@@ -66,79 +77,100 @@
             <groupId>io.vertx</groupId>
             <artifactId>vertx-codegen</artifactId>
         </dependency>
+        <dependency>
+            <groupId>eu.DECIDEh2020</groupId>
+            <artifactId>app-controller</artifactId>
+            <version>0.0.16</version>
+        </dependency>
         <dependency>
             <groupId>eu.DECIDEh2020</groupId>
             <artifactId>cloudpatterns</artifactId>
-            <version>1.2.1-SNAPSHOT</version>
+            <version>2.0.1</version>
         </dependency>
     </dependencies>
     <build>
-      <plugins>
-    	<plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-release-plugin</artifactId>
-          <version>2.5.3</version>
-          <configuration>
-            <tagNameFormat>v@{project.version}</tagNameFormat>
-          </configuration>
-        </plugin>
-        <plugin>
-          <artifactId>maven-compiler-plugin</artifactId>
-          <version>3.7.0</version>
-          <configuration>
-            <source>1.8</source>
-            <target>1.8</target>
-            <encoding>${project.build.sourceEncoding}</encoding>
-            <useIncrementalCompilation>false</useIncrementalCompilation>
-            <annotationProcessors>
-              <annotationProcessor>io.vertx.codegen.CodeGenProcessor</annotationProcessor>
-            </annotationProcessors>
-            <generatedSourcesDirectory>${project.basedir}/src/main/generated</generatedSourcesDirectory>
-            <compilerArgs>
-              <arg>-Acodegen.output=${project.basedir}/src/main</arg>
-            </compilerArgs>
-          </configuration>
-        </plugin>
-        <plugin>
-          <artifactId>maven-clean-plugin</artifactId>
-          <version>3.1.0</version>
-          <configuration>
-            <filesets>
-              <fileset>
-                <directory>${project.basedir}/src/main/generated</directory>
-              </fileset>
-            </filesets>
-          </configuration>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-shade-plugin</artifactId>
-          <version>3.1.1</version>
-          <executions>
-            <execution>
-              <phase>package</phase>
-              <goals>
-                <goal>shade</goal>
-              </goals>
-              <configuration>
-                <transformers>
-                  <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
-                    <manifestEntries>
-                      <Main-Class>io.vertx.core.Launcher</Main-Class>
-                      <Main-Verticle>${verticle.name}</Main-Verticle>
-                    </manifestEntries>
-                  </transformer>
-                  <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
-                  <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
-                    <resource>META-INF/services/io.vertx.core.spi.VerticleFactory</resource>
-                  </transformer>
-                </transformers>
-                <artifactSet></artifactSet>
-                <outputFile>${project.build.directory}/${project.artifactId}-fat.jar</outputFile>
-              </configuration>
-            </execution>
-          </executions>
-        </plugin>
-      </plugins>
+        <resources>
+            <resource>
+                <directory>src/main/resources</directory>
+                <filtering>true</filtering>
+            </resource>
+        </resources>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-release-plugin</artifactId>
+                <version>2.5.3</version>
+                <configuration>
+                    <tagNameFormat>v@{project.version}</tagNameFormat>
+                </configuration>
+            </plugin>
+            <plugin>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.8.1</version>
+                <configuration>
+                    <source>1.8</source>
+                    <target>1.8</target>
+                    <encoding>${project.build.sourceEncoding}</encoding>
+                    <useIncrementalCompilation>false</useIncrementalCompilation>
+                    <annotationProcessors>
+                        <annotationProcessor>io.vertx.codegen.CodeGenProcessor</annotationProcessor>
+                    </annotationProcessors>
+                    <generatedSourcesDirectory>${project.basedir}/src/main/generated</generatedSourcesDirectory>
+                    <compilerArgs>
+                        <arg>-Acodegen.output=${project.basedir}/src/main</arg>
+                    </compilerArgs>
+                </configuration>
+            </plugin>
+            <plugin>
+                <artifactId>maven-clean-plugin</artifactId>
+                <version>3.1.0</version>
+                <configuration>
+                    <filesets>
+                        <fileset>
+                            <directory>${project.basedir}/src/main/generated</directory>
+                        </fileset>
+                    </filesets>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-shade-plugin</artifactId>
+                <version>3.2.1</version>
+                <executions>
+                    <execution>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>shade</goal>
+                        </goals>
+                        <configuration>
+                            <transformers>
+                                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
+                                    <manifestEntries>
+                                        <Main-Class>io.vertx.core.Launcher</Main-Class>
+                                        <Main-Verticle>${verticle.name}</Main-Verticle>
+                                    </manifestEntries>
+                                </transformer>
+                                <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
+                                <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
+                                    <resource>META-INF/services/io.vertx.core.spi.VerticleFactory</resource>
+                                </transformer>
+                            </transformers>
+                            <outputFile>${project.build.directory}/${project.artifactId}-fat.jar</outputFile>
+                            <filters>
+                                <filter>
+                                    <artifact>*:*</artifact>
+                                    <excludes>
+                                        <exclude>META-INF/*.SF</exclude>
+                                        <exclude>META-INF/*.DSA</exclude>
+                                        <exclude>META-INF/*.RSA</exclude>
+                                        <exclude>META-INF/*.DES</exclude>
+                                    </excludes>
+                                </filter>
+                            </filters>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
     </build>
 </project>
diff --git a/ARCHITECT/cloud-patterns-compendium/src/main/generated/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/CloudPatternsServiceVertxEBProxy.java b/ARCHITECT/cloud-patterns-compendium/src/main/generated/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/CloudPatternsServiceVertxEBProxy.java
deleted file mode 100644
index 2370b83ee2d2a2ff98f00e626b09e5033c8e7480..0000000000000000000000000000000000000000
--- a/ARCHITECT/cloud-patterns-compendium/src/main/generated/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/CloudPatternsServiceVertxEBProxy.java
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
-* Copyright 2014 Red Hat, Inc.
-*
-* Red Hat 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 eu.DECIDEh2020.architect.cloudpatterns.compendium.service;
-
-import eu.DECIDEh2020.architect.cloudpatterns.compendium.service.CloudPatternsService;
-import io.vertx.core.eventbus.DeliveryOptions;
-import io.vertx.core.Vertx;
-import io.vertx.core.Future;
-import io.vertx.core.json.JsonObject;
-import io.vertx.core.json.JsonArray;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.stream.Collectors;
-import java.util.function.Function;
-import io.vertx.serviceproxy.ProxyHelper;
-import io.vertx.serviceproxy.ServiceException;
-import io.vertx.serviceproxy.ServiceExceptionMessageCodec;
-import io.vertx.core.json.JsonArray;
-import eu.DECIDEh2020.architect.cloudpatterns.compendium.service.CloudPatternsService;
-import eu.DECIDEh2020.architect.cloudpatterns.Patterns;
-import io.vertx.core.Vertx;
-import io.vertx.core.json.JsonObject;
-import io.vertx.core.AsyncResult;
-import io.vertx.core.Handler;
-
-/*
-  Generated Proxy code - DO NOT EDIT
-  @author Roger the Robot
-*/
-@SuppressWarnings({"unchecked", "rawtypes"})
-public class CloudPatternsServiceVertxEBProxy implements CloudPatternsService {
-
-  private Vertx _vertx;
-  private String _address;
-  private DeliveryOptions _options;
-  private boolean closed;
-
-  public CloudPatternsServiceVertxEBProxy(Vertx vertx, String address) {
-    this(vertx, address, null);
-  }
-
-  public CloudPatternsServiceVertxEBProxy(Vertx vertx, String address, DeliveryOptions options) {
-    this._vertx = vertx;
-    this._address = address;
-    this._options = options;
-    try {
-      this._vertx.eventBus().registerDefaultCodec(ServiceException.class,
-          new ServiceExceptionMessageCodec());
-    } catch (IllegalStateException ex) {}
-  }
-
-  @Override
-  public CloudPatternsService listPatterns(Handler<AsyncResult<JsonArray>> handler) {
-    if (closed) {
-    handler.handle(Future.failedFuture(new IllegalStateException("Proxy is closed")));
-      return this;
-    }
-    JsonObject _json = new JsonObject();
-    DeliveryOptions _deliveryOptions = (_options != null) ? new DeliveryOptions(_options) : new DeliveryOptions();
-    _deliveryOptions.addHeader("action", "listPatterns");
-    _vertx.eventBus().<JsonArray>send(_address, _json, _deliveryOptions, res -> {
-      if (res.failed()) {
-        handler.handle(Future.failedFuture(res.cause()));
-      } else {
-        handler.handle(Future.succeededFuture(res.result().body()));
-      }
-    });
-    return this;
-  }
-
-  @Override
-  public CloudPatternsService listNFRs(Handler<AsyncResult<JsonArray>> handler) {
-    if (closed) {
-    handler.handle(Future.failedFuture(new IllegalStateException("Proxy is closed")));
-      return this;
-    }
-    JsonObject _json = new JsonObject();
-    DeliveryOptions _deliveryOptions = (_options != null) ? new DeliveryOptions(_options) : new DeliveryOptions();
-    _deliveryOptions.addHeader("action", "listNFRs");
-    _vertx.eventBus().<JsonArray>send(_address, _json, _deliveryOptions, res -> {
-      if (res.failed()) {
-        handler.handle(Future.failedFuture(res.cause()));
-      } else {
-        handler.handle(Future.succeededFuture(res.result().body()));
-      }
-    });
-    return this;
-  }
-
-  @Override
-  public CloudPatternsService inferPatterns(JsonArray nfrs, Handler<AsyncResult<JsonArray>> handler) {
-    if (closed) {
-    handler.handle(Future.failedFuture(new IllegalStateException("Proxy is closed")));
-      return this;
-    }
-    JsonObject _json = new JsonObject();
-    _json.put("nfrs", nfrs);
-    DeliveryOptions _deliveryOptions = (_options != null) ? new DeliveryOptions(_options) : new DeliveryOptions();
-    _deliveryOptions.addHeader("action", "inferPatterns");
-    _vertx.eventBus().<JsonArray>send(_address, _json, _deliveryOptions, res -> {
-      if (res.failed()) {
-        handler.handle(Future.failedFuture(res.cause()));
-      } else {
-        handler.handle(Future.succeededFuture(res.result().body()));
-      }
-    });
-    return this;
-  }
-
-  @Override
-  public CloudPatternsService getPattern(String name, Handler<AsyncResult<JsonObject>> handler) {
-    if (closed) {
-    handler.handle(Future.failedFuture(new IllegalStateException("Proxy is closed")));
-      return this;
-    }
-    JsonObject _json = new JsonObject();
-    _json.put("name", name);
-    DeliveryOptions _deliveryOptions = (_options != null) ? new DeliveryOptions(_options) : new DeliveryOptions();
-    _deliveryOptions.addHeader("action", "getPattern");
-    _vertx.eventBus().<JsonObject>send(_address, _json, _deliveryOptions, res -> {
-      if (res.failed()) {
-        handler.handle(Future.failedFuture(res.cause()));
-      } else {
-        handler.handle(Future.succeededFuture(res.result().body()));
-      }
-    });
-    return this;
-  }
-
-
-  private List<Character> convertToListChar(JsonArray arr) {
-    List<Character> list = new ArrayList<>();
-    for (Object obj: arr) {
-      Integer jobj = (Integer)obj;
-      list.add((char)(int)jobj);
-    }
-    return list;
-  }
-
-  private Set<Character> convertToSetChar(JsonArray arr) {
-    Set<Character> set = new HashSet<>();
-    for (Object obj: arr) {
-      Integer jobj = (Integer)obj;
-      set.add((char)(int)jobj);
-    }
-    return set;
-  }
-
-  private <T> Map<String, T> convertMap(Map map) {
-    if (map.isEmpty()) { 
-      return (Map<String, T>) map; 
-    } 
-     
-    Object elem = map.values().stream().findFirst().get(); 
-    if (!(elem instanceof Map) && !(elem instanceof List)) { 
-      return (Map<String, T>) map; 
-    } else { 
-      Function<Object, T> converter; 
-      if (elem instanceof List) { 
-        converter = object -> (T) new JsonArray((List) object); 
-      } else { 
-        converter = object -> (T) new JsonObject((Map) object); 
-      } 
-      return ((Map<String, T>) map).entrySet() 
-       .stream() 
-       .collect(Collectors.toMap(Map.Entry::getKey, converter::apply)); 
-    } 
-  }
-  private <T> List<T> convertList(List list) {
-    if (list.isEmpty()) { 
-          return (List<T>) list; 
-        } 
-     
-    Object elem = list.get(0); 
-    if (!(elem instanceof Map) && !(elem instanceof List)) { 
-      return (List<T>) list; 
-    } else { 
-      Function<Object, T> converter; 
-      if (elem instanceof List) { 
-        converter = object -> (T) new JsonArray((List) object); 
-      } else { 
-        converter = object -> (T) new JsonObject((Map) object); 
-      } 
-      return (List<T>) list.stream().map(converter).collect(Collectors.toList()); 
-    } 
-  }
-  private <T> Set<T> convertSet(List list) {
-    return new HashSet<T>(convertList(list));
-  }
-}
\ No newline at end of file
diff --git a/ARCHITECT/cloud-patterns-compendium/src/main/generated/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/CloudPatternsServiceVertxProxyHandler.java b/ARCHITECT/cloud-patterns-compendium/src/main/generated/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/CloudPatternsServiceVertxProxyHandler.java
deleted file mode 100644
index 1879cea98b9db04bd6377af20e4f8dae02c0743d..0000000000000000000000000000000000000000
--- a/ARCHITECT/cloud-patterns-compendium/src/main/generated/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/CloudPatternsServiceVertxProxyHandler.java
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
-* Copyright 2014 Red Hat, Inc.
-*
-* Red Hat 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 eu.DECIDEh2020.architect.cloudpatterns.compendium.service;
-
-import eu.DECIDEh2020.architect.cloudpatterns.compendium.service.CloudPatternsService;
-import io.vertx.core.Vertx;
-import io.vertx.core.Handler;
-import io.vertx.core.AsyncResult;
-import io.vertx.core.eventbus.EventBus;
-import io.vertx.core.eventbus.Message;
-import io.vertx.core.eventbus.MessageConsumer;
-import io.vertx.core.eventbus.DeliveryOptions;
-import io.vertx.core.eventbus.ReplyException;
-import io.vertx.core.json.JsonObject;
-import io.vertx.core.json.JsonArray;
-import java.util.Collection;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.UUID;
-import java.util.stream.Collectors;
-import io.vertx.serviceproxy.ProxyHelper;
-import io.vertx.serviceproxy.ProxyHandler;
-import io.vertx.serviceproxy.ServiceException;
-import io.vertx.serviceproxy.ServiceExceptionMessageCodec;
-import io.vertx.core.json.JsonArray;
-import eu.DECIDEh2020.architect.cloudpatterns.compendium.service.CloudPatternsService;
-import eu.DECIDEh2020.architect.cloudpatterns.Patterns;
-import io.vertx.core.Vertx;
-import io.vertx.core.json.JsonObject;
-import io.vertx.core.AsyncResult;
-import io.vertx.core.Handler;
-
-/*
-  Generated Proxy code - DO NOT EDIT
-  @author Roger the Robot
-*/
-@SuppressWarnings({"unchecked", "rawtypes"})
-public class CloudPatternsServiceVertxProxyHandler extends ProxyHandler {
-
-  public static final long DEFAULT_CONNECTION_TIMEOUT = 5 * 60; // 5 minutes 
-
-  private final Vertx vertx;
-  private final CloudPatternsService service;
-  private final long timerID;
-  private long lastAccessed;
-  private final long timeoutSeconds;
-
-  public CloudPatternsServiceVertxProxyHandler(Vertx vertx, CloudPatternsService service) {
-    this(vertx, service, DEFAULT_CONNECTION_TIMEOUT);
-  }
-
-  public CloudPatternsServiceVertxProxyHandler(Vertx vertx, CloudPatternsService service, long timeoutInSecond) {
-    this(vertx, service, true, timeoutInSecond);
-  }
-
-  public CloudPatternsServiceVertxProxyHandler(Vertx vertx, CloudPatternsService service, boolean topLevel, long timeoutSeconds) {
-    this.vertx = vertx;
-    this.service = service;
-    this.timeoutSeconds = timeoutSeconds;
-    try {
-      this.vertx.eventBus().registerDefaultCodec(ServiceException.class,
-          new ServiceExceptionMessageCodec());
-    } catch (IllegalStateException ex) {}
-    if (timeoutSeconds != -1 && !topLevel) {
-      long period = timeoutSeconds * 1000 / 2;
-      if (period > 10000) {
-        period = 10000;
-      }
-      this.timerID = vertx.setPeriodic(period, this::checkTimedOut);
-    } else {
-      this.timerID = -1;
-    }
-    accessed();
-  }
-
-  private void checkTimedOut(long id) {
-    long now = System.nanoTime();
-    if (now - lastAccessed > timeoutSeconds * 1000000000) {
-      close();
-    }
-  }
-
-  @Override
-  public void close() {
-    if (timerID != -1) {
-      vertx.cancelTimer(timerID);
-    }
-    super.close();
-  }
-
-  private void accessed() {
-    this.lastAccessed = System.nanoTime();
-  }
-
-  public void handle(Message<JsonObject> msg) {
-    try {
-      JsonObject json = msg.body();
-      String action = msg.headers().get("action");
-      if (action == null) {
-        throw new IllegalStateException("action not specified");
-      }
-      accessed();
-      switch (action) {
-
-
-        case "listPatterns": {
-          service.listPatterns(createHandler(msg));
-          break;
-        }
-        case "listNFRs": {
-          service.listNFRs(createHandler(msg));
-          break;
-        }
-        case "inferPatterns": {
-          service.inferPatterns((io.vertx.core.json.JsonArray)json.getValue("nfrs"), createHandler(msg));
-          break;
-        }
-        case "getPattern": {
-          service.getPattern((java.lang.String)json.getValue("name"), createHandler(msg));
-          break;
-        }
-        default: {
-          throw new IllegalStateException("Invalid action: " + action);
-        }
-      }
-    } catch (Throwable t) {
-      msg.reply(new ServiceException(500, t.getMessage()));
-      throw t;
-    }
-  }
-
-  private <T> Handler<AsyncResult<T>> createHandler(Message msg) {
-    return res -> {
-      if (res.failed()) {
-        if (res.cause() instanceof ServiceException) {
-          msg.reply(res.cause());
-        } else {
-          msg.reply(new ServiceException(-1, res.cause().getMessage()));
-        }
-      } else {
-        if (res.result() != null  && res.result().getClass().isEnum()) {
-          msg.reply(((Enum) res.result()).name());
-        } else {
-          msg.reply(res.result());
-        }
-      }
-    };
-  }
-
-  private <T> Handler<AsyncResult<List<T>>> createListHandler(Message msg) {
-    return res -> {
-      if (res.failed()) {
-        if (res.cause() instanceof ServiceException) {
-          msg.reply(res.cause());
-        } else {
-          msg.reply(new ServiceException(-1, res.cause().getMessage()));
-        }
-      } else {
-        msg.reply(new JsonArray(res.result()));
-      }
-    };
-  }
-
-  private <T> Handler<AsyncResult<Set<T>>> createSetHandler(Message msg) {
-    return res -> {
-      if (res.failed()) {
-        if (res.cause() instanceof ServiceException) {
-          msg.reply(res.cause());
-        } else {
-          msg.reply(new ServiceException(-1, res.cause().getMessage()));
-        }
-      } else {
-        msg.reply(new JsonArray(new ArrayList<>(res.result())));
-      }
-    };
-  }
-
-  private Handler<AsyncResult<List<Character>>> createListCharHandler(Message msg) {
-    return res -> {
-      if (res.failed()) {
-        if (res.cause() instanceof ServiceException) {
-          msg.reply(res.cause());
-        } else {
-          msg.reply(new ServiceException(-1, res.cause().getMessage()));
-        }
-      } else {
-        JsonArray arr = new JsonArray();
-        for (Character chr: res.result()) {
-          arr.add((int) chr);
-        }
-        msg.reply(arr);
-      }
-    };
-  }
-
-  private Handler<AsyncResult<Set<Character>>> createSetCharHandler(Message msg) {
-    return res -> {
-      if (res.failed()) {
-        if (res.cause() instanceof ServiceException) {
-          msg.reply(res.cause());
-        } else {
-          msg.reply(new ServiceException(-1, res.cause().getMessage()));
-        }
-      } else {
-        JsonArray arr = new JsonArray();
-        for (Character chr: res.result()) {
-          arr.add((int) chr);
-        }
-        msg.reply(arr);
-      }
-    };
-  }
-
-  private <T> Map<String, T> convertMap(Map map) {
-    return (Map<String, T>)map;
-  }
-
-  private <T> List<T> convertList(List list) {
-    return (List<T>)list;
-  }
-
-  private <T> Set<T> convertSet(List list) {
-    return new HashSet<T>((List<T>)list);
-  }
-}
\ No newline at end of file
diff --git a/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/MainVerticle.java b/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/MainVerticle.java
new file mode 100644
index 0000000000000000000000000000000000000000..3bc8709f97fafc01803bbebf6d82f616d6b82cbf
--- /dev/null
+++ b/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/MainVerticle.java
@@ -0,0 +1,217 @@
+/*
+ * Copyright (c) 2017 Fraunhofer FOKUS.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the
+ * GNU AGPL v3 which accompanies
+ * this distribution, and is available at
+ * http://www.gnu.org/licenses/agpl.txt
+ *
+ * Contributors:
+ * Simon Dutkowski Fraunhofer FOKUS
+ *
+ * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+ */
+package eu.DECIDEh2020.architect.cloudpatterns.compendium;
+
+import eu.DECIDEh2020.architect.cloudpatterns.compendium.service.ArchitectService;
+import eu.DECIDEh2020.architect.cloudpatterns.compendium.service.ArchitectServiceVerticle;
+import eu.DECIDEh2020.architect.cloudpatterns.compendium.service.CloudPatternsCompendiumVerticle;
+import eu.DECIDEh2020.architect.cloudpatterns.compendium.service.CloudPatternsService;
+import io.vertx.config.ConfigRetriever;
+import io.vertx.config.ConfigRetrieverOptions;
+import io.vertx.config.ConfigStoreOptions;
+import io.vertx.core.*;
+import io.vertx.core.http.HttpMethod;
+import io.vertx.core.http.HttpServer;
+import io.vertx.core.http.HttpServerOptions;
+import io.vertx.core.json.JsonArray;
+import io.vertx.core.json.JsonObject;
+import io.vertx.ext.dropwizard.MetricsService;
+import io.vertx.ext.healthchecks.HealthCheckHandler;
+import io.vertx.ext.healthchecks.Status;
+import io.vertx.ext.web.Router;
+import io.vertx.ext.web.RoutingContext;
+import io.vertx.ext.web.api.contract.RouterFactoryOptions;
+import io.vertx.ext.web.api.contract.openapi3.OpenAPI3RouterFactory;
+import io.vertx.ext.web.common.template.TemplateEngine;
+import io.vertx.ext.web.handler.CorsHandler;
+import io.vertx.ext.web.handler.StaticHandler;
+import io.vertx.ext.web.handler.TemplateHandler;
+import io.vertx.ext.web.templ.thymeleaf.ThymeleafTemplateEngine;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+public class MainVerticle extends AbstractVerticle {
+
+    private Logger log = LoggerFactory.getLogger(getClass());
+
+    private CloudPatternsService patternsService;
+    private ArchitectService architectService;
+
+    @Override
+    public void start(Future<Void> startFuture) {
+        MetricsService metrics = MetricsService.create(vertx);
+
+        ConfigStoreOptions storeOptions = new ConfigStoreOptions()
+                .setType("env")
+                .setConfig(new JsonObject().put("keys", new JsonArray()
+                        .add("GITLAB_TOKEN")));
+
+        ConfigRetriever retriever = ConfigRetriever.create(vertx, new ConfigRetrieverOptions().addStore(storeOptions));
+        Future<JsonObject> configFuture = ConfigRetriever.getConfigAsFuture(retriever);
+        configFuture.compose(config -> {
+            Future<String> deployFuture = Future.future();
+            vertx.deployVerticle(CloudPatternsCompendiumVerticle.class, new DeploymentOptions().setWorker(true).setConfig(config), deployFuture.completer());
+            Future<String> deployFuture2 = Future.future();
+            vertx.deployVerticle(ArchitectServiceVerticle.class, new DeploymentOptions().setWorker(true).setConfig(config), deployFuture2.completer());
+            return CompositeFuture.all(deployFuture, deployFuture2);
+        }).compose(v -> {
+            patternsService = CloudPatternsService.createProxy(vertx, CloudPatternsService.ADDRESS);
+            architectService = ArchitectService.createProxy(vertx, ArchitectService.ADDRESS);
+
+            Future<OpenAPI3RouterFactory> factoryFuture = Future.future();
+            OpenAPI3RouterFactory.create(vertx, "webroot/openapi.yaml", factoryFuture.completer());
+            return factoryFuture;
+        }).compose(routerFactory -> {
+            RouterFactoryOptions options = new RouterFactoryOptions().setMountNotImplementedHandler(true).setMountValidationFailureHandler(true);
+            routerFactory.setOptions(options);
+            routerFactory.addHandlerByOperationId("listNfrs", this::handleListNfrs);
+            routerFactory.addHandlerByOperationId("listPatterns", this::handleListPatterns);
+            routerFactory.addHandlerByOperationId("getPattern", this::handleGetPattern);
+            routerFactory.addHandlerByOperationId("initApplication", this::handleInitApplication);
+            routerFactory.addHandlerByOperationId("getRecommendations", this::handleGetRecommendations);
+            routerFactory.addHandlerByOperationId("putRecommendations", this::handlePutRecommendations);
+
+            Router router = routerFactory.getRouter();
+            router.route().order(0).handler(CorsHandler.create("*").allowedHeader("Content-Type").allowedMethods(Stream.of(HttpMethod.PUT, HttpMethod.GET).collect(Collectors.toSet())));
+
+            HealthCheckHandler hch = HealthCheckHandler.create(vertx);
+            hch.register("buildInfo", future -> {
+                vertx.fileSystem().readFile("buildinfo.json", ar -> {
+                    if (ar.succeeded()) {
+                        future.complete(Status.OK(ar.result().toJsonObject()));
+                    } else {
+                        future.fail(ar.cause());
+                    }
+                });
+            });
+            router.get("/health*").handler(hch);
+
+            router.route("/*").handler(StaticHandler.create());
+            router.route("/resources/*").handler(StaticHandler.create("patterns"));
+
+            router.get("/metrics").produces("application/json").handler(routingContext -> {
+                try {
+                    JsonObject m = metrics.getMetricsSnapshot(vertx);
+                    if (m != null) {
+                        routingContext.response().end(m.encodePrettily());
+                    } else {
+                        routingContext.response().setStatusCode(503).end();
+                    }
+                } catch (Exception e) {
+                    log.error("metrics", e);
+                }
+            });
+
+            TemplateEngine engine = ThymeleafTemplateEngine.create(vertx);
+            router.get("/templates/*").handler(TemplateHandler.create(engine));
+
+            HttpServer server = vertx.createHttpServer(new HttpServerOptions().setPort(8080));
+            server.requestHandler(router).listen();
+
+            startFuture.complete();
+        }, startFuture);
+
+    }
+
+    public void handleListNfrs(RoutingContext routingContext) {
+        patternsService.listNFRs(ar -> {
+            if (ar.succeeded()) {
+                routingContext.response().end(ar.result().encodePrettily());
+            } else {
+                routingContext.response().setStatusCode(500).setStatusMessage(ar.cause().getMessage()).end();
+            }
+        });
+    }
+
+    public void handleListPatterns(RoutingContext routingContext) {
+        List<String> categories = routingContext.queryParam("categories");
+        patternsService.listPatterns(categories, ar -> {
+            if (ar.succeeded()) {
+                routingContext.response().end(ar.result().encodePrettily());
+            } else {
+                routingContext.response().setStatusCode(500).setStatusMessage(ar.cause().getMessage()).end();
+            }
+        });
+    }
+
+    public void handleGetPattern(RoutingContext routingContext) {
+        String name = routingContext.pathParam("name");
+        patternsService.getPattern(name, ar -> {
+            if (ar.succeeded()) {
+                if (routingContext.getAcceptableContentType().equalsIgnoreCase("application/json")) {
+                    routingContext.response().end(ar.result().encodePrettily());
+                } else {
+                    routingContext.put("pattern", ar.result());
+                    routingContext.reroute("/templates/pattern.html");
+                }
+            } else {
+                routingContext.response().setStatusCode(404).setStatusMessage(ar.cause().getMessage()).end();
+            }
+        });
+
+    }
+
+    public void handleInitApplication(RoutingContext routingContext) {
+        String uri = routingContext.queryParam("uri").get(0);
+        List<String> tokenParams = routingContext.queryParam("token");
+        List<String> usernameParams = routingContext.queryParam("username");
+        List<String> passwordParams = routingContext.queryParam("password");
+
+        String token = tokenParams != null && !tokenParams.isEmpty() ? tokenParams.get(0) : null;
+        String username = usernameParams != null && !usernameParams.isEmpty() ? usernameParams.get(0) : null;
+        String password = passwordParams != null && !passwordParams.isEmpty() ? passwordParams.get(0) : null;
+
+        architectService.initApplication(uri, token, username, password, ar -> {
+            if (ar.succeeded()) {
+                routingContext.response().end(ar.result().encodePrettily());
+            } else {
+                routingContext.response().setStatusCode(500).setStatusMessage(ar.cause().getMessage()).end();
+            }
+        });
+    }
+
+    public void handleGetRecommendations(RoutingContext routingContext) {
+        architectService.getRecommendations(
+                routingContext.pathParam("name"),
+                Boolean.valueOf(routingContext.queryParam("infer").get(0)), ar -> {
+            if (ar.succeeded()) {
+                routingContext.response().end(ar.result().encodePrettily());
+            } else {
+                routingContext.response().setStatusCode(500).setStatusMessage(ar.cause().getMessage()).end();
+            }
+        });
+    }
+
+    public void handlePutRecommendations(RoutingContext routingContext) {
+        architectService.putRecommendations(routingContext.pathParam("name"), routingContext.getBodyAsJsonArray(), ar -> {
+            if (ar.succeeded()) {
+                routingContext.response().end();
+            } else {
+                routingContext.response().setStatusCode(500).setStatusMessage(ar.cause().getMessage()).end();
+            }
+        });
+    }
+
+    public static void main(String[] args) {
+        String[] params = Arrays.copyOf(args, args.length + 1);
+        params[params.length - 1] = MainVerticle.class.getName();
+        Launcher.executeCommand("run", params);
+    }
+
+}
diff --git a/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/Server.java b/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/Server.java
deleted file mode 100644
index 4500859216a3dc578629f002fe573e22960ef3b2..0000000000000000000000000000000000000000
--- a/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/Server.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * Copyright (c) 2017 Fraunhofer FOKUS.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the
- * GNU AGPL v3 which accompanies
- * this distribution, and is available at
- * http://www.gnu.org/licenses/agpl.txt
- *
- * Contributors:
- * Simon Dutkowski Fraunhofer FOKUS
- *
- * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
- */
-package eu.DECIDEh2020.architect.cloudpatterns.compendium;
-
-import eu.DECIDEh2020.architect.cloudpatterns.compendium.service.CloudPatternsService;
-import io.vertx.core.*;
-import io.vertx.core.http.HttpMethod;
-import io.vertx.core.json.JsonArray;
-import io.vertx.core.json.JsonObject;
-import io.vertx.ext.dropwizard.MetricsService;
-import io.vertx.ext.healthchecks.HealthCheckHandler;
-import io.vertx.ext.healthchecks.Status;
-import io.vertx.ext.web.Router;
-import io.vertx.ext.web.handler.BodyHandler;
-import io.vertx.ext.web.handler.CorsHandler;
-import io.vertx.ext.web.handler.StaticHandler;
-import io.vertx.ext.web.handler.TemplateHandler;
-import io.vertx.ext.web.templ.TemplateEngine;
-import io.vertx.ext.web.templ.ThymeleafTemplateEngine;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.Arrays;
-
-public class Server extends AbstractVerticle {
-    private Logger log = LoggerFactory.getLogger(getClass());
-
-    public static void main(String[] args) {
-        Launcher.executeCommand("run", Server.class.getName());
-    }
-
-    private CloudPatternsService patternsService;
-
-    @Override
-    public void start(Future<Void> startFuture) {
-        MetricsService metrics = MetricsService.create(vertx);
-
-        vertx.deployVerticle(CloudPatternsCompendiumVerticle.class.getName(), new DeploymentOptions().setWorker(true), res -> {
-            if (res.succeeded()) {
-                patternsService = CloudPatternsService.createProxy(vertx, "cloudpatterns");
-
-                Router router = Router.router(vertx);
-                router.route().handler(CorsHandler.create("*").allowedMethod(HttpMethod.GET));
-                router.route().handler(BodyHandler.create());
-
-                router.route("/").handler(StaticHandler.create());
-                router.route("/openapi/*").handler(StaticHandler.create("openapi"));
-                router.route("/resources/*").handler(StaticHandler.create("patterns"));
-
-                HealthCheckHandler hch = HealthCheckHandler.create(vertx);
-                hch.register("simple-ok", future -> future.complete(Status.OK()));
-                hch.register("status", future -> future.complete(Status.OK(new JsonObject().put("build", 1))));
-                router.get("/health*").handler(hch);
-
-                router.get("/metrics").produces("application/json").handler(routingContext -> {
-                    try {
-                        JsonObject m = metrics.getMetricsSnapshot(vertx);
-                        if (m != null) {
-                            routingContext.response().setStatusCode(200).end(m.encodePrettily());
-                        } else {
-                            routingContext.response().setStatusCode(503).end();
-                        }
-                    } catch (Exception e) {
-                        log.error("metrics", e);
-                    }
-                });
-
-                TemplateEngine engine = ThymeleafTemplateEngine.create();
-                router.get("/templates/*").handler(TemplateHandler.create(engine));
-
-                router.get("/nfrs").produces("application/json").handler(routingContext -> {
-                    patternsService.listNFRs(reply -> {
-                        if (reply.succeeded()) {
-                            routingContext.response().setStatusCode(200);
-                            routingContext.response().end(reply.result().encodePrettily());
-                        } else {
-                            routingContext.fail(500);
-                        }
-                    });
-                });
-
-                router.get("/patterns").produces("application/json").handler(routingContext -> {
-                    patternsService.listPatterns(reply -> {
-                        if (reply.succeeded()) {
-                            routingContext.response().setStatusCode(200);
-                            routingContext.response().end(reply.result().encodePrettily());
-                        } else {
-                            routingContext.fail(500);
-                        }
-                    });
-                });
-
-                router.get("/patterns/:pattern").produces("text/html").handler(routingContext -> {
-                    String patternName = routingContext.request().getParam("pattern");
-                    patternsService.getPattern(patternName, reply -> {
-                        if (reply.succeeded()) {
-                            routingContext.put("pattern", reply.result());
-                            routingContext.reroute("/templates/pattern.html");
-                        } else {
-                            routingContext.response().setStatusCode(404);
-                            routingContext.response().end("Pattern not found.");
-                        }
-                    });
-                });
-
-                router.get("/patterns/:pattern").produces("application/json").handler(routingContext -> {
-                    String patternName = routingContext.request().getParam("pattern");
-                    patternsService.getPattern(patternName, reply -> {
-                        if (reply.succeeded()) {
-                            routingContext.response().setStatusCode(200);
-                            routingContext.response().end(reply.result().encodePrettily());
-                        } else {
-                            routingContext.response().setStatusCode(404);
-                            routingContext.response().end("Pattern not found.");
-                        }
-                    });
-                });
-
-                router.get("/inferred/patterns").produces("application/json").handler(routingContext -> {
-                    String param = routingContext.request().getParam("nfr");
-                    if (param != null) {
-                        String[] nfrs = param.split(",");
-                        patternsService.inferPatterns(new JsonArray(Arrays.asList(nfrs)),reply -> {
-                            if (reply.succeeded()) {
-                                routingContext.response().setStatusCode(200);
-                                routingContext.response().end(reply.result().encodePrettily());
-                            } else {
-                                routingContext.fail(500);
-                            }
-                        });
-                    } else {
-                        routingContext.fail(500);
-                    }
-                });
-
-                vertx.createHttpServer().requestHandler(router::accept).listen(8080);
-
-                startFuture.complete();
-            } else {
-                startFuture.fail(res.result());
-            }
-        });
-    }
-
-}
diff --git a/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/converters/NFRConverter.java b/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/converters/NFRConverter.java
deleted file mode 100644
index b2f870b7550f7d8fb67a80ac0394e86d34d3b324..0000000000000000000000000000000000000000
--- a/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/converters/NFRConverter.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 2017 Fraunhofer FOKUS.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the
- * GNU AGPL v3 which accompanies
- * this distribution, and is available at
- * http://www.gnu.org/licenses/agpl.txt
- *
- * Contributors:
- * Simon Dutkowski Fraunhofer FOKUS
- *
- * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
- */
-package eu.DECIDEh2020.architect.cloudpatterns.compendium.converters;
-
-import io.vertx.core.json.JsonObject;
-import org.apache.jena.rdf.model.Resource;
-import org.apache.jena.vocabulary.DCTerms;
-
-public class NFRConverter {
-
-    public static Resource toResource(JsonObject nfr) {
-        return null;
-    }
-
-    public static JsonObject toJson(Resource nfr) {
-        JsonObject obj = new JsonObject();
-        obj.put("uriref", nfr.getURI());
-        obj.put("title", nfr.getProperty(DCTerms.title).getString());
-        obj.put("description", nfr.getProperty(DCTerms.description).getString());
-        return obj;
-    }
-
-}
diff --git a/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/converters/PatternConverter.java b/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/converters/PatternConverter.java
deleted file mode 100644
index c17a4762fa45ad637886255fd40c3ac1dea09c95..0000000000000000000000000000000000000000
--- a/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/converters/PatternConverter.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright (c) 2017 Fraunhofer FOKUS.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the
- * GNU AGPL v3 which accompanies
- * this distribution, and is available at
- * http://www.gnu.org/licenses/agpl.txt
- *
- * Contributors:
- * Simon Dutkowski Fraunhofer FOKUS
- *
- * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
- */
-package eu.DECIDEh2020.architect.cloudpatterns.compendium.converters;
-
-import eu.DECIDEh2020.architect.cloudpatterns.DP;
-import io.vertx.core.json.JsonArray;
-import io.vertx.core.json.JsonObject;
-import org.apache.jena.rdf.model.Resource;
-import org.apache.jena.sparql.vocabulary.FOAF;
-import org.apache.jena.vocabulary.DCTerms;
-
-public class PatternConverter {
-
-    public static Resource toResource(JsonObject nfr) {
-        return null;
-    }
-
-    public static JsonObject toJson(Resource pattern) {
-        JsonObject obj = new JsonObject();
-        obj.put("uriRef", pattern.getURI());
-        obj.put("title", pattern.getRequiredProperty(DCTerms.title).getString());
-        if (pattern.hasProperty(DCTerms.type)) {
-            JsonArray array = new JsonArray();
-            pattern.listProperties(DCTerms.type).forEachRemaining(stmt -> array.add(stmt.getResource().getURI()));
-            obj.put("categories", array);
-        }
-        if (pattern.hasProperty(DP.icon)) {
-            obj.put("icon", pattern.getPropertyResourceValue(DP.icon).getLocalName());
-        }
-        if (pattern.hasProperty(DCTerms.subject)) {
-            obj.put("subject", pattern.getProperty(DCTerms.subject).getString());
-        }
-        if (pattern.hasProperty(DCTerms.description)) {
-            obj.put("description", pattern.getProperty(DCTerms.description).getString());
-        }
-        if (pattern.hasProperty(DP.context)) {
-            obj.put("context", pattern.getProperty(DP.context).getString());
-        }
-        if (pattern.hasProperty(DP.solution)) {
-            obj.put("solution", pattern.getProperty(DP.solution).getString());
-        }
-        if (pattern.hasProperty(DCTerms.license)) {
-            obj.put("license", pattern.getPropertyResourceValue(DCTerms.license).getLocalName());
-        }
-        if (pattern.hasProperty(FOAF.page)) {
-            JsonObject page = new JsonObject();
-            Resource p = pattern.getPropertyResourceValue(FOAF.page);
-            page.put("topic", p.getProperty(FOAF.topic).getString());
-            page.put("primaryTopic", p.getPropertyResourceValue(FOAF.primaryTopic).getURI());
-            obj.put("page", page);
-        }
-        if (pattern.hasProperty(DCTerms.relation)) {
-            JsonArray array = new JsonArray();
-            pattern.listProperties(DCTerms.relation).forEachRemaining(stmt -> array.add(stmt.getResource().getURI()));
-            obj.put("relations", array);
-        }
-        if (pattern.hasProperty(DP.hasImpactOn)) {
-            JsonArray array = new JsonArray();
-            pattern.listProperties(DP.hasImpactOn).forEachRemaining(stmt -> array.add(stmt.getResource().getURI()));
-            obj.put("impacts", array);
-        }
-        if (pattern.hasProperty(DP.hasPositiveImpactOn)) {
-            JsonArray array = new JsonArray();
-            pattern.listProperties(DP.hasPositiveImpactOn).forEachRemaining(stmt -> array.add(stmt.getResource().getURI()));
-            obj.put("positiveImpacts", array);
-        }
-        if (pattern.hasProperty(DP.hasNegativeImpactOn)) {
-            JsonArray array = new JsonArray();
-            pattern.listProperties(DP.hasNegativeImpactOn).forEachRemaining(stmt -> array.add(stmt.getResource().getURI()));
-            obj.put("negativeImpacts", array);
-        }
-        return obj;
-    }
-
-}
diff --git a/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/ArchitectService.java b/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/ArchitectService.java
new file mode 100644
index 0000000000000000000000000000000000000000..a79cd64ef33f7b7178ea9a99abb2f34d264bc9e3
--- /dev/null
+++ b/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/ArchitectService.java
@@ -0,0 +1,35 @@
+package eu.DECIDEh2020.architect.cloudpatterns.compendium.service;
+
+import io.vertx.codegen.annotations.Fluent;
+import io.vertx.codegen.annotations.ProxyGen;
+import io.vertx.core.AsyncResult;
+import io.vertx.core.Handler;
+import io.vertx.core.Vertx;
+import io.vertx.core.json.JsonArray;
+import io.vertx.core.json.JsonObject;
+
+import java.nio.file.Path;
+
+@ProxyGen
+public interface ArchitectService {
+
+    String ADDRESS = "eu.DECIDEh2020.architect.service.queue";
+
+    static ArchitectService create(Path baseDir, Handler<AsyncResult<ArchitectService>> readyHandler) {
+        return new ArchitectServiceImpl(baseDir, readyHandler);
+    }
+
+    static ArchitectService createProxy(Vertx vertx, String address) {
+        return new ArchitectServiceVertxEBProxy(vertx, address);
+    }
+
+    @Fluent
+    ArchitectService initApplication(String ref, String token, String username, String password, Handler<AsyncResult<JsonObject>> handler);
+
+    @Fluent
+    ArchitectService getRecommendations(String appName, boolean infer, Handler<AsyncResult<JsonObject>> handler);
+
+    @Fluent
+    ArchitectService putRecommendations(String appName, JsonArray recommendations, Handler<AsyncResult<JsonObject>> handler);
+
+}
diff --git a/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/ArchitectServiceImpl.java b/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/ArchitectServiceImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..aaca0e4de2ea645ec3623572b802c3eb67f847cd
--- /dev/null
+++ b/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/ArchitectServiceImpl.java
@@ -0,0 +1,166 @@
+package eu.DECIDEh2020.architect.cloudpatterns.compendium.service;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import eu.DECIDEh2020.appManager.AppManager;
+import eu.DECIDEh2020.appManager.exceptions.AppManagerException;
+import eu.DECIDEh2020.appManager.exceptions.DECIDEValidationException;
+import eu.DECIDEh2020.appManager.models.AppDescription;
+import eu.DECIDEh2020.appManager.models.Nfr;
+import eu.DECIDEh2020.appManager.models.Pattern;
+import eu.DECIDEh2020.architect.cloudpatterns.Patterns;
+import io.vertx.core.AsyncResult;
+import io.vertx.core.Future;
+import io.vertx.core.Handler;
+import io.vertx.core.json.Json;
+import io.vertx.core.json.JsonArray;
+import io.vertx.core.json.JsonObject;
+import org.everit.json.schema.ValidationException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.nio.file.Path;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+public class ArchitectServiceImpl implements ArchitectService {
+
+    public final Logger log = LoggerFactory.getLogger(getClass());
+
+    private Path baseDir;
+
+    private Map<String, AppManager> local = new HashMap<>();
+
+    ArchitectServiceImpl(Path baseDir, Handler<AsyncResult<ArchitectService>> readyHandler) {
+        this.baseDir = baseDir;
+        readyHandler.handle(Future.succeededFuture(this));
+    }
+
+    @Override
+    public ArchitectService initApplication(String ref, String token, String username, String password, Handler<AsyncResult<JsonObject>> handler) {
+        Path repo = baseDir.resolve(ref.replaceAll("[^\\w\\s]", ""));
+
+        try {
+            final AppManager appManager;
+            if (token != null && !token.isEmpty()) {
+                appManager = AppManager.open(ref, token, repo);
+            } else {
+                appManager = AppManager.open(ref, username, password, repo);
+            }
+            appManager.sync();
+
+            AppDescription appDescription = appManager.getAppDescription();
+            String name = appDescription.getName().toLowerCase().replace(" ", "_");
+            local.put(name, appManager);
+
+            inferPatterns(appDescription);
+            appManager.write(appDescription);
+
+            handler.handle(Future.succeededFuture(createAppResponseSuccess(name, appDescription.getRecommendedPatterns())));
+
+        } catch (DECIDEValidationException e) {
+            ValidationException coreException = (ValidationException)e.getCause();
+            String message = coreException.getAllMessages().toString();
+            handler.handle(Future.failedFuture(message));
+        } catch (AppManagerException | IOException e) {
+            log.error("reading app description", e);
+            handler.handle(Future.failedFuture(e));
+        }
+
+        return this;
+    }
+
+    @Override
+    public ArchitectService getRecommendations(String appName, boolean infer, Handler<AsyncResult<JsonObject>> handler) {
+
+        AppManager appManager = local.get(appName);
+        if (appManager != null) {
+            try {
+                AppDescription appDescription = appManager.getAppDescription();
+
+                if (infer) {
+                    inferPatterns(appDescription);
+                    appManager.writeAndCommit(appDescription, "Initial pattern recommendation");
+                }
+
+                handler.handle(Future.succeededFuture(createAppResponseSuccess(appName, appDescription.getRecommendedPatterns())));
+            } catch (AppManagerException | IOException e) {
+                handler.handle(Future.failedFuture(e));
+            }
+        } else {
+            log.error("No repo for application name {} found.", appName);
+            handler.handle(Future.failedFuture("No repo for application name " + appName + " found."));
+        }
+        return this;
+    }
+
+    @Override
+    public ArchitectService putRecommendations(String appName, JsonArray recommendations, Handler<AsyncResult<JsonObject>> handler) {
+        AppManager appManager = local.get(appName);
+        if (appManager != null) {
+            try {
+                AppDescription appDescription = appManager.getAppDescription();
+                appDescription.getRecommendedPatterns().forEach(p -> {
+                    recommendations.forEach(obj -> {
+                        String uriRef = ((JsonObject)obj).getString("uriRef", "");
+                        if (uriRef.equals(p.getUriRef())) {
+                            p.setSelected(((JsonObject)obj).getBoolean("selected", false));
+                        }
+                    });
+                });
+                appManager.writeAndSync(appDescription, "Pattern selection changed");
+                handler.handle(Future.succeededFuture(createAppResponseSuccess(appName, appDescription.getRecommendedPatterns())));
+            } catch (AppManagerException | IOException e) {
+                handler.handle(Future.failedFuture(e));
+            }
+        } else {
+            log.error("No repo for application name {} found.", appName);
+            handler.handle(Future.failedFuture("No repo for application name " + appName + " found."));
+        }
+        return this;
+    }
+
+    private void inferPatterns(AppDescription appDescription) {
+        ObjectMapper m = new ObjectMapper();
+        List<Nfr> nfrs = appDescription.getNfrs();
+        List<ObjectNode> nfrList = nfrs.stream().map(nfr -> (ObjectNode)m.valueToTree(nfr)).collect(Collectors.toList());
+        List<ObjectNode> patternList = Patterns.createDefaultPatterns().inferPatternsJson(nfrList);
+        List<Pattern> patterns = patternList.stream().map(node -> m.convertValue(node, Pattern.class)).collect(Collectors.toList());
+
+        appDescription.getRecommendedPatterns().forEach(p -> {
+            patterns.forEach(rp -> {
+                if (p.getUriRef().equals(rp.getUriRef())) {
+                    rp.setSelected(p.isSelected());
+                }
+            });
+        });
+
+        appDescription.setRecommendedPatterns(patterns);
+    }
+
+    private JsonObject createAppResponseSuccess(String name, List<Pattern> recommendations) {
+        JsonArray patterns = new JsonArray();
+        recommendations.forEach(p -> patterns.add(JsonObject.mapFrom(p)));
+
+        return new JsonObject()
+                .put("success", true)
+                .put("app", new JsonObject()
+                        .put("name", name)
+                        .put("recommendations", patterns)
+                );
+    }
+
+    private JsonObject createAppResponseError(String name, String message) {
+        return new JsonObject()
+                .put("success", false)
+                .put("app", new JsonObject()
+                        .put("name", name))
+                .put("error", new JsonObject()
+                        .put("message", message)
+                );
+    }
+
+}
diff --git a/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/ArchitectServiceVerticle.java b/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/ArchitectServiceVerticle.java
new file mode 100644
index 0000000000000000000000000000000000000000..d59e88f43a1a29f5e9b1d0ec6c7c3cfaa4bb1cde
--- /dev/null
+++ b/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/ArchitectServiceVerticle.java
@@ -0,0 +1,39 @@
+package eu.DECIDEh2020.architect.cloudpatterns.compendium.service;
+
+import io.vertx.core.AbstractVerticle;
+import io.vertx.core.Future;
+import io.vertx.serviceproxy.ServiceBinder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+public class ArchitectServiceVerticle extends AbstractVerticle {
+
+    private final Logger log = LoggerFactory.getLogger(getClass());
+
+    @Override
+    public void start(Future<Void> startFuture) {
+
+        String baseDir = config().getString("DECIDE_REPOS_BASE_DIR");
+        Path base = null;
+        try {
+            base = baseDir != null ? Paths.get(baseDir) : Files.createTempDirectory("architect_");
+        } catch (IOException e) {
+            log.error("creating temp base directory", e);
+        }
+
+        ArchitectService.create(base, ready -> {
+            if (ready.succeeded()) {
+                new ServiceBinder(vertx).setAddress(ArchitectService.ADDRESS).register(ArchitectService.class, ready.result());
+                startFuture.complete();
+            } else {
+                startFuture.fail(ready.cause());
+            }
+        });
+    }
+
+}
diff --git a/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/CloudPatternsCompendiumVerticle.java b/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/CloudPatternsCompendiumVerticle.java
similarity index 76%
rename from ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/CloudPatternsCompendiumVerticle.java
rename to ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/CloudPatternsCompendiumVerticle.java
index 230ed346ec68886b860e86b4594c85f4ba2d95f0..eef94f7b7f212869af0be83380df5b5760c09f8f 100644
--- a/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/CloudPatternsCompendiumVerticle.java
+++ b/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/CloudPatternsCompendiumVerticle.java
@@ -11,13 +11,13 @@
  *
  * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
  */
-package eu.DECIDEh2020.architect.cloudpatterns.compendium;
+package eu.DECIDEh2020.architect.cloudpatterns.compendium.service;
 
 import eu.DECIDEh2020.architect.cloudpatterns.Patterns;
 import eu.DECIDEh2020.architect.cloudpatterns.compendium.service.CloudPatternsService;
 import io.vertx.core.AbstractVerticle;
 import io.vertx.core.Future;
-import io.vertx.serviceproxy.ProxyHelper;
+import io.vertx.serviceproxy.ServiceBinder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -25,12 +25,12 @@ public class CloudPatternsCompendiumVerticle extends AbstractVerticle {
     private Logger log = LoggerFactory.getLogger(getClass());
 
     @Override
-    public void start(Future<Void> startFuture) throws Exception {
+    public void start(Future<Void> startFuture) {
         try {
             Patterns patterns = Patterns.createDefaultPatterns();
-            CloudPatternsService patternsService = CloudPatternsService.create(patterns, ready -> {
+            CloudPatternsService.create(patterns, ready -> {
                 if (ready.succeeded()) {
-                    ProxyHelper.registerService(CloudPatternsService.class, vertx, ready.result(), "cloudpatterns");
+                    new ServiceBinder(vertx).setAddress(CloudPatternsService.ADDRESS).register(CloudPatternsService.class, ready.result());
                     startFuture.complete();
                 } else {
                     startFuture.fail(ready.cause());
diff --git a/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/CloudPatternsService.java b/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/CloudPatternsService.java
index 95d8279c9c311afd7dd58d60079f82361bc7bf62..da24c03c50da895ea5372665492b8bb7fabdf3fe 100644
--- a/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/CloudPatternsService.java
+++ b/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/CloudPatternsService.java
@@ -22,9 +22,13 @@ import io.vertx.core.Vertx;
 import io.vertx.core.json.JsonArray;
 import io.vertx.core.json.JsonObject;
 
+import java.util.List;
+
 @ProxyGen
 public interface CloudPatternsService {
 
+    String ADDRESS = "eu.DECIDEh2020.architect.service.cloudpatterns.queue";
+
     static CloudPatternsService create(Patterns patterns, Handler<AsyncResult<CloudPatternsService>> readyHandler) {
         return new CloudPatternsServiceImpl(patterns, readyHandler);
     }
@@ -34,14 +38,11 @@ public interface CloudPatternsService {
     }
 
     @Fluent
-    CloudPatternsService listPatterns(Handler<AsyncResult<JsonArray>> handler);
+    CloudPatternsService listPatterns(List<String> categories, Handler<AsyncResult<JsonArray>> handler);
 
     @Fluent
     CloudPatternsService listNFRs(Handler<AsyncResult<JsonArray>> handler);
 
-    @Fluent
-    CloudPatternsService inferPatterns(JsonArray nfrs, Handler<AsyncResult<JsonArray>> handler);
-
     @Fluent
     CloudPatternsService getPattern(String name, Handler<AsyncResult<JsonObject>> handler);
 
diff --git a/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/CloudPatternsServiceImpl.java b/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/CloudPatternsServiceImpl.java
index 70ea22b5e29eb390562b3426ee53986a4bcac234..05038deb5eb27139aae098b3ae913f7aafa03d10 100644
--- a/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/CloudPatternsServiceImpl.java
+++ b/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/CloudPatternsServiceImpl.java
@@ -13,26 +13,22 @@
  */
 package eu.DECIDEh2020.architect.cloudpatterns.compendium.service;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import eu.DECIDEh2020.architect.cloudpatterns.DECIDEPatterns;
 import eu.DECIDEh2020.architect.cloudpatterns.Patterns;
-import eu.DECIDEh2020.architect.cloudpatterns.compendium.converters.NFRConverter;
-import eu.DECIDEh2020.architect.cloudpatterns.compendium.converters.PatternConverter;
 import io.vertx.core.AsyncResult;
 import io.vertx.core.Future;
 import io.vertx.core.Handler;
 import io.vertx.core.json.Json;
 import io.vertx.core.json.JsonArray;
 import io.vertx.core.json.JsonObject;
-import org.apache.jena.rdf.model.Resource;
 
 import java.util.List;
 import java.util.stream.Collectors;
 
 class CloudPatternsServiceImpl implements CloudPatternsService {
 
-    Patterns patterns;
+    private Patterns patterns;
 
     CloudPatternsServiceImpl(Patterns patterns, Handler<AsyncResult<CloudPatternsService>> readyHandler) {
         this.patterns = patterns;
@@ -40,37 +36,28 @@ class CloudPatternsServiceImpl implements CloudPatternsService {
     }
 
     @Override
-    public CloudPatternsService listPatterns(Handler<AsyncResult<JsonArray>> handler) {
-        List<Resource> result = patterns.listPatterns();
-        handler.handle(Future.succeededFuture(new JsonArray(result.stream().map(PatternConverter::toJson).collect(Collectors.toList()))));
+    public CloudPatternsService listPatterns(List<String> categories, Handler<AsyncResult<JsonArray>> handler) {
+        List<ObjectNode> result = patterns.listPatternsJson();
+        JsonArray array = new JsonArray(
+                result.stream().map(pattern -> new JsonObject(Json.encodePrettily(pattern))).collect(Collectors.toList())
+            );
+        handler.handle(Future.succeededFuture(array));
         return this;
     }
 
     @Override
     public CloudPatternsService listNFRs(Handler<AsyncResult<JsonArray>> handler) {
-        List<Resource> result = patterns.listNFRs();
-        handler.handle(Future.succeededFuture(new JsonArray(result.stream().map(NFRConverter::toJson).collect(Collectors.toList()))));
-        return this;
-    }
-
-    @Override
-    public CloudPatternsService inferPatterns(JsonArray nfrs, Handler<AsyncResult<JsonArray>> handler) {
-        ObjectMapper m = new ObjectMapper();
-        List<ObjectNode> nfrList = nfrs.stream().map(nfr -> m.createObjectNode().put("kind", nfr.toString())).collect(Collectors.toList());
-
-        List<ObjectNode> inferredPatterns = patterns.inferPatternsJson(nfrList);
+        List<ObjectNode> result = patterns.listNFRsJson();
         JsonArray array = new JsonArray(
-            inferredPatterns.stream().map(pattern -> new JsonObject(Json.encodePrettily(pattern))).collect(Collectors.toList())
-        );
-
+                result.stream().map(pattern -> new JsonObject(Json.encodePrettily(pattern))).collect(Collectors.toList())
+            );
         handler.handle(Future.succeededFuture(array));
-
         return this;
     }
 
     @Override
     public CloudPatternsService getPattern(String name, Handler<AsyncResult<JsonObject>> handler) {
-        ObjectNode pattern = patterns.getPatternAsJson(DECIDEPatterns.BASE + "patterns/" + name);
+        ObjectNode pattern = patterns.getPatternJson(DECIDEPatterns.BASE + "patterns/" + name);
         if (pattern != null) {
             handler.handle(Future.succeededFuture(new JsonObject(Json.encodePrettily(pattern))));
         } else {
diff --git a/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/package-info.java b/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/package-info.java
index 6d7d7a5fa54d9870931219b4e9e77161b4fdd630..f1ca6da0104ee268d3c6d0032dd093b741384d8e 100644
--- a/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/package-info.java
+++ b/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/package-info.java
@@ -11,7 +11,7 @@
  *
  * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
  */
-@ModuleGen(groupPackage = "eu.DECIDEh2020.architect.cloudpatterns", name = "cloudpatternscompendium")
+@ModuleGen(groupPackage = "eu.DECIDEh2020.architect", name = "architect")
 package eu.DECIDEh2020.architect.cloudpatterns.compendium.service;
 
 import io.vertx.codegen.annotations.ModuleGen;
\ No newline at end of file
diff --git a/ARCHITECT/cloud-patterns-compendium/src/main/resources/buildinfo.json b/ARCHITECT/cloud-patterns-compendium/src/main/resources/buildinfo.json
new file mode 100644
index 0000000000000000000000000000000000000000..1f7afc7a1dbdc00fe4d0d1791c493a5ef3c33207
--- /dev/null
+++ b/ARCHITECT/cloud-patterns-compendium/src/main/resources/buildinfo.json
@@ -0,0 +1,4 @@
+{
+  "timestamp": "${buildTimestamp} UTC",
+  "version": "${project.version}"
+}
diff --git a/ARCHITECT/cloud-patterns-compendium/src/main/resources/openapi/openapi.json b/ARCHITECT/cloud-patterns-compendium/src/main/resources/openapi/openapi.json
index 16e5998fdfcd41ad754002d1cf0713f0a3d18ead..b3856a0d2716fddf3952d197a7757afe8b46da7c 100644
--- a/ARCHITECT/cloud-patterns-compendium/src/main/resources/openapi/openapi.json
+++ b/ARCHITECT/cloud-patterns-compendium/src/main/resources/openapi/openapi.json
@@ -1,7 +1,7 @@
 {
   "openapi": "3.0.1",
   "info": {
-    "version": "1.1-SNAPSHOT",
+    "version": "1.0",
     "title": "Cloud Patterns Compendium Microservice",
     "x-logo": {
       "url": "openapi/images/logoDecide_300ppp_small.jpg"
@@ -53,7 +53,7 @@
               "items": {
                 "type": "string",
                 "enum": [
-                  "fundamental",
+                  "basic",
                   "development",
                   "optimization",
                   "deployment",
diff --git a/ARCHITECT/cloud-patterns-compendium/src/main/resources/templates/pattern.html b/ARCHITECT/cloud-patterns-compendium/src/main/resources/templates/pattern.html
index 32dc35d9005a6befe3d583807d24d7fb8f1d479a..3876e0aab9399f810bcdd90bc0581483eac18f09 100644
--- a/ARCHITECT/cloud-patterns-compendium/src/main/resources/templates/pattern.html
+++ b/ARCHITECT/cloud-patterns-compendium/src/main/resources/templates/pattern.html
@@ -20,7 +20,7 @@
     </style>
 </head>
 <body>
-    <div class="container" data-th-object="${context.get('pattern')}">
+    <div class="container" data-th-object="${pattern}">
         <p/>
         <div class="media">
             <img class="d-flex align-self-end mr-3" height="100" data-th-src="@{'~/resources/icons/' + *{getString('icon')}}" />
@@ -30,15 +30,17 @@
             </div>
         </div>
         <hr/>
-        <h3>Problem</h3>
+        <h2>Problem</h2>
         <div class="jumbotron">
             <p class="lead" data-th-text="*{getString('subject')}">Subject</p>
         </div>
         <h2>Context</h2>
         <p data-th-text="*{getString('context')}">Context</p>
-        <h3>Solution</h3>
+        <h2>Solution</h2>
         <p data-th-text="*{getString('solution')}">Solution</p>
         <p>From: <a data-th-href="*{getJsonObject('page').getString('primaryTopic')}" ><span data-th-text="*{getJsonObject('page').getString('topic')}">Topic</span></a></p>
+        <h2>Model</h2>
+        <img class="d-flex align-self-end mr-3" data-th-src="@{'~/resources/models/' + *{getString('model')}}" />
     </div>
 
     <footer class="footer">
diff --git a/ARCHITECT/cloud-patterns-compendium/src/main/resources/openapi/images/logoDecide_300ppp_small.jpg b/ARCHITECT/cloud-patterns-compendium/src/main/resources/webroot/images/logoDecide_300ppp_small.jpg
similarity index 100%
rename from ARCHITECT/cloud-patterns-compendium/src/main/resources/openapi/images/logoDecide_300ppp_small.jpg
rename to ARCHITECT/cloud-patterns-compendium/src/main/resources/webroot/images/logoDecide_300ppp_small.jpg
diff --git a/ARCHITECT/cloud-patterns-compendium/src/main/resources/webroot/index.html b/ARCHITECT/cloud-patterns-compendium/src/main/resources/webroot/index.html
index 59f0195c0594b0e11baf07f2f9d39d2d57abdd1e..40500d50c4d51fbf92bcf78c5ad465a23b538343 100644
--- a/ARCHITECT/cloud-patterns-compendium/src/main/resources/webroot/index.html
+++ b/ARCHITECT/cloud-patterns-compendium/src/main/resources/webroot/index.html
@@ -17,7 +17,7 @@
     </style>
 </head>
 <body>
-<redoc spec-url='openapi/openapi.json'></redoc>
-<script src="https://unpkg.com/redoc/bundles/redoc.standalone.js"></script>
+<redoc spec-url='openapi.yaml'></redoc>
+<script src="https://unpkg.com/redoc@next/bundles/redoc.standalone.js"></script>
 </body>
 </html>
diff --git a/ARCHITECT/cloud-patterns-compendium/src/main/resources/webroot/openapi.yaml b/ARCHITECT/cloud-patterns-compendium/src/main/resources/webroot/openapi.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..1e454bae28e168ddbeceec60af768c4dee30b01e
--- /dev/null
+++ b/ARCHITECT/cloud-patterns-compendium/src/main/resources/webroot/openapi.yaml
@@ -0,0 +1,374 @@
+openapi: 3.0.0
+info:
+  version: ${project.version}
+  title: Cloud Patterns Compendium Microservice Test
+  x-logo:
+    url: images/logoDecide_300ppp_small.jpg
+paths:
+  /nfrs:
+    get:
+      tags:
+        - NFRs
+      description: Returns the list of all NFRs.
+      summary: List all NFRs
+      operationId: listNfrs
+      responses:
+        200:
+          description: List of NFRs.
+          content:
+            application/json:
+              schema:
+                type: array
+                items:
+                  $ref: "#/components/schemas/NFR"
+  /patterns:
+    get:
+      tags:
+        - Patterns
+      description: Returns the list of all patterns.
+      summary: List all Patterns
+      operationId: listPatterns
+      parameters:
+        - name: categories
+          in: query
+          description: A list of categories to filter.
+          schema:
+            type: array
+            items:
+              type: string
+              enum:
+                - basic
+                - development
+                - optimization
+                - deployment
+                - simple
+      responses:
+        200:
+          description: List of all patterns.
+          content:
+            application/json:
+              schema:
+                type: array
+                items:
+                  $ref: "#/components/schemas/Pattern"
+  /patterns/{name}:
+    get:
+      tags:
+        - Patterns
+      description: Returns a specific pattern by name
+      summary: A Pattern
+      operationId: getPattern
+      parameters:
+        - name: name
+          in: path
+          description: Name or id of the requested pattern
+          required: true
+          schema:
+            type: string
+          example: distributed-application
+      responses:
+        200:
+          description: The pattern
+          content:
+            application/json:
+              schema:
+                $ref: "#/components/schemas/Pattern"
+            text/html:
+              schema:
+                type: string
+                format: html5
+  /applications/init:
+    get:
+      tags:
+        - Application
+      description: Declares and init an application repository.
+      summary: Init new application
+      operationId: initApplication
+      parameters:
+        - name: uri
+          in: query
+          description: uri reference of the remote git repository
+          required: true
+          schema:
+            type: string
+        - name: path
+          in: query
+          description: path for using a local git repository
+          required: false
+          schema:
+            type: string
+        - name: token
+          in: query
+          description: token for accessing the remote git repository
+          required: false
+          schema:
+            type: string
+        - name: username
+          in: query
+          description: username for accessing the remote git repository
+          required: false
+          schema:
+            type: string
+        - name: password
+          in: query
+          description: password for accessing the remote git repository
+          required: false
+          schema:
+            type: string
+      responses:
+        '200':
+          description: The application info object and the name for later reference.
+          content:
+            'application/json':
+              schema:
+                $ref: '#/components/schemas/ApplicationResponse'
+  /applications/{name}:
+    get:
+      tags:
+        - Application
+      description: Receives previously initialized application for editing the recommended patterns.
+      summary: Get application
+      operationId: getApplication
+      parameters:
+        - name: name
+          in: path
+          description: Name of the requested application.
+          required: true
+          schema:
+            type: string
+      responses:
+        '200':
+          description: The application info object.
+          content:
+            'application/json':
+              schema:
+                $ref: '#/components/schemas/ApplicationResponse'
+        '412':
+          description: Precondition failed. The applcations git repository is not yet cloned and no authentication is provided.
+        '404':
+          description: Application name not found.
+  /applications/{name}/reset:
+    parameters:
+      - name: name
+        in: path
+        description: Name of the requested application.
+        required: true
+        schema:
+          type: string
+    get:
+      tags:
+        - Application
+      description: Reset repository to remote head.
+      summary: Reset application
+      operationId: resetApplication
+      responses:
+        '200':
+          description: The application info object.
+          content:
+            'application/json':
+              schema:
+                $ref: '#/components/schemas/ApplicationResponse'
+        '412':
+          description: Precondition failed. The applcations git repository is not yet cloned and no authentication is provided.
+        '404':
+          description: Application name not found.
+  /applications/{name}/recommendations:
+    parameters:
+      - name: name
+        in: path
+        description: Name of the requested application.
+        required: true
+        schema:
+          type: string
+    get:
+      tags:
+        - Application
+      description: Get the list of recoommended patterns for this application
+      summary: Get recommended Patterns
+      operationId: getRecommendations
+      parameters:
+        - name: infer
+          in: query
+          schema:
+            type: boolean
+      responses:
+        '200':
+          description: The application info object.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ApplicationResponse'
+        '412':
+          description: Precondition failed. The applcations git repository is not yet cloned and no authentication is provided.
+        '404':
+          description: Application name not found.
+    put:
+      tags:
+        - Application
+      description: Update recommended Patterns for this application, inclusding selection
+      summary: Update recommended Patterns
+      operationId: putRecommendations
+      requestBody:
+        content:
+          application/json:
+            schema:
+              type: array
+              items:
+                $ref: '#/components/schemas/RecommendedPattern'
+      responses:
+        '200':
+          description: The application info object.
+        '412':
+          description: Precondition failed. The applcations git repository is not yet cloned and no authentication is provided.
+        '404':
+          description: Application name not found.
+components:
+  schemas:
+    ReducedPattern:
+      description: A reduced representation of a pattern.
+      type: object
+      required:
+        - title
+        - uriRef
+      properties:
+        uriRef:
+          type: string
+          format: uri
+        title:
+          type: string
+        categories:
+          type: array
+          items:
+            type: string
+            format: uri
+        positiveImpacts:
+          type: array
+          items:
+            type: string
+            format: uri
+    Pattern:
+      description: A representation of a pattern.
+      type: object
+      required:
+        - title
+        - uriRef
+      properties:
+        uriRef:
+          type: string
+          format: uri
+        title:
+          type: string
+        categories:
+          type: array
+          items:
+            type: string
+            format: uri
+        icon:
+          type: string
+          format: uri
+        subject:
+          type: string
+        description:
+          type: string
+        context:
+          type: string
+        solution:
+          type: string
+        license:
+          type: string
+        page:
+          $ref: "#/components/schemas/Page"
+        relation:
+          type: string
+        impacts:
+          type: array
+          items:
+            type: string
+            format: uri
+        positiveImpacts:
+          type: array
+          items:
+            type: string
+            format: uri
+        negativeImpacts:
+          type: array
+          items:
+            type: string
+            format: uri
+    RecommendedPattern:
+      type: object
+      required:
+        - title
+        - selected
+      properties:
+        title:
+          type: string
+        uriRef:
+          type: string
+          format: uri
+        positiveImpacts:
+          type: array
+          items:
+            type: string
+          uniqueItems: true
+        categories:
+          type: array
+          items:
+            type: string
+          uniqueItems: true
+        tags:
+          type: array
+          items:
+            type: string
+          uniqueItems: true
+        selected:
+          type: boolean
+    NFR:
+      description: A representation of a non functional requirement.
+      type: object
+      required:
+        - uriRef
+        - title
+      properties:
+        uriRef:
+          type: string
+        title:
+          type: string
+        description:
+          type: string
+    Page:
+      description: A description of a page reference.
+      type: object
+      required:
+        - primaryTopic
+      properties:
+        topic:
+          type: string
+        primaryTopic:
+          type: string
+          format: uri
+    ApplicationResponse:
+      type: object
+      required:
+        - success
+      properties:
+        success:
+          type: boolean
+        app:
+          $ref: '#/components/schemas/Application'
+        error:
+          type: object
+          properties:
+            message:
+              type: string
+    Application:
+      type: object
+      required:
+        - name
+      properties:
+        name:
+          type: string
+        recommendations:
+          type: array
+          items:
+            $ref: '#/components/schemas/RecommendedPattern'
diff --git a/ARCHITECT/cloud-patterns/.gitignore b/ARCHITECT/cloud-patterns/.gitignore
index 70e100862d62237225d034c042b123732e945180..0e31aad86e9b25160e1c455075f5fd055a88343f 100644
--- a/ARCHITECT/cloud-patterns/.gitignore
+++ b/ARCHITECT/cloud-patterns/.gitignore
@@ -75,3 +75,4 @@ fabric.properties
 
 # windows specific files
 *~
+/bin/
diff --git a/ARCHITECT/cloud-patterns/.gitlab-ci.yml b/ARCHITECT/cloud-patterns/.gitlab-ci.yml
index 3e39e918e15d4230b18f24d3e79bcece218e8932..19d994265dd62994afa0e75ad73621cbff8ea881 100644
--- a/ARCHITECT/cloud-patterns/.gitlab-ci.yml
+++ b/ARCHITECT/cloud-patterns/.gitlab-ci.yml
@@ -1,7 +1,17 @@
-image: maven:alpine
-
 variables:
-  MAVEN_CLI_OPTS: "--batch-mode"
+  # This will suppress any download for dependencies and plugins or upload messages which would clutter the console log.
+  # `showDateTime` will show the passed time in milliseconds. You need to specify `--batch-mode` to make this work.
+  MAVEN_OPTS: "-Dhttps.protocols=TLSv1.2 -Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true"
+  # As of Maven 3.3.0 instead of this you may define these options in `.mvn/maven.config` so the same config is used
+  # when running from the command line.
+  # `installAtEnd` and `deployAtEnd` are only effective with recent version of the corresponding plugins.
+  MAVEN_CLI_OPTS: "--batch-mode --errors --fail-at-end --show-version"
+
+cache:
+  paths:
+    - .m2/repository
+
+image: maven:alpine
 
 before_script:
   - apk update && apk upgrade && apk add git
diff --git a/ARCHITECT/cloud-patterns/pom.xml b/ARCHITECT/cloud-patterns/pom.xml
index 869837d7f70beadaed0ec1f2ecb491db0a7b3942..dc16050c7852c1dba5333ddd7b28ac5266bbb8b2 100644
--- a/ARCHITECT/cloud-patterns/pom.xml
+++ b/ARCHITECT/cloud-patterns/pom.xml
@@ -4,7 +4,7 @@
 
     <groupId>eu.DECIDEh2020</groupId>
     <artifactId>cloudpatterns</artifactId>
-    <version>1.2.1-SNAPSHOT</version>
+    <version>2.0.2-SNAPSHOT</version>
 
     <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -14,11 +14,11 @@
         <repository>
             <id>paca</id>
             <name>Paca Releases Repo</name>
-            <url>https://paca.fokus.fraunhofer.de/repository/maven-releases/</url>
+            <url>https://paca.okd.fokus.fraunhofer.de/repository/maven-releases/</url>
         </repository>
         <snapshotRepository>
             <id>paca</id>
-            <url>https://paca.fokus.fraunhofer.de/repository/maven-snapshots/</url>
+            <url>https://paca.okd.fokus.fraunhofer.de/repository/maven-snapshots/</url>
         </snapshotRepository>
     </distributionManagement>
 
@@ -39,7 +39,7 @@
             <groupId>org.apache.jena</groupId>
             <artifactId>apache-jena-libs</artifactId>
             <type>pom</type>
-            <version>3.7.0</version>
+            <version>3.11.0</version>
         </dependency>
         <dependency>
             <groupId>org.testng</groupId>
@@ -60,7 +60,7 @@
             </plugin>
             <plugin>
                 <artifactId>maven-compiler-plugin</artifactId>
-                <version>3.7.0</version>
+                <version>3.8.1</version>
                 <configuration>
                     <source>1.8</source>
                     <target>1.8</target>
@@ -70,7 +70,7 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-shade-plugin</artifactId>
-                <version>3.1.1</version>
+                <version>3.2.1</version>
                 <executions>
                     <execution>
                         <phase>package</phase>
diff --git a/ARCHITECT/cloud-patterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/DECIDEPatterns.java b/ARCHITECT/cloud-patterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/DECIDEPatterns.java
index e74ea1978948e2cde50a9932d514ffed1a55766c..276a1f048fc9cba06a901a02ca6039bb2618223e 100644
--- a/ARCHITECT/cloud-patterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/DECIDEPatterns.java
+++ b/ARCHITECT/cloud-patterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/DECIDEPatterns.java
@@ -23,7 +23,7 @@ public class DECIDEPatterns {
 
     public static final Resource patternCategories;
 
-    public static final Resource fundamentalCategory;
+    public static final Resource basicCategory;
     public static final Resource developmentCategory;
     public static final Resource optimizationCategory;
     public static final Resource deploymentCategory;
@@ -39,7 +39,7 @@ public class DECIDEPatterns {
 
         patternCategories = m.createResource(BASE + "patterncategories");
 
-        fundamentalCategory = m.createResource(BASE + "patterncategories/fundamental");
+        basicCategory = m.createResource(BASE + "patterncategories/basic");
         developmentCategory = m.createResource(BASE + "patterncategories/development");
         optimizationCategory = m.createResource(BASE + "patterncategories/optimization");
         deploymentCategory = m.createResource(BASE + "patterncategories/deployment");
diff --git a/ARCHITECT/cloud-patterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/DP.java b/ARCHITECT/cloud-patterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/DP.java
index 5d7e9866887b7ee6c2fbd0731c1db8324c756f1f..4c5170db8fab73e32339b0e3f931f7818b03440c 100644
--- a/ARCHITECT/cloud-patterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/DP.java
+++ b/ARCHITECT/cloud-patterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/DP.java
@@ -22,15 +22,20 @@ public class DP {
 
     public static final String DP_NS = "http://decideh2020.eu/ns/patterns/";
 
+    public static final Resource Pattern;
+    public static final Resource NFR;
+
     public static final Property icon;
+    public static final Property model;
     public static final Property solution;
     public static final Property context;
     public static final Property hasImpactOn;
     public static final Property hasPositiveImpactOn;
     public static final Property hasNegativeImpactOn;
-
-    public static final Resource Pattern;
-    public static final Resource NFR;
+    public static final Property provides;
+    public static final Property requires;
+    public static final Property abstractValue;
+    public static final Property impactedNFR;
 
     static {
         Model m = ModelFactory.createDefaultModel();
@@ -38,11 +43,16 @@ public class DP {
         NFR = m.createResource(DP_NS + "NFR");
 
         icon = m.createProperty(DP_NS, "icon");
+        model = m.createProperty(DP_NS, "model");
         solution = m.createProperty(DP_NS, "solution");
         context = m.createProperty(DP_NS, "context");
         hasImpactOn = m.createProperty(DP_NS, "hasImpactOn");
         hasPositiveImpactOn = m.createProperty(DP_NS, "hasPositiveImpactOn");
         hasNegativeImpactOn = m.createProperty(DP_NS, "hasNegativeImpactOn");
+        provides = m.createProperty(DP_NS, "provides");
+        requires = m.createProperty(DP_NS, "requires");
+        abstractValue = m.createProperty(DP_NS, "abstractValue");
+        impactedNFR = m.createProperty(DP_NS, "impactedNFR");
     }
 
 }
diff --git a/ARCHITECT/cloud-patterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/PatternConverter.java b/ARCHITECT/cloud-patterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/PatternConverter.java
index fe5800e9929274d345feb669cf2a6612223b88a0..d3fc2d059a5dbffdbb2d8a904d5a27a84b310d0d 100644
--- a/ARCHITECT/cloud-patterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/PatternConverter.java
+++ b/ARCHITECT/cloud-patterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/PatternConverter.java
@@ -17,79 +17,123 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import org.apache.jena.rdf.model.Resource;
+import org.apache.jena.rdf.model.Statement;
+import org.apache.jena.rdf.model.StmtIterator;
 import org.apache.jena.sparql.vocabulary.FOAF;
 import org.apache.jena.vocabulary.DCTerms;
 
 public class PatternConverter {
 
-    public static Resource patternToResource(ObjectNode nfr) {
-        return null;
-    }
+	public static Resource patternToResource(ObjectNode nfr) {
+		return null;
+	}
 
-    public static ObjectNode patternToJson(Resource pattern) {
-        ObjectNode obj = new ObjectMapper().createObjectNode();
-        obj.put("uriRef", pattern.getURI());
-        obj.put("title", pattern.getRequiredProperty(DCTerms.title).getString());
-        if (pattern.hasProperty(DCTerms.type)) {
-            ArrayNode array = obj.putArray("categories");
-            pattern.listProperties(DCTerms.type).forEachRemaining(stmt -> array.add(stmt.getResource().getURI()));
-        }
-        if (pattern.hasProperty(DP.icon)) {
-            obj.put("icon", pattern.getPropertyResourceValue(DP.icon).getLocalName());
-        }
-        if (pattern.hasProperty(DCTerms.subject)) {
-            obj.put("subject", pattern.getProperty(DCTerms.subject).getString());
-        }
-        if (pattern.hasProperty(DCTerms.description)) {
-            obj.put("description", pattern.getProperty(DCTerms.description).getString());
-        }
-        if (pattern.hasProperty(DP.context)) {
-            obj.put("context", pattern.getProperty(DP.context).getString());
-        }
-        if (pattern.hasProperty(DP.solution)) {
-            obj.put("solution", pattern.getProperty(DP.solution).getString());
-        }
-        if (pattern.hasProperty(DCTerms.license)) {
-            obj.put("license", pattern.getPropertyResourceValue(DCTerms.license).getLocalName());
-        }
-        if (pattern.hasProperty(FOAF.page)) {
-            ObjectNode page = obj.putObject("page");
-            Resource p = pattern.getPropertyResourceValue(FOAF.page);
-            page.put("topic", p.getProperty(FOAF.topic).getString());
-            page.put("primaryTopic", p.getPropertyResourceValue(FOAF.primaryTopic).getURI());
-        }
-        if (pattern.hasProperty(DCTerms.relation)) {
-            ArrayNode array = obj.putArray("relations");
-            pattern.listProperties(DCTerms.relation).forEachRemaining(stmt -> array.add(stmt.getResource().getURI()));
-        }
-        if (pattern.hasProperty(DP.hasImpactOn)) {
-            ArrayNode array = obj.putArray("impacts");
-            pattern.listProperties(DP.hasImpactOn).forEachRemaining(stmt -> array.add(stmt.getResource().getURI()));
-        }
-        if (pattern.hasProperty(DP.hasPositiveImpactOn)) {
-            ArrayNode array = obj.putArray("positiveImpacts");
-            pattern.listProperties(DP.hasPositiveImpactOn).forEachRemaining(stmt -> array.add(stmt.getResource().getURI()));
-        }
-        if (pattern.hasProperty(DP.hasNegativeImpactOn)) {
-            ArrayNode array = obj.putArray("negativeImpacts");
-            pattern.listProperties(DP.hasNegativeImpactOn).forEachRemaining(stmt -> array.add(stmt.getResource().getURI()));
-        }
-        return obj;
-    }
+	public static ObjectNode patternToJson(Resource pattern) {
+		ObjectNode obj = new ObjectMapper().createObjectNode();
+		obj.put("uriRef", pattern.getURI());
+		obj.put("title", pattern.getRequiredProperty(DCTerms.title).getString());
+		if (pattern.hasProperty(DCTerms.type)) {
+			ArrayNode array = obj.putArray("categories");
+			pattern.listProperties(DCTerms.type).forEachRemaining(stmt -> array.add(stmt.getResource().getURI()));
+		}
+		if (pattern.hasProperty(DP.icon)) {
+			obj.put("icon", pattern.getPropertyResourceValue(DP.icon).getLocalName());
+		}
+		if (pattern.hasProperty(DP.model)) {
+			obj.put("model", pattern.getPropertyResourceValue(DP.model).getLocalName());
+		}
+		if (pattern.hasProperty(DCTerms.subject)) {
+			obj.put("subject", pattern.getProperty(DCTerms.subject).getString());
+		}
+		if (pattern.hasProperty(DCTerms.description)) {
+			obj.put("description", pattern.getProperty(DCTerms.description).getString());
+		}
+		if (pattern.hasProperty(DP.context)) {
+			obj.put("context", pattern.getProperty(DP.context).getString());
+		}
+		if (pattern.hasProperty(DP.solution)) {
+			obj.put("solution", pattern.getProperty(DP.solution).getString());
+		}
+		if (pattern.hasProperty(DCTerms.license)) {
+			obj.put("license", pattern.getPropertyResourceValue(DCTerms.license).getURI());
+		}
+		if (pattern.hasProperty(FOAF.page)) {
+			ObjectNode page = obj.putObject("page");
+			Resource p = pattern.getPropertyResourceValue(FOAF.page);
+			page.put("topic", p.getProperty(FOAF.topic).getString());
+			page.put("primaryTopic", p.getPropertyResourceValue(FOAF.primaryTopic).getURI());
+		}
+		if (pattern.hasProperty(DCTerms.relation)) {
+			ArrayNode array = obj.putArray("relations");
+			pattern.listProperties(DCTerms.relation).forEachRemaining(stmt -> array.add(stmt.getResource().getURI()));
+		}
+		if (pattern.hasProperty(DP.hasImpactOn)) {
+			ArrayNode array = obj.putArray("impacts");
+			pattern.listProperties(DP.hasImpactOn).forEachRemaining(stmt -> array.add(stmt.getResource().getURI()));
+		}
+		if (pattern.hasProperty(DP.hasPositiveImpactOn)) {
+			ArrayNode array = obj.putArray("positiveImpacts");
+			pattern.listProperties(DP.hasPositiveImpactOn)
+					.forEachRemaining(stmt -> array.add(stmt.getResource().getURI()));
+		}
+		if (pattern.hasProperty(DP.hasNegativeImpactOn)) {
+			ArrayNode array = obj.putArray("negativeImpacts");
+			pattern.listProperties(DP.hasNegativeImpactOn)
+					.forEachRemaining(stmt -> array.add(stmt.getResource().getURI()));
+		}
+		if (pattern.hasProperty(DP.provides)) {
+			ArrayNode array = obj.putArray("provides");
+			for (StmtIterator iter = pattern.listProperties(DP.provides); iter.hasNext();) {
+				Statement stmt = iter.nextStatement();
+				Resource res = stmt.getResource();
+				ObjectNode tobj = new ObjectMapper().createObjectNode();
+				if (res.hasProperty(DP.impactedNFR)) {
+					tobj.put("impactedNFR", res.getProperty(DP.impactedNFR).getResource().getURI());
+				}
+//				if (res.hasProperty(DP.NFR)) {
+//					tobj.put("NFR", res.getProperty(DP.NFR).getString());
+//				}
+				if (res.hasProperty(DP.abstractValue)) {
+					tobj.put("abstractValue", res.getProperty(DP.abstractValue).getString());
+				}
+				array.add(tobj);
+			}
+		}
+		if (pattern.hasProperty(DP.requires)) {
+			ArrayNode array = obj.putArray("provides");
+			for (StmtIterator iter = pattern.listProperties(DP.provides); iter.hasNext();) {
+				Statement stmt = iter.nextStatement();
+				Resource res = stmt.getResource();
+				ObjectNode tobj = new ObjectMapper().createObjectNode();
+				if (res.hasProperty(DP.impactedNFR)) {
+					tobj.put("impactedNFR", res.getProperty(DP.impactedNFR).getResource().getURI());
+				}
+//				if (res.hasProperty(DP.NFR)) {
+//					tobj.put("NFR", res.getProperty(DP.NFR).getString());
+//				}
+				if (res.hasProperty(DP.abstractValue)) {
+					tobj.put("abstractValue", res.getProperty(DP.abstractValue).getString());
+				}
+				array.add(tobj);
+			}
+		}
+		return obj;
+	}
 
-    public static ObjectNode patternToJsonReduced(Resource pattern) {
-        ObjectNode obj = new ObjectMapper().createObjectNode();
-        obj.put("uriRef", pattern.getURI());
-        obj.put("title", pattern.getRequiredProperty(DCTerms.title).getString());
-        if (pattern.hasProperty(DCTerms.type)) {
-            ArrayNode array = obj.putArray("categories");
-            pattern.listProperties(DCTerms.type).forEachRemaining(stmt -> array.add(stmt.getResource().getURI()));
-        }
-        if (pattern.hasProperty(DP.hasPositiveImpactOn)) {
-            ArrayNode array = obj.putArray("positiveImpacts");
-            pattern.listProperties(DP.hasPositiveImpactOn).forEachRemaining(stmt -> array.add(stmt.getResource().getURI()));
-        }
-        return obj;
-    }
+	public static ObjectNode patternToJsonReduced(Resource pattern) {
+		ObjectNode obj = new ObjectMapper().createObjectNode();
+		obj.put("uriRef", pattern.getURI());
+		obj.put("title", pattern.getRequiredProperty(DCTerms.title).getString());
+		if (pattern.hasProperty(DCTerms.type)) {
+			ArrayNode array = obj.putArray("categories");
+			pattern.listProperties(DCTerms.type).forEachRemaining(stmt -> array.add(stmt.getResource().getURI()));
+		}
+		if (pattern.hasProperty(DP.hasPositiveImpactOn)) {
+			ArrayNode array = obj.putArray("positiveImpacts");
+			pattern.listProperties(DP.hasPositiveImpactOn)
+					.forEachRemaining(stmt -> array.add(stmt.getResource().getURI()));
+		}
+		return obj;
+	}
 
 }
diff --git a/ARCHITECT/cloud-patterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/Patterns.java b/ARCHITECT/cloud-patterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/Patterns.java
index ada7d34e197434fe50fbb153e44e1b6c95bb40b4..9be68109409f0f2208c21aaca4246c5684388c96 100644
--- a/ARCHITECT/cloud-patterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/Patterns.java
+++ b/ARCHITECT/cloud-patterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/Patterns.java
@@ -28,6 +28,8 @@ public interface Patterns {
     List<Resource> query(String queryString);
 
     List<Resource> listPatterns();
+    
+    List<ObjectNode> listPatternsJson();
 
     List<ObjectNode> getPatternsByCategory(String type);
 
@@ -35,7 +37,7 @@ public interface Patterns {
 
     Resource getPattern(String uri);
 
-    ObjectNode getPatternAsJson(String uri);
+    ObjectNode getPatternJson(String uri);
 
     Resource getNFR(String uri);
 
@@ -43,6 +45,8 @@ public interface Patterns {
 
     List<Resource> listNFRs();
 
+    List<ObjectNode> listNFRsJson();
+
     List<Resource> inferPatterns(List<Resource> nfrs);
 
     List<ObjectNode> inferPatternsJson(List<ObjectNode> nfrs);
diff --git a/ARCHITECT/cloud-patterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/PatternsImpl.java b/ARCHITECT/cloud-patterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/PatternsImpl.java
index c7c85563c1cd2a7698a627ce41878a20341187d0..349a5100a461f89d14d85b3892478248d7957470 100644
--- a/ARCHITECT/cloud-patterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/PatternsImpl.java
+++ b/ARCHITECT/cloud-patterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/PatternsImpl.java
@@ -13,6 +13,7 @@
  */
 package eu.DECIDEh2020.architect.cloudpatterns;
 
+import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import org.apache.jena.query.*;
 import org.apache.jena.rdf.model.Model;
@@ -55,6 +56,12 @@ class PatternsImpl implements Patterns {
         return patternsModel.listResourcesWithProperty(RDF.type, DP.Pattern).toList();
     }
 
+    @Override
+    public List<ObjectNode> listPatternsJson() {
+        List<Resource> patterns = listPatterns();
+        return patterns.stream().map(PatternConverter::patternToJson).collect(Collectors.toList());
+    }
+
     @Override
     public List<Resource> getPatternsByCategory(Resource type) {
         Resource res = patternsModel.getResource(type.getURI());
@@ -71,7 +78,7 @@ class PatternsImpl implements Patterns {
     public List<ObjectNode> getPatternsByCategory(String category) {
         Resource res = patternsModel.getResource(DECIDEPatterns.BASE + "patterncategories/" + category);
         List<Resource> patterns = getPatternsByCategory(res);
-        return patterns.stream().map(PatternConverter::patternToJsonReduced).collect(Collectors.toList());
+        return patterns.stream().map(PatternConverter::patternToJson).collect(Collectors.toList());
     }
 
     @Override
@@ -80,7 +87,7 @@ class PatternsImpl implements Patterns {
     }
 
     @Override
-    public ObjectNode getPatternAsJson(String uri) {
+    public ObjectNode getPatternJson(String uri) {
         return PatternConverter.patternToJson(patternsModel.getResource(uri));
     }
 
@@ -100,10 +107,17 @@ class PatternsImpl implements Patterns {
         return patternsModel.listResourcesWithProperty(RDF.type, DP.NFR).toList();
     }
 
+    @Override
+    public List<ObjectNode> listNFRsJson() {
+        List<Resource> nfrs = listNFRs();
+        return nfrs.stream().map(NFRConverter::nfrToJson).collect(Collectors.toList());
+        
+    }
+
     @Override
     public List<Resource> inferPatterns(List<Resource> nfrs) {
         // list all patterns that have an positive impact on these nfrs.
-        // we should leave out fundamentals!
+        // we should leave out basics!
         StringBuffer buffer = new StringBuffer("select ?pattern where { ?pattern <http://decideh2020.eu/ns/patterns/hasPositiveImpactOn> ?nfr . filter ( ?nfr in (");
         nfrs.forEach(nfr -> {
             buffer.append("<");
@@ -111,14 +125,15 @@ class PatternsImpl implements Patterns {
             buffer.append(">, ");
         });
         buffer.setLength(buffer.length() - 2);
-        buffer.append(") && not exists { ?pattern <http://purl.org/dc/terms/type> <http://decideh2020.eu/resources/patterncategories/fundamental> } ) }");
+        buffer.append(") && not exists { ?pattern <http://purl.org/dc/terms/type> <http://decideh2020.eu/resources/patterncategories/basic> } ) }");
         Query query = QueryFactory.create(buffer.toString());
         return execute(query);
     }
 
+    @Override
     public List<Resource> inferBadPatterns(List<Resource> nfrs) {
         // list all patterns that have a negative impact on these nfrs.
-        // we should probably NOT leave out fundamentals!
+        // we should probably NOT leave out basics!
         StringBuffer buffer = new StringBuffer("select ?pattern where { ?pattern <http://decideh2020.eu/ns/patterns/hasNegativeImpactOn> ?nfr . filter ( ?nfr in (");
         nfrs.forEach(nfr -> {
             buffer.append("<");
@@ -133,9 +148,42 @@ class PatternsImpl implements Patterns {
 
     @Override
     public List<ObjectNode> inferPatternsJson(List<ObjectNode> nfrs) {
-        List<Resource> nfrResources = nfrs.stream().map(nfr -> this.getNFR(nfr.get("type").asText())).collect(Collectors.toList());
-        List<Resource> patterns = inferPatterns(nfrResources);
-        return patterns.stream().map(PatternConverter::patternToJsonReduced).collect(Collectors.toList());
+    	List<ObjectNode> result = new ArrayList<ObjectNode>();
+
+    	//infer patterns
+    	List<ObjectNode> patterns = listPatternsJson();
+    	for(ObjectNode nfr : nfrs) {
+    		for (ObjectNode pattern : patterns) {
+    			if (pattern.hasNonNull("provides")) {
+    				for (JsonNode prov : pattern.get("provides")) {
+    					String one = this.getNFR(nfr.get("type").asText()).getURI();
+    					String two = prov.get("impactedNFR").asText();
+    					if (this.getNFR(nfr.get("type").asText()).getURI().equalsIgnoreCase(prov.get("impactedNFR").asText())) {
+    						//TODO operand logic
+    						//for now is equal only
+    						if (nfr.get("abstractValue").asText().equalsIgnoreCase(prov.get("abstractValue").asText())) {
+    							result.add(pattern);
+    							break;
+    						}
+    					}
+    				}
+    			}
+    		}
+    	}
+    	
+    	//get basic patterns
+    	List<ObjectNode> basic = getPatternsByCategory("basic");
+    	
+    	//merge and return result
+    	result.addAll(basic);
+    	return result;
+    	
+    	
+    	
+//    	old stuff
+//    	List<Resource> nfrResources = nfrs.stream().map(nfr -> this.getNFR(nfr.get("type").asText())).collect(Collectors.toList());
+//        List<Resource> patterns = inferPatterns(nfrResources);
+//        return patterns.stream().map(PatternConverter::patternToJsonReduced).collect(Collectors.toList());
     }
 
     private List<Resource> execute(Query query) {
diff --git a/ARCHITECT/cloud-patterns/src/main/resources/patterns/decide-patterns.ttl b/ARCHITECT/cloud-patterns/src/main/resources/patterns/decide-patterns.ttl
index 1e21cb8bea040d94f676d255a20773a49ddb0d35..e841179556e9aedce40f4ace2ab9ae5472b35cdf 100644
--- a/ARCHITECT/cloud-patterns/src/main/resources/patterns/decide-patterns.ttl
+++ b/ARCHITECT/cloud-patterns/src/main/resources/patterns/decide-patterns.ttl
@@ -8,6 +8,7 @@
 #
 # Contributors:
 # Simon Dutkowski Fraunhofer FOKUS
+# Kyriakos Stefanidis Fraunhofer FOKUS
 #
 # Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
 #
@@ -24,10 +25,10 @@
 	a skos:ConceptScheme;
 	rdfs:label "Cloud Pattern Categories"@en .
 
-<http://decideh2020.eu/resources/patterncategories/fundamental>
+<http://decideh2020.eu/resources/patterncategories/basic>
 	a skos:Concept;
 	skos:inScheme <http://decideh2020.eu/resources/patterncategories>;
-	skos:prefLabel "Fundamental Pattern"@en .
+	skos:prefLabel "Basic Pattern"@en .
 
 <http://decideh2020.eu/resources/patterncategories/development>
 	a skos:Concept;
@@ -77,8 +78,9 @@
 <distributed-application>
 	a dp:Pattern;
 	dct:title "Distributed Application"@en;
-	dct:type <http://decideh2020.eu/resources/patterncategories/fundamental>;
+	dct:type <http://decideh2020.eu/resources/patterncategories/basic>;
 	dp:icon <urn:distributed_application.png>;
+	dp:model <urn:distributed_application.png>;
 	dct:subject "Why to decompose application functionality into multiple, independent application components?"@en;
 	dct:description "Divide application functionality among multiple application components - each can then be scaled out independently (among different cloud providers)."@en;
 	dp:context
@@ -97,8 +99,9 @@
 <two-tier-cloud-application>
 	a dp:Pattern;
 	dct:title "Two-Tier Cloud Application"@en;
-	dct:type <http://decideh2020.eu/resources/patterncategories/fundamental>;
+	dct:type <http://decideh2020.eu/resources/patterncategories/basic>;
 	dp:icon <urn:two_tier_cloud_application.png>;
+	dp:model <urn:two_tier_cloud_application.png>;
 	dct:subject "Why separate a cloud application into stateful (data handling) and stateless components?"@en;
 	dct:description
 	"Presentation and business logic is bundled into one stateless tier that is easy to scale independently. This tier is separated from the data tier that is harder to scale and often handled by a provider-supplied storage offering."@en;
@@ -125,8 +128,9 @@
 <three-tier-cloud-application>
 	a dp:Pattern;
 	dct:title "Three-Tier Cloud Application"@en;
-	dct:type <http://decideh2020.eu/resources/patterncategories/fundamental>;
+	dct:type <http://decideh2020.eu/resources/patterncategories/basic>;
 	dp:icon <urn:three_tier_cloud_application.png>;
+	dp:model <urn:three_tier_cloud_application.png>;
 	dct:subject "When to decompose presentation logic, business logic, and data handling into three separate tiers that can be scaled independently?"@en;
 	dct:description
 	"The presentation logic, business logic, and data handling are realized as separate tiers to handle stateless presentation and compute-intensive processing independently of the data tier, which is harder to scale and often handled by the cloud provider."@en;
@@ -150,8 +154,9 @@
 <loose-coupling>
 	a dp:Pattern;
 	dct:title "Loose Coupling"@en;
-	dct:type <http://decideh2020.eu/resources/patterncategories/fundamental>;
+	dct:type <http://decideh2020.eu/resources/patterncategories/basic>;
 	dp:icon <urn:loose_coupling.png>;
+	dp:model <urn:loose_coupling.png>;
 	dct:subject "How can dependencies between Distributed Applications and between individual components of these applications be reduced?"@en;
 	dct:description
 	"Information exchange between applications and their individual components as well as associated management tasks, such as scaling, failure handling, or update management can be simplified significantly if application components can be treated individually and the dependencies among them are kept to a minimum."@en;
@@ -175,8 +180,9 @@
 <managed-configuration>
 	a dp:Pattern;
 	dct:title "Managed Configuration"@en;
-	dct:type <http://decideh2020.eu/resources/patterncategories/fundamental>;
+	dct:type <http://decideh2020.eu/resources/patterncategories/basic>;
 	dp:icon <urn:managed_configuration.png>;
+	dp:model <urn:managed_configuration.png>;
 	dct:subject "How can the configuration of scaled out application component instances be controlled in a coordinated fashion?"@en;
 	dct:description "Scaled-out application components should use a centrally stored configuration to provide a unified behavior that can be adjusted simultaneously."@en;
 	dp:context
@@ -194,22 +200,12 @@
 	dct:relation <provider-adapter>;
 	dct:relation <watchdog> .
 
-<containerization>
-	a dp:Pattern;
-	dct:title "Containerization"@en;
-	dct:type <http://decideh2020.eu/resources/patterncategories/fundamental>;
-	dct:subject "How can an environment be provided with maximum support for services with high-performance recovery and scalability requirements?"@en;
-	dct:description
-	"Container-based solutions provide the important benefit of cost savings because containers are a solution to deployment problems caused by the lack of dependencies in production environments. Containers significantly improve DevOps and production operations."@en;
-	dp:context "A container management system or container engine is used for the deployment and operation of containers."@en;
-	dp:solution
-	"Services deployed on bare metal or virtual servers can impose a significant footprint. Virtualization improves portability but introduces a layer of intermediate processing that can further increase the footprint. Monolithic solution deployments can lead to widespread reduced performance and availability when any one service or solution component suffers an outage or a runtime exception. Services are deployed independently, or together with composed services, as autonomous units that are packaged into independently manageable and autonomous container images, each of which includes the services� underlying system dependencies. Tooling is provided to manage the building, deploying and operating of the containers."@en;
-	.
-
 <service-registry>
 	a dp:Pattern;
 	dct:title "Service Registry"@en;
-	dct:type <http://decideh2020.eu/resources/patterncategories/fundamental>;
+	dct:type <http://decideh2020.eu/resources/patterncategories/basic>;
+	dp:icon <urn:service_registry.png>;
+	dp:model <urn:service_registry.png>;
 	dct:subject "How are services packaged and deployed?"@en;
 	dct:description
 	"Implement a service registry, which is a database of services, their instances and their locations. Service instances are registered with the service registry on start-up and deregistered on shutdown. Client of the service and/or routers query the service registry to find the available instances of a service. A service registry might invoke a service instance�s health check API to verify that it is able to handle requests."@en;
@@ -229,6 +225,7 @@
 	dct:type <http://decideh2020.eu/resources/patterncategories/optimization>;
 	dp:hasPositiveImpactOn <availability>;
 	dp:icon <urn:provider_adapter.png>;
+	dp:model <urn:provider_adapter.png>;
 	dct:subject "How can the dependencies of an application component on a provider-specific interface be managed?"@en;
 	dct:description
 	"Provider interfaces are encapsulated and mapped to unified interfaces used in applications to separate concerns of interactions with the provider from application functionality."@en;
@@ -242,6 +239,10 @@
 		foaf:topic "Provider Adapter";
 		foaf:primaryTopic <http://www.cloudcomputingpatterns.org/provider_adapter/>;
 	];
+	dp:provides [
+		dp:impactedNFR <availability>;
+		dp:abstractValue "high";
+	];
 	dct:relation <data-access-component>;
 	dct:relation <managed-configuration>;
 	dct:relation <elasticity-manager>;
@@ -257,6 +258,7 @@
 	dp:hasPositiveImpactOn <scalability>;
 	dp:hasPositiveImpactOn <performance>;
 	dp:icon <urn:elasticity_manager.png>;
+	dp:model <urn:elasticity_manager.png>;
 	dct:subject "How can the number of required application component instances be determined based on the utilization of hosting IT resources?"@en;
 	dct:description
 	"The utilization of IT resources on which an elastically scaled-out application is hosted, for example, virtual servers is used to determine the number of required application component instances."@en;
@@ -270,6 +272,14 @@
 		foaf:topic "Elasticity Manager";
 		foaf:primaryTopic <http://www.cloudcomputingpatterns.org/elasticity_manager/>;
 	];
+	dp:provides [
+		dp:impactedNFR <scalability>;
+		dp:abstractValue "high";
+	];
+	dp:provides [
+		dp:impactedNFR <performance>;
+		dp:abstractValue "high";
+	];
 	dct:relation <elastic-load-balancer>;
 	dct:relation <elastic-queue>;
 	dct:relation <provider-adapter>;
@@ -281,6 +291,7 @@
 	dct:type <http://decideh2020.eu/resources/patterncategories/optimization>;
 	dp:hasPositiveImpactOn <availability>;
 	dp:icon <urn:resiliency_management_process.png>;
+	dp:model <urn:resiliency_management_process.png>;
 	dct:subject "How can the overall availability of an application be ensured automatically even if individual application component instances fail?"@en;
 	dct:description "Application components are checked for failures and replaced automatically without human intervention."@en;
 	dp:context
@@ -293,6 +304,10 @@
 		foaf:topic "Provider Adapter";
 		foaf:primaryTopic <http://www.cloudcomputingpatterns.org/resiliency_management_process/>;
 	];
+	dp:provides [
+		dp:impactedNFR <availability>;
+		dp:abstractValue "high";
+	];
 	dct:relation <statless-component>;
 	dct:relation <elasticity-managment-process>;
 	.
@@ -303,6 +318,8 @@
 	dct:type <http://decideh2020.eu/resources/patterncategories/optimization>;
 	dp:hasPositiveImpactOn <availability>;
 	dp:hasPositiveImpactOn <performance>;
+	dp:icon <urn:elastic_load_balancer.png>;
+	dp:model <urn:elastic_load_balancer.png>;
 	dp:solution
 	"Based on the number of synchronous requests handled by a load balancer and possibly other utilization information, the required number of required component instances is determined."@en;
 	dp:context
@@ -315,6 +332,14 @@
 		foaf:topic "Elastic Load Balancer";
 		foaf:primaryTopic <http://www.cloudcomputingpatterns.org/elastic_load_balancer/>;
 	];
+	dp:provides [
+		dp:impactedNFR <availability>;
+		dp:abstractValue "high";
+	];
+	dp:provides [
+		dp:impactedNFR <performance>;
+		dp:abstractValue "high";
+	];
 	dct:relation <statless-component>;
 	dct:relation <watchdog>;
 	dct:relation <provider-adapter>; .
@@ -326,6 +351,7 @@
 	dp:hasPositiveImpactOn <scalability>;
 	dp:hasPositiveImpactOn <performance>;
 	dp:icon <urn:elastic_queue.png>;
+	dp:model <urn:elastic_queue.png>;
 	dct:subject "How can the number of required application component instances be adjusted based on monitored asynchronous accesses?"@en;
 	dct:description "The number of asynchronous accesses via messaging to an elastically scaled-out application is used to adjust the number of required application component instances."@en;
 	dp:solution
@@ -336,7 +362,16 @@
 	foaf:page [
 		a foaf:Document;
 		foaf:topic "Elastic Load Balancer";
-		foaf:primaryTopic <http://www.cloudcomputingpatterns.org/elastic_queue/>; ];
+		foaf:primaryTopic <http://www.cloudcomputingpatterns.org/elastic_queue/>; 
+	];
+	dp:provides [
+		dp:impactedNFR <scalability>;
+		dp:abstractValue "high";
+	];
+	dp:provides [
+		dp:impactedNFR <performance>;
+		dp:abstractValue "high";
+	];
 	dct:relation <elasticity-management-process>;
 	dct:relation <statless-componenet>;
 	dct:relation <watchdog>;
@@ -348,6 +383,7 @@
 	dct:type <http://decideh2020.eu/resources/patterncategories/development>;
 	dp:hasPositiveImpactOn <scalability>;
 	dp:icon <urn:stateless_component.png>;
+	dp:model <urn:stateless_component.png>;
 	dct:subject "How to increase an application component's elasticity and robustness?"@en;
 	dct:description "The application's state is detached from the application's functionality to ease scaling-out and make the application more tolerant towards component failures."@en;
 	dp:context
@@ -360,6 +396,10 @@
 		foaf:topic "Stateless Component Pattern";
 		foaf:primaryTopic <http://www.cloudcomputingpatterns.org/stateless_component/>;
 	];
+	dp:provides [
+		dp:impactedNFR <scalability>;
+		dp:abstractValue "high";
+	];
 	dct:relation <relational-database>;
 	dct:relation <distributed-application>;
 	dct:relation <key-value-storage>;
@@ -375,6 +415,7 @@
 	dct:title "Data Access Component"@en;
 	dct:type <http://decideh2020.eu/resources/patterncategories/development>;
 	dp:icon <urn:data_access_component.png>;
+	dp:model <urn:data_access_component.png>;
 	dct:subject "How can the complexity of data storage due to access protocols and data consistency be hidden and isolated while ensuring data structure configurability?"@en;
 	dct:description
 	"Functionality to store and access data elements is provided by special components that isolate complexity of data access, enable additional data consistency, and ensure adjustability of handled data elements to meet different customer requirements."@en;
@@ -386,7 +427,8 @@
 	foaf:page [
 		a foaf:Document;
 		foaf:topic "Data Access Component";
-		foaf:primaryTopic <http://www.cloudcomputingpatterns.org/data_access_component/>; ];
+		foaf:primaryTopic <http://www.cloudcomputingpatterns.org/data_access_component/>; 
+	];
 	dct:relation <provider-adapter>;
 	dct:relation <compliant-data-replication>; .
 
@@ -396,6 +438,7 @@
 	dct:type <http://decideh2020.eu/resources/patterncategories/deployment>;
 	dp:hasPositiveImpactOn <location>;
 	dp:icon <urn:compliant_data_replication.png>;
+	dp:model <urn:compliant_data_replication.png>;
 	dct:subject "How can data be replicated between environments if some environments may only handle subsets of the data due to laws and corporate regulations?"@en;
 	dct:description
 	"Data is replicated among multiple environments that may handle different data subsets. During replication data is obfuscated and deleted depending on laws and security regulations. Data updates are adjusted automatically to reflect the different data structures handled by environments."@en;
@@ -407,7 +450,12 @@
 	foaf:page [
 		a foaf:Document;
 		foaf:topic "Compliant Data Replication";
-		foaf:primaryTopic <http://www.cloudcomputingpatterns.org/compliant_data_replication/>; ]; .
+		foaf:primaryTopic <http://www.cloudcomputingpatterns.org/compliant_data_replication/>; 
+	];
+	dp:provides [
+		dp:impactedNFR <location>;
+		dp:abstractValue "cross border";
+	]; .
 
 <user-interface-component>
 	a dp:Pattern;
@@ -415,6 +463,7 @@
 	dct:type <http://decideh2020.eu/resources/patterncategories/development>;
 	dp:hasPositiveImpactOn <availability>;
 	dp:icon <urn:user_interface_component.png>;
+	dp:model <urn:user_interface_component.png>;
 	dct:subject "How can User Interface Components be accessed interactively by humans while being configurable and decoupled from the remaining application?"@en;
 	dct:description
 	"Interactive synchronous access to applications is provided to humans, while application-internal interaction is realized asynchronously when possible to ensure Loose Coupling. Furthermore, the user interface should be customizable to be used by different customers."@en;
@@ -426,7 +475,12 @@
 	foaf:page [
 		a foaf:Document;
 		foaf:topic "User Interface Component";
-		foaf:primaryTopic <http://www.cloudcomputingpatterns.org/user_interface_component/>; ];
+		foaf:primaryTopic <http://www.cloudcomputingpatterns.org/user_interface_component/>; 
+	];
+	dp:provides [
+		dp:impactedNFR <availability>;
+		dp:abstractValue "high";
+	];
 	dct:relation <elastic-load-balancer>;
 	dct:relation <managed-configuration>; .
 
@@ -436,6 +490,7 @@
 	dct:type <http://decideh2020.eu/resources/patterncategories/development>;
 	dp:hasPositiveImpactOn <scalability>;
 	dp:icon <urn:processing_component.png>;
+	dp:model <urn:processing_component.png>;
 	dct:subject "How can processing be scaled out elastically among distributed resources while being configurable regarding the supported functions to meet different customers requirements?"@en;
 	dct:description
 	"Possibly long running processing functionality is handled by separate components to enable elastic scaling. Processing functionality is further made configurable to support different customer requirements."@en;
@@ -447,7 +502,12 @@
 	foaf:page [
 		a foaf:Document;
 		foaf:topic "Processing Component";
-		foaf:primaryTopic <http://www.cloudcomputingpatterns.org/processing_component/>; ];
+		foaf:primaryTopic <http://www.cloudcomputingpatterns.org/processing_component/>; 
+	];
+	dp:provides [
+		dp:impactedNFR <scalability>;
+		dp:abstractValue "high";
+	];
 	dct:relation <user-interface-component>;
 	dct:relation <data-access-component>;
 	dct:relation <managed-configuration> .
@@ -457,7 +517,8 @@
 	dct:title "Content Distribution Network"@en;
 	dct:type <http://decideh2020.eu/resources/patterncategories/deployment>;
 	dp:hasPositiveImpactOn <performance>;
-	dp:icon <urn:content_distribution_network/.png>;
+	dp:icon <urn:content_distribution_network.png>;
+	dp:model <urn:content_distribution_network.png>;
 	dct:subject ""@en;
 	dct:description "Applications component instances and data handled by them are globally distributed to meet the access performance required by a global user group."@en;
 	dp:solution
@@ -468,7 +529,12 @@
 	foaf:page [
 		a foaf:Document;
 		foaf:topic "Content Distribution Network";
-		foaf:primaryTopic <http://www.cloudcomputingpatterns.org/content_distribution_network/>; ]; .
+		foaf:primaryTopic <http://www.cloudcomputingpatterns.org/content_distribution_network/>; 
+	];
+	dp:provides [
+		dp:impactedNFR <performance>;
+		dp:abstractValue "high";
+	]; .
 
 <hybrid-user-interface>
 	a dp:Pattern;
@@ -477,6 +543,7 @@
 	dct:type <http://decideh2020.eu/resources/patterncategories/development>;
 	dp:hasPositiveImpactOn <scalability>;
 	dp:icon <urn:hybrid_user_interface.png>;
+	dp:model <urn:hybrid_user_interface.png>;
 	dct:subject "How can a user interface for asynchronous interaction be hosted in a cloud while being integrated with an application otherwise hosted in a static data center?"@en;
 	dct:description
 	"Varying workload from a user group interacting asynchronously with an application is handled in an elastic environment while the remainder of an application resides in a static environment."@en;
@@ -488,7 +555,12 @@
 	foaf:page [
 		a foaf:Document;
 		foaf:topic "Hybrid User Interface";
-		foaf:primaryTopic <http://www.cloudcomputingpatterns.org/hybrid_user_interface/>; ];
+		foaf:primaryTopic <http://www.cloudcomputingpatterns.org/hybrid_user_interface/>; 
+	];
+	dp:provides [
+		dp:impactedNFR <scalability>;
+		dp:abstractValue "high";
+	];
 	dct:relation <hybrid-processing>;
 	dct:relation <hybrid-backend>;
 	dct:relation <statless-component>;
@@ -501,6 +573,7 @@
 	dct:type <http://decideh2020.eu/resources/patterncategories/development>;
 	dp:hasPositiveImpactOn <scalability>;
 	dp:icon <urn:hybrid_processing.png>;
+	dp:model <urn:hybrid_processing.png>;
 	dct:subject "How can Processing Components that experiences varying workload be hosted in an elastic cloud while the remainder of an application is hosted in a static data center?"@en;
 	dct:description "Processing functionality that experiences varying workload is hosted in an elastic cloud while the remainder of an application resides in a static environment."@en;
 	dp:solution
@@ -511,7 +584,12 @@
 	foaf:page [
 		a foaf:Document;
 		foaf:topic "Hybrid Processing";
-		foaf:primaryTopic <http://www.cloudcomputingpatterns.org/hybrid_processing/>; ];
+		foaf:primaryTopic <http://www.cloudcomputingpatterns.org/hybrid_processing/>; 
+	];
+	dp:provides [
+		dp:impactedNFR <scalability>;
+		dp:abstractValue "high";
+	];
 	dct:relation <hybrid-backend>;
 	dct:relation <processing-component>;
 	dct:relation <three-tier-cloud-application>; .
@@ -523,6 +601,7 @@
 	dct:type <http://decideh2020.eu/resources/patterncategories/development>;
 	dp:hasPositiveImpactOn <scalability>;
 	dp:icon <urn:hybrid_data.png>;
+	dp:model <urn:hybrid_data.png>;
 	dct:subject "How can a data handling functionality that experiences varying workload be hosted in an elastic cloud while the rest of the application is located in a static data center?"@en;
 	dct:description "Data of varying size is hosted in an elastic cloud while the remainder of an application resides in a static environment."@en;
 	dp:solution
@@ -535,6 +614,10 @@
 		foaf:topic "Hybrid Data";
 		foaf:primaryTopic <http://www.cloudcomputingpatterns.org/hybrid_data/>;
 	];
+	dp:provides [
+		dp:impactedNFR <scalability>;
+		dp:abstractValue "high";
+	];
 	dct:relation <hybrid-backend>;
 	dct:relation <content-distribution-network>;
 	dct:relation <data-access-component>; .
@@ -546,6 +629,7 @@
 	dct:type <http://decideh2020.eu/resources/patterncategories/development>;
 	dp:hasPositiveImpactOn <scalability>;
 	dp:icon <urn:hybrid_backup/png>;
+	dp:model <urn:hybrid_backup/png>;
 	dct:subject "How can data be archived in a remote environment while the remainder of the application is hosted in a static environment?"@en;
 	dct:description "Data is periodically extracted from an application to be archived in an elastic cloud for disaster recovery purposes."@en;
 	dp:solution
@@ -558,6 +642,10 @@
 		foaf:topic "Hybrid Backup";
 		foaf:primaryTopic <http://www.cloudcomputingpatterns.org/hybrid_backup/>;
 	];
+	dp:provides [
+		dp:impactedNFR <scalability>;
+		dp:abstractValue "high";
+	];
 	dct:relation <hybrid-data>;
 	dct:relation <compliant-data-replication>; .
 
@@ -568,6 +656,7 @@
 	dct:type <http://decideh2020.eu/resources/patterncategories/development>;
 	dp:hasPositiveImpactOn <scalability>;
 	dp:icon <urn:hybrid_backend.png>;
+	dp:model <urn:hybrid_backend.png>;
 	dct:subject
 	"How can Processing Components that experience varying workload and need access to large amounts of data be hosted in an elastic environment while the remainder of the application is hosted in a static environment?"@en;
 	dct:description
@@ -582,7 +671,700 @@
 		foaf:topic "Hybrid Backend";
 		foaf:primaryTopic <http://www.cloudcomputingpatterns.org/hybrid_backend/>;
 	];
+	dp:provides [
+		dp:impactedNFR <scalability>;
+		dp:abstractValue "high";
+	];
 	dct:relation <three-tier-cloud-application>;
 	dct:relation <two-tier-cloud-application>;
 	dct:relation <hybrid-processing>;
-	dct:relation <compliant-data-replication>; .
\ No newline at end of file
+	dct:relation <compliant-data-replication>; .
+	
+<leader-node-election>
+	a dp:Pattern;
+	dct:title "Leader Node Election"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/development>;
+	dp:hasPositiveImpactOn <scalability>;
+	dp:icon <urn:leader_node_election.png>;
+	dp:model <urn:leader_node_election.png>;
+	dct:subject
+	"How can multiple instances of the same cloud service be coordinated to complete a greater task?"@en;
+	dct:description
+	"Sometimes the completion of a task requires the involvement of multiple instances of the same cloud service. If the service consumer invoking the cloud service instances does not have the necessary logic to coordinate them, runtime exceptions can occur leading to data corruption and failure to complete the task."@en;
+	dp:solution
+	"A reliable leader election mechanism is utilized, isolated from the cloud service runtime to elect the leader node."@en;
+	dp:context
+	"One of the invoked cloud service instances is designated as the leader node, responsible for aggregating the other cloud service instances in a coordinated effort to complete the task."@en;
+	dct:license <unknown>;
+	foaf:page [
+		a foaf:Document;
+		foaf:topic "Leader Node Election";
+		foaf:primaryTopic <http://cloudpatterns.org/design_patterns/leader_node_election>;
+	];
+	dp:provides [
+		dp:impactedNFR <scalability>;
+		dp:abstractValue "high";
+	]; .
+
+<cloud-key-management>
+	a dp:Pattern;
+	dct:title "Cloud Key Management"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/development>;
+	dp:hasPositiveImpactOn <scalability>;
+	dp:icon <urn:cloud_key_management.png>;
+	dp:model <urn:cloud_key_management.png>;
+	dct:subject
+	"How can encryption keys be effectively managed for a cloud environment?"@en;
+	dct:description
+	"While encryption is foundational to cloud security, the management of encryption keys is one of the most difficult challenges in cloud computing. Failure to adequately manage encryption keys can lead to a range of administrative and security problems."@en;
+	dp:solution
+	"A cryptographic key management system (CKMS), optionally using a hardware security module (HSM) for key protection, consisting of systems, personnel and policies is implemented to manage keys for encryption of all required data for both on-premise and cloud resources."@en;
+	dp:context
+	"A cloud key management system is employed, available either as a physical or virtual network attached device."@en;
+	dct:license <unknown>;
+	foaf:page [
+		a foaf:Document;
+		foaf:topic "Cloud Key Management";
+		foaf:primaryTopic <http://cloudpatterns.org/design_patterns/cloud_key_management>;
+	];
+	dp:provides [
+		dp:impactedNFR <scalability>;
+		dp:abstractValue "high";
+	]; .
+
+<cloud-authentication-gateway>
+	a dp:Pattern;
+	dct:title "Cloud Authentication Gateway"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/development>;
+	dp:hasPositiveImpactOn <availability>;
+	dp:icon <urn:cloud_authentication_gateway.png>;
+	dp:model <urn:cloud_authentication_gateway.png>;
+	dct:subject
+	"How can cloud-based IT resources be made accessible to cloud service consumers with diverse protocol requirements?"@en;
+	dct:description
+	"Cloud consumers are compelled to support multiple authentication, communication and session protocols when cloud service providers deliver components, applications, and service compositions with diverse protocol requirements."@en;
+	dp:solution
+	"An authentication gateway service (AGS) is established as a reverse proxy front end between the cloud consumer and the cloud resource, which intercepts and terminates the consumer’s encrypted network connection, authenticates the cloud consumer, authenticates itself and the consumer to the cloud provider, and then proxies all communication between the two. All three parties are authenticated in some combination of transport level or application level communication."@en;
+	dp:context
+	"An authentication service is implemented, allowing standard authentication, communication, and session establishment from a cloud consumer to the authentication service. The authentication service then authenticates to the cloud resource on behalf of the cloud consumer using the diverse protocols required by the cloud provider."@en;
+	dct:license <unknown>;
+	foaf:page [
+		a foaf:Document;
+		foaf:topic "Cloud Authentication Gateway";
+		foaf:primaryTopic <http://cloudpatterns.org/design_patterns/cloud_authentication_gateway>;
+	];
+	dp:provides [
+		dp:impactedNFR <availability>;
+		dp:abstractValue "high";
+	]; .
+
+<automatically-defined-perimeter>
+	a dp:Pattern;
+	dct:title "Automatically Defined Perimeter"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/development>;
+	dp:hasPositiveImpactOn <availability>;
+	dp:icon <urn:automatically_defined_perimeter.png>;
+	dp:model <urn:automatically_defined_perimeter.png>;
+	dct:subject
+	"How can a perimeter be protected that is dynamic and extends from on-premise to multi-vendor cloud resources?"@en;
+	dct:description
+	"In cloud architecture, IT boundaries are dynamic and can scale into multiple clouds from on-premise resources, which creates challenges when establishing and securing perimeters."@en;
+	dp:solution
+	"Cloud consumers authenticate to an automatically defined perimeter (ADP) controller which, if they are authorized, notifies the appropriate cloud provider services to respond to the authenticated consumer’s requests. Otherwise, protected providers do not respond to any communications."@en;
+	dp:context
+	"A system is established that provides protected communications between consumers and providers whereby each provider either accepts or rejects communications based on privileges securely granted automatically by a perimeter controller."@en;
+	dct:license <unknown>;
+	foaf:page [
+		a foaf:Document;
+		foaf:topic "todo";
+		foaf:primaryTopic <http://cloudpatterns.org/design_patterns/automatically_defined_perimeter>;
+	];
+	dp:provides [
+		dp:impactedNFR <availability>;
+		dp:abstractValue "high";
+	]; .
+
+<trusted-cloud-resource-pools>
+	a dp:Pattern;
+	dct:title "Trusted Cloud Resource Pools"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/development>;
+	dp:hasPositiveImpactOn <availability>;
+	dp:icon <urn:trusted_cloud_resource_pools.png>;
+	dp:model <urn:trusted_cloud_resource_pools.png>;
+	dct:subject
+	"How can cloud-based resource pools be secured and become trusted?"@en;
+	dct:description
+	"Cloud platform pool security needs to be achieved to meet cloud consumer compliance and regulatory security requirements. Verification of the platform assurance level is critical for regulated industries."@en;
+	dp:solution
+	"Achieving security through the use of trusted platform modules (TPMs), validating digitally signed code, geotagging, and remote monitoring of the platform security status, cloud consumers can verify that they are using compute platforms that meet their security assurance requirements."@en;
+	dp:context
+	"Trusted resource pools made up of trusted geotagged computers are made available by the cloud provider, and can be verified by the consumer through direct monitoring or evidence through auditing."@en;
+	dct:license <unknown>;
+	foaf:page [
+		a foaf:Document;
+		foaf:topic "Trusted Cloud Resource Pools";
+		foaf:primaryTopic <http://cloudpatterns.org/design_patterns/trusted_cloud_resource_pools>;
+	];
+	dp:provides [
+		dp:impactedNFR <availability>;
+		dp:abstractValue "high";
+	]; .
+
+<in-transit-cloud-data-encryption>
+	a dp:Pattern;
+	dct:title "In-Transit Cloud Data Encryption"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/development>;
+	dp:hasPositiveImpactOn <availability>;
+	dp:icon <urn:in_transit_cloud_data_encryption.png>;
+	dp:model <urn:in_transit_cloud_data_encryption.png>;
+	dct:subject
+	"How can data be securely transmitted to, from, and within a cloud environment?"@en;
+	dct:description
+	"Data copied to and from a cloud environment transits networks and servers beyond the control of the organization and can be intercepted by malicious intermediaries."@en;
+	dp:solution
+	"An encryption mechanism is implemented to encrypt data between sender and receiver for confidentiality, and a digital signature mechanism is implemented to provide integrity for the data."@en;
+	dp:context
+	"A solution is implemented with capabilities that secure and protect data while it transfers between sender and receiver and also ensure that data will not be accepted by the receiver if the original data sent is modified."@en;
+	dct:license <unknown>;
+	foaf:page [
+		a foaf:Document;
+		foaf:topic "In-Transit Cloud Data Encryption";
+		foaf:primaryTopic <http://cloudpatterns.org/design_patterns/in_transit_cloud_data_encryption>;
+	];
+	dp:provides [
+		dp:impactedNFR <availability>;
+		dp:abstractValue "high";
+	]; .
+
+<geotagging>
+	a dp:Pattern;
+	dct:title "Geotagging"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/development>;
+	dp:hasPositiveImpactOn <location>;
+	dp:icon <urn:geotagging.png>;
+	dp:model <urn:geotagging.png>;
+	dct:subject
+	"How can the geographic location of cloud-based data and workloads be automatically communicated?"@en;
+	dct:description
+	"Control of data, workload locality and data sovereignty are requirements for federal and industrial compliance and regulatory issues. Without knowledge of where a cloud consumer’s workload is executed, it may not be possible to meet industrial compliance and regulatory requirements for data sovereignty."@en;
+	dp:solution
+	"Assets are geotagged using TPMs and are added to trusted resource pools that contain the same security assurance levels and geolocation regions."@en;
+	dp:context
+	"When trusted resource pools are generated, the geolocation is supplied as part of the compliance and regulatory assurance attributes."@en;
+	dct:license <unknown>;
+	foaf:page [
+		a foaf:Document;
+		foaf:topic "Geotagging";
+		foaf:primaryTopic <http://cloudpatterns.org/design_patterns/geotagging>;
+	];
+	dp:provides [
+		dp:impactedNFR <location>;
+		dp:abstractValue "cross-border";
+	]; .
+
+<cloud-vm-platform-encryption>
+	a dp:Pattern;
+	dct:title "Cloud VM Platform Encryption"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/development>;
+	dp:hasPositiveImpactOn <availability>;
+	dp:icon <urn:cloud_vm_platform_encryption.png>;
+	dp:model <urn:cloud_vm_platform_encryption.png>;
+	dct:subject
+	"How can VM backups, snapshots, and live migration be secured?"@en;
+	dct:description
+	"VM backups, snapshots and live migration create files that encapsulate the entire VM. These files can then be copied or moved outside the application that the cloud consumer controls, making them vulnerable to attacks."@en;
+	dp:solution
+	"A key manager is used to manage keys for encryption of the various types of VM storage that are pre-provisioned to receive backups and snapshots of consumer VMs or to receive replications and live migrations."@en;
+	dp:context
+	"Encrypted containers are provided for use and storage of the various types of VM backups and replications."@en;
+	dct:license <unknown>;
+	foaf:page [
+		a foaf:Document;
+		foaf:topic "Cloud VM Platform Encryption";
+		foaf:primaryTopic <http://cloudpatterns.org/design_patterns/cloud_vm_platform_encryption>;
+	];
+	dp:provides [
+		dp:impactedNFR <availability>;
+		dp:abstractValue "high";
+	]; .
+
+<cloud-resource-access-control>
+	a dp:Pattern;
+	dct:title "Cloud Resource Access Control"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/development>;
+	dp:hasPositiveImpactOn <availability>;
+	dp:icon <urn:cloud_resource_access_control.png>;
+	dp:model <urn:cloud_resource_access_control.png>;
+	dct:subject
+	"How can cloud consumer attributes be made available to determine cloud resource access control in multiple proprietary clouds?"@en;
+	dct:description
+	"Proprietary cloud providers each have their own methods and protocols for authentication and access control, which contributes to vendor lock-in."@en;
+	dp:solution
+	"An AGS and attribute authority connected to a secure token service (STS) are implemented and provisioned with the organization’s cloud consumers’ accounts and attributes. An attributed based access control (ABAC) mode of access control is instituted as the cloud service provider using the organization’s SSO infrastructure."@en;
+	dp:context
+	"A cloud single sign-on (SSO) architecture is established, incorporating an authentication gateway service (AGS) and attribute authority for implementation of cloud resource access control."@en;
+	dct:license <unknown>;
+	foaf:page [
+		a foaf:Document;
+		foaf:topic "Cloud Resource Access Control";
+		foaf:primaryTopic <http://cloudpatterns.org/design_patterns/cloud_resource_access_control>;
+	];
+	dp:provides [
+		dp:impactedNFR <availability>;
+		dp:abstractValue "high";
+	]; .
+
+<cloud-storage-device-performance-enforcement>
+	a dp:Pattern;
+	dct:title "Cloud Storage Device Performance Enforcement"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/development>;
+	dp:hasPositiveImpactOn <performance>;
+	dp:icon <urn:cloud-storage-device-performance-enforcement.png>;
+	dp:model <urn:cloud-storage-device-performance-enforcement.png>;
+	dct:subject
+	"How can data with different performance characteristics be stored on a cloud storage device compliant with the performance requirements of each dataset?"@en;
+	dct:description
+	"A cloud consumer can have different performance requirements for different datasets. If datasets with varying performance requirements reside on a cloud storage device with fixed performance capabilities, the performance requirements will not be met."@en;
+	dp:solution
+	"A cloud storage device performance monitor mechanism manages data stored on a cloud storage device based on performance characteristics. This solution can also enforce policies that prevent data from being copied or moved elsewhere while sending an alert response."@en;
+	dp:context
+	"A solution is implemented with the ability to match and compare the performance characteristics of datasets against performance capabilities of a destination cloud storage device."@en;
+	dct:license <unknown>;
+	foaf:page [
+		a foaf:Document;
+		foaf:topic "Cloud Storage Device Performance Enforcement";
+		foaf:primaryTopic <http://cloudpatterns.org/design_patterns/cloud_storage_device_performance_enforcement>;
+	];
+	dp:provides [
+		dp:impactedNFR <performance>;
+		dp:abstractValue "high";
+	]; .
+
+<cloud-storage-device-masking>
+	a dp:Pattern;
+	dct:title "Cloud Storage Device Masking"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/development>;
+	dp:hasPositiveImpactOn <availability>;
+	dp:icon <urn:cloud-storage-device-masking.png>;
+	dp:model <urn:cloud-storage-device-masking.png>;
+	dct:subject
+	"How can data stored on a cloud storage device be isolated to specific consumers?"@en;
+	dct:description
+	"Data stored in a shared cloud environment can be vulnerable to unauthorized access by other cloud consumers."@en;
+	dp:solution
+	"A LUN masking mechanism can enforce defined policies at the physical storage array in order to prevent unauthorized cloud consumers from accessing a specific cloud storage device in a shared cloud environment."@en;
+	dp:context
+	"A solution is implemented to isolate each cloud storage device from being presented to or accessed by unauthorized cloud consumers."@en;
+	dct:license <unknown>;
+	foaf:page [
+		a foaf:Document;
+		foaf:topic "Cloud Storage Device Masking";
+		foaf:primaryTopic <http://cloudpatterns.org/design_patterns/cloud_storage_device_masking>;
+	];
+	dp:provides [
+		dp:impactedNFR <availability>;
+		dp:abstractValue "high";
+	]; .
+
+<cloud-storage-data-lifecycle-management>
+	a dp:Pattern;
+	dct:title "Cloud Storage Data Lifecycle Management"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/development>;
+	dp:hasPositiveImpactOn <availability>;
+	dp:icon <urn:cloud-storage-data-lifecycle-management.png>;
+	dp:model <urn:cloud-storage-data-lifecycle-management.png>;
+	dct:subject
+	"How can data be stored and managed in a cloud environment based on a defined lifecycle?"@en;
+	dct:description
+	"Datasets no longer required by an organization can bloat databases causing performance challenges, and can further incur administration and maintenance burdens."@en;
+	dp:solution
+	"A cloud storage data aging management mechanism monitors the state of data against a provided lifecycle in order to move data to a different cloud storage device or delete data after a defined lifecycle."@en;
+	dp:context
+	"A solution can be introduced to automatically manage and migrate the data into a different type of cloud storage device, or delete the data based on its state in a defined lifecycle."@en;
+	dct:license <unknown>;
+	foaf:page [
+		a foaf:Document;
+		foaf:topic "Cloud Storage Data Lifecycle Management";
+		foaf:primaryTopic <http://cloudpatterns.org/design_patterns/cloud_storage_data_lifecycle_management>;
+	];
+	dp:provides [
+		dp:impactedNFR <availability>;
+		dp:abstractValue "high";
+	]; .
+
+<cloud-storage-data-at-rest-encryption>
+	a dp:Pattern;
+	dct:title "Cloud Storage Data at Rest Encryption"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/development>;
+	dp:hasPositiveImpactOn <availability>;
+	dp:icon <urn:cloud-storage-data-at-rest-encryption.png>;
+	dp:model <urn:cloud-storage-data-at-rest-encryption.png>;
+	dct:subject
+	"How can cloud providers securely store cloud consumer data on cloud storage devices?"@en;
+	dct:description
+	"Data stored in a cloud environment requires security against access to the physical hard disks forming the cloud storage device."@en;
+	dp:solution
+	"An encryption mechanism supported by the physical storage arrays can be used to automatically encrypt data stored on the disks and decrypt data leaving the disks."@en;
+	dp:context
+	"Secure data on the physical hard disks in order to prevent unauthorized access."@en;
+	dct:license <unknown>;
+	foaf:page [
+		a foaf:Document;
+		foaf:topic "Cloud Storage Data at Rest Encryption";
+		foaf:primaryTopic <http://cloudpatterns.org/design_patterns/cloud_storage_data_at_rest_encryption>;
+	];
+	dp:provides [
+		dp:impactedNFR <availability>;
+		dp:abstractValue "high";
+	]; .
+
+<synchronized-operating-state>
+	a dp:Pattern;
+	dct:title "Synchronized Operating State"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/development>;
+	dp:hasPositiveImpactOn <availability>;
+	dp:icon <urn:synchronized-operating-state.png>;
+	dp:model <urn:synchronized-operating-state.png>;
+	dct:subject
+	"How can the availability and reliability of virtual servers be ensured when high availability and clustering technology is unavailable?"@en;
+	dct:description
+	"A cloud consumer may be prevented from utilizing high availability and clustering technology for its virtual servers or operating systems, thereby making them more vulnerable to failure."@en;
+	dp:solution
+	"The heartbeat messages are processed by a specialized service agent and are exchanged between hypervisors, the hypervisor and virtual server, and the hypervisor and VIM."@en;
+	dp:context
+	"A composite failover system is created to not rely on clustering or high availability features but instead use heartbeat messages to synchronize virtual servers."@en;
+	dct:license <unknown>;
+	foaf:page [
+		a foaf:Document;
+		foaf:topic "Synchronized Operating State";
+		foaf:primaryTopic <http://cloudpatterns.org/design_patterns/synchronized_operating_state>;
+	];
+	dp:provides [
+		dp:impactedNFR <availability>;
+		dp:abstractValue "high";
+	]; .
+
+<resource-pooling>
+	a dp:Pattern;
+	dct:title "Resource Pooling"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/development>;
+	dp:hasPositiveImpactOn <availability>;
+	dp:icon <urn:resource-pooling.png>;
+	dp:model <urn:resource-pooling.png>;
+	dct:subject
+	"How can IT resources be organized to support dynamic sharing?"@en;
+	dct:description
+	"When sharing identical IT resources for scalability purposes, it can be error-prone and burdensome to keep them fully synchronized on an on-going basis."@en;
+	dp:solution
+	"Resource pools can be created at different sizes and further organized into hierarchies to provide parent and child pools."@en;
+	dp:context
+	"An automated synchronization system is provided to group identical IT resources into pools and to maintain their synchronicity."@en;
+	dct:license <unknown>;
+	foaf:page [
+		a foaf:Document;
+		foaf:topic "Resource Pooling";
+		foaf:primaryTopic <http://cloudpatterns.org/design_patterns/resource_pooling>;
+	];
+	dp:provides [
+		dp:impactedNFR <availability>;
+		dp:abstractValue "high";
+	]; .
+
+<multipath-resource-access>
+	a dp:Pattern;
+	dct:title "Multipath Resource Access"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/development>;
+	dp:hasPositiveImpactOn <availability>;
+	dp:icon <urn:multipath-resource-access.png>;
+	dp:model <urn:multipath-resource-access.png>;
+	dct:subject
+	"How can an IT resource be accessed when its pre-defined path is lost or becomes unavailable?"@en;
+	dct:description
+	"When the path to an IT resource is lost or becomes unavailable, the IT resource becomes inaccessible. This can jeopardize the stability of an entire cloud-based solution until the cloud provider is able to supply the cloud consumer with the lost or updated path."@en;
+	dp:solution
+	"A multipathing system that resides on the server or hypervisor is established to provide multiple alternative paths to the same, unique IT resource, while ensuring that the IT resource is viewed identically via each alternative path."@en;
+	dp:context
+	"Alternative paths to IT resources are provided to give cloud consumers a means of programmatically or manually overcoming path failures."@en;
+	dct:license <unknown>;
+	foaf:page [
+		a foaf:Document;
+		foaf:topic "Multipath Resource Access";
+		foaf:primaryTopic <http://cloudpatterns.org/design_patterns/multipath_resource_access>;
+	];
+	dp:provides [
+		dp:impactedNFR <availability>;
+		dp:abstractValue "high";
+	]; .
+
+<dynamic-failure-detection-and-recovery>
+	a dp:Pattern;
+	dct:title "Dynamic Failure Detection and Recovery"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/development>;
+	dp:hasPositiveImpactOn <availability>;
+	dp:icon <urn:dynamic-failure-detection-and-recovery.png>;
+	dp:model <urn:dynamic-failure-detection-and-recovery.png>;
+	dct:subject
+	"How can the notification and recovery of IT resource failure be automated?"@en;
+	dct:description
+	"When cloud-based IT resources fail, manual intervention may be unacceptably inefficient."@en;
+	dp:solution
+	"Different intelligent monitoring and recovery technologies can be used to establish the automation of failure detection and recovery tasks with a focus on watching, deciding upon, acting upon, reporting and escalating IT resource failure conditions."@en;
+	dp:context
+	"A watchdog system is established to monitor IT resource status and perform notifications and/or recovery attempts during failure conditions."@en;
+	dct:license <unknown>;
+	foaf:page [
+		a foaf:Document;
+		foaf:topic "Dynamic Failure Detection and Recovery";
+		foaf:primaryTopic <http://cloudpatterns.org/design_patterns/dynamic_failure_detection_and_recovery>;
+	];
+	dp:provides [
+		dp:impactedNFR <availability>;
+		dp:abstractValue "high";
+	]; .
+
+<service-state-management>
+	a dp:Pattern;
+	dct:title "Service State Management"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/development>;
+	dp:hasPositiveImpactOn <performance>;
+	dp:icon <urn:service-state-management.png>;
+	dp:model <urn:service-state-management.png>;
+	dct:subject
+	"How can stateful cloud services be optimized to minimize runtime IT resource consumption?"@en;
+	dct:description
+	"A cloud service designed to place significant data into memory for prolonged periods can consume excessive amounts of runtime processing, thereby unreasonably taxing the overall cloud infrastructure and imposing additional usage costs on cloud consumers."@en;
+	dp:solution
+	"A state management system requires a cloud storage device capable of temporarily holding and releasing state data exchanged by the cloud service. The cloud service itself needs to be equipped with logic to determine when and how to release and retrieve state data."@en;
+	dp:context
+	"The cloud service is designed to integrate with a state management system allowing it to defer state data at runtime when necessary so as to minimize its IT resource consumption."@en;
+	dct:license <unknown>;
+	foaf:page [
+		a foaf:Document;
+		foaf:topic "Service State Management";
+		foaf:primaryTopic <http://cloudpatterns.org/design_patterns/service_state_management>;
+	];
+	dp:provides [
+		dp:impactedNFR <performance>;
+		dp:abstractValue "high";
+	]; .
+
+<usage-monitoring>
+	a dp:Pattern;
+	dct:title "Usage Monitoring"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/development>;
+	dp:hasPositiveImpactOn <availability>;
+	dp:hasPositiveImpactOn <performance>;
+	dp:icon <urn:usage-monitoring.png>;
+	dp:model <urn:usage-monitoring.png>;
+	dct:subject
+	"How can IT resource usage be measured?"@en;
+	dct:description
+	"IT resources that are shared can generate a variety of runtime scenarios that, if not tracked and responded to, can cause numerous failure, performance, and security concerns and can further make usage-based reporting and billing impossible."@en;
+	dp:solution
+	"Various specialized cloud usage monitors can be incorporated into a cloud architecture, most of which will interact with other IT resources to transfer or process collected usage data."@en;
+	dp:context
+	"Cloud usage monitors are utilized to track and measure the quantity and nature of runtime IT resource usage activity."@en;
+	dct:license <unknown>;
+	foaf:page [
+		a foaf:Document;
+		foaf:topic "Usage Monitoring";
+		foaf:primaryTopic <http://cloudpatterns.org/design_patterns/usage_monitoring>;
+	];
+	dp:provides [
+		dp:impactedNFR <availability>;
+		dp:abstractValue "high";
+	];
+	dp:provides [
+		dp:impactedNFR <performance>;
+		dp:abstractValue "high";
+	]; .
+
+<micro-scatter-gather>
+	a dp:Pattern;
+	dct:title "Micro Scatter-Gather"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/optimization>;
+	dp:hasPositiveImpactOn <performance>;
+	dp:icon <urn:micro-scatter-gather.png>;
+	dp:model <urn:micro-scatter-gather.png>;
+	dct:subject
+	"How can a cloud service carry out high-performance composition logic that can include composing specific cloud service instances?"@en;
+	dct:description
+	"A high-performance task needs to be completed that would need to involve the composition of multiple cloud services, as well as the composition of specific cloud service instances. The systems programming required to build such composition logic is complex."@en;
+	dp:solution
+	"The distributor cloud service accepts the task from the service consumer and segregates it into micro tasks that are assigned to the appropriate cloud services or cloud service instances. A separate aggregator service collects the results and aggregates them into one single response back to the service consumer. Distributor and aggregator services are deployed in isolation in a special root container that exposes APIs to the service consumer and the composed cloud services."@en;
+	dp:context
+	"A root container is utilized with special distributor and aggregator cloud services designed to compose and interact with multiple cloud services and cloud service instances, thereby carrying out the necessary high-performance composition logic."@en;
+	dct:license <unknown>;
+	foaf:page [
+		a foaf:Document;
+		foaf:topic "Micro Scatter-Gather";
+		foaf:primaryTopic <http://cloudpatterns.org/design_patterns/micro_scatter_gather>;
+	];
+	dp:provides [
+		dp:impactedNFR <performance>;
+		dp:abstractValue "high";
+	]; .
+	
+<direct-lun-access>
+	a dp:Pattern;
+	dct:title "Direct LUN Access"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/optimization>;
+	dp:hasPositiveImpactOn <performance>;
+	dp:icon <urn:direct-lun-access.png>;
+	dp:model <urn:direct-lun-access.png>;
+	dct:subject
+	"How can a virtual server overcome performance limitations imposed by emulated file-based storage?"@en;
+	dct:description
+	"LUNs mapped via a host bus adapter on the hypervisor can restrict data access to emulated file-based storage, which can impose performance limitations."@en;
+	dp:solution
+	"Raw device mapping technology is used to configure the hypervisor to enable access to raw, block-based LUNs to virtual server."@en;
+	dp:context
+	"The virtual server is granted direct access to block-based storage LUNs via the physical host bust adapter card."@en;
+	dct:license <unknown>;
+	foaf:page [
+		a foaf:Document;
+		foaf:topic "Direct LUN Access";
+		foaf:primaryTopic <http://cloudpatterns.org/design_patterns/direct_lun_access>;
+	];
+	dp:provides [
+		dp:impactedNFR <performance>;
+		dp:abstractValue "high";
+	]; .
+	
+<direct-io-access>
+	a dp:Pattern;
+	dct:title "Direct I/O Access"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/optimization>;
+	dp:hasPositiveImpactOn <performance>;
+	dp:icon <urn:direct-io-access.png>;
+	dp:model <urn:direct-io-access.png>;
+	dct:subject
+	"How can a virtual server overcome data transfer capacity thresholds imposed by its surrounding virtualization environment?"@en;
+	dct:description
+	"Virtualized networks and associated virtualized IT resources have capacity limitations that can unreasonably inhibit virtual server communication and data transfer performance."@en;
+	dp:solution
+	"The hypervisor transfers complete control of the physical server’s I/O card directly to the virtual server, which is then able to recognize the I/O card as a hardware device."@en;
+	dp:context
+	"The virtual server is allowed to circumvent the hypervisor and directly access the physical server’s I/O card."@en;
+	dct:license <unknown>;
+	foaf:page [
+		a foaf:Document;
+		foaf:topic "Direct I/O Access";
+		foaf:primaryTopic <http://cloudpatterns.org/design_patterns/direct_io_access>;
+	];
+	dp:provides [
+		dp:impactedNFR <performance>;
+		dp:abstractValue "high";
+	]; .
+
+<dynamic-data-normalization>
+	a dp:Pattern;
+	dct:title "Dynamic Data Normalization"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/optimization>;
+	dp:hasPositiveImpactOn <performance>;
+	dp:icon <urn:dynamic-data-normalization.png>;
+	dp:model <urn:dynamic-data-normalization.png>;
+	dct:subject
+	"How can redundant data within cloud storage devices be automatically avoided?"@en;
+	dct:description
+	"Cloud consumers may store large volumes of redundant data within cloud storage devices, thereby bloating the storage architecture and compromising data access performance."@en;
+	dp:solution
+	"Data de-duplication technology is used to detect and eliminate redundant data at block or file-based levels."@en;
+	dp:context
+	"Data received by cloud consumers is automatically normalized so that redundant data is avoided and cloud storage device capacity and performance is optimized."@en;
+	dct:license <unknown>;
+	foaf:page [
+		a foaf:Document;
+		foaf:topic "Dynamic Data Normalization";
+		foaf:primaryTopic <http://cloudpatterns.org/design_patterns/dynamic_data_normalization>;
+	];
+	dp:provides [
+		dp:impactedNFR <performance>;
+		dp:abstractValue "high";
+	]; .
+
+<cross-storage-device-vertical-tiering>
+	a dp:Pattern;
+	dct:title "Cross-Storage Device Vertical Tiering"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/optimization>;
+	dp:hasPositiveImpactOn <scalability>;
+	dp:icon <urn:cross-storage-device-vertical-tiering.png>;
+	dp:model <urn:cross-storage-device-vertical-tiering.png>;
+	dct:subject
+	"How can the vertical scaling of data processing be carried out dynamically?"@en;
+	dct:description
+	"Increasing the processing capacity of data stored on cloud storage devices generally requires the manual vertical scaling of the device, which is inefficient and potentially wasteful."@en;
+	dp:solution
+	"Using pre-defined capacity thresholds, LUN migration is used to dynamically move LUN disks between cloud storage devices with different capacities."@en;
+	dp:context
+	"A system is established whereby the vertical scaling of data processing can be carried out dynamically across multiple cloud storage devices."@en;
+	dct:license <unknown>;
+	foaf:page [
+		a foaf:Document;
+		foaf:topic "Cross-Storage Device Vertical Tiering";
+		foaf:primaryTopic <http://cloudpatterns.org/design_patterns/cross_storage_device_vertical_tiering>;
+	];
+	dp:provides [
+		dp:impactedNFR <scalability>;
+		dp:abstractValue "high";
+	]; .
+
+<health-endpoint-monitoring>
+	a dp:Pattern;
+	dct:title "Health Endpoint Monitoring"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/optimization>;
+	dp:hasPositiveImpactOn <availability>;
+	dp:icon <urn:health-endpoint-monitoring.png>;
+	dp:model <urn:health-endpoint-monitoring.png>;
+	dct:subject
+	"Implement functional checks in an application that external tools can access through exposed endpoints at regular intervals"@en;
+	dct:description
+	"It's a good practice, and often a business requirement, to monitor web applications and back-end services, to ensure they're available and performing correctly. However, it's more difficult to monitor services running in the cloud than it is to monitor on-premises services. For example, you don't have full control of the hosting environment, and the services typically depend on other services provided by platform vendors and others. There are many factors that affect cloud-hosted applications such as network latency, the performance and availability of the underlying compute and storage systems, and the network bandwidth between them. The service can fail entirely or partially due to any of these factors. Therefore, you must verify at regular intervals that the service is performing correctly to ensure the required level of availability, which might be part of your service level agreement (SLA)."@en;
+	dp:solution
+	"Implement health monitoring by sending requests to an endpoint on the application. The application should perform the necessary checks, and return an indication of its status. A health monitoring check typically combines two factors: The checks (if any) performed by the application or service in response to the request to the health verification endpoint. Analysis of the results by the tool or framework that performs the health verification check. The response code indicates the status of the application and, optionally, any components or services it uses. The latency or response time check is performed by the monitoring tool or framework. The figure provides an overview of the pattern."@en;
+	dp:context
+	"This pattern is useful for: Monitoring websites and web applications to verify availability. Monitoring websites and web applications to check for correct operation. Monitoring middle-tier or shared services to detect and isolate a failure that could disrupt other applications. Complementing existing instrumentation in the application, such as performance counters and error handlers. Health verification checking doesn't replace the requirement for logging and auditing in the application. Instrumentation can provide valuable information for an existing framework that monitors counters and error logs to detect failures or other issues. However, it can't provide information if the application is unavailable."@en;
+	dct:license <unknown>;
+	foaf:page [
+		a foaf:Document;
+		foaf:topic "Health Endpoint Monitoring pattern";
+		foaf:primaryTopic <https://docs.microsoft.com/en-us/azure/architecture/patterns/health-endpoint-monitoring>;
+	];
+	dp:hasPositiveImpactOn <availability>;
+	dp:provides [
+		dp:impactedNFR <availability>;
+		dp:abstractValue "high";
+	]; .
+
+<throttling>
+	a dp:Pattern;
+	dct:title "Throttling"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/optimization>;
+	dp:hasPositiveImpactOn <availability>;
+	dp:hasPositiveImpactOn <performance>;
+	dp:icon <urn:throttling.png>;
+	dp:model <urn:throttling.png>;
+	dct:subject
+	"Control the consumption of resources used by an instance of an application, an individual tenant, or an entire service. This can allow the system to continue to function and meet service level agreements, even when an increase in demand places an extreme load on resources."@en;
+	dct:description
+	"The load on a cloud application typically varies over time based on the number of active users or the types of activities they are performing. For example, more users are likely to be active during business hours, or the system might be required to perform computationally expensive analytics at the end of each month. There might also be sudden and unanticipated bursts in activity. If the processing requirements of the system exceed the capacity of the resources that are available, it'll suffer from poor performance and can even fail. If the system has to meet an agreed level of service, such failure could be unacceptable. There're many strategies available for handling varying load in the cloud, depending on the business goals for the application. One strategy is to use autoscaling to match the provisioned resources to the user needs at any given time. This has the potential to consistently meet user demand, while optimizing running costs. However, while autoscaling can trigger the provisioning of additional resources, this provisioning isn't immediate. If demand grows quickly, there can be a window of time where there's a resource deficit."@en;
+	dp:solution
+	"An alternative strategy to autoscaling is to allow applications to use resources only up to a limit, and then throttle them when this limit is reached. The system should monitor how it's using resources so that, when usage exceeds the threshold, it can throttle requests from one or more users. This will enable the system to continue functioning and meet any service level agreements (SLAs) that are in place. For more information on monitoring resource usage, see the Instrumentation and Telemetry Guidance. The system could implement several throttling strategies, including: Rejecting requests from an individual user who's already accessed system APIs more than n times per second over a given period of time. This requires the system to meter the use of resources for each tenant or user running an application. For more information, see the Service Metering Guidance. Disabling or degrading the functionality of selected nonessential services so that essential services can run unimpeded with sufficient resources. For example, if the application is streaming video output, it could switch to a lower resolution. Using load leveling to smooth the volume of activity (this approach is covered in more detail by the Queue-based Load Leveling pattern). In a multi-tenant environment, this approach will reduce the performance for every tenant. If the system must support a mix of tenants with different SLAs, the work for high-value tenants might be performed immediately. Requests for other tenants can be held back, and handled when the backlog has eased. The Priority Queue pattern could be used to help implement this approach. Deferring operations being performed on behalf of lower priority applications or tenants. These operations can be suspended or limited, with an exception generated to inform the tenant that the system is busy and that the operation should be retried later."@en;
+	dp:context
+	"Use this pattern: To ensure that a system continues to meet service level agreements. To prevent a single tenant from monopolizing the resources provided by an application. To handle bursts in activity. To help cost-optimize a system by limiting the maximum resource levels needed to keep it functioning."@en;
+	dct:license <unknown>;
+	foaf:page [
+		a foaf:Document;
+		foaf:topic "Throttling pattern";
+		foaf:primaryTopic <https://docs.microsoft.com/en-us/azure/architecture/patterns/throttling>;
+	];
+	dp:hasPositiveImpactOn <availability>;
+	dp:hasPositiveImpactOn <performance>;
+	dp:provides [
+		dp:impactedNFR <availability>;
+		dp:abstractValue "high";
+	];
+	dp:provides [
+		dp:impactedNFR <performance>;
+		dp:abstractValue "high";
+	]; .
diff --git a/ARCHITECT/cloud-patterns/src/main/resources/patterns/models/resiliency_management_process.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/models/resiliency_management_process.png
new file mode 100644
index 0000000000000000000000000000000000000000..b078d0186e0f7ccefad1eefd7c87484fd5c5e761
Binary files /dev/null and b/ARCHITECT/cloud-patterns/src/main/resources/patterns/models/resiliency_management_process.png differ
diff --git a/ARCHITECT/cloud-patterns/src/main/resources/patterns/patterns-owl.ttl b/ARCHITECT/cloud-patterns/src/main/resources/patterns/patterns-owl.ttl
index a2ddf0a9fa130345b07aff2f01bddbe568c4fd76..3391075fe9d0087fcb37d4aa989c8462d01ed159 100644
--- a/ARCHITECT/cloud-patterns/src/main/resources/patterns/patterns-owl.ttl
+++ b/ARCHITECT/cloud-patterns/src/main/resources/patterns/patterns-owl.ttl
@@ -8,6 +8,7 @@
 #
 # Contributors:
 # Simon Dutkowski Fraunhofer FOKUS
+# Kyriakos Stefanidis Fraunhofer FOKUS
 #
 # Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
 #
@@ -36,6 +37,15 @@ dp:NFR
 	rdfs:subClassOf rdfs:Resource ;
 	rdfs:isDefinedBy dp: .
 
+dp:abstractValue
+    a rdf:Property ;
+	rdfs:label "Abstract Value"@en ;
+	rdfs:comment "The qualitative value of an NFR"@en ;
+	rdfs:domain dp:NFR ;
+	rdfs:range rdfs:Literal ;
+	rdfs:isDefinedBy dp: .
+
+
 dp:Pattern
 	a rdfs:Class ;
 	rdfs:label "Pattern"@en ;
@@ -45,7 +55,7 @@ dp:Pattern
 
 dp:context
     a rdf:Property ;
-	rdfs:label "context"@en ;
+	rdfs:label "Context"@en ;
 	rdfs:comment "Describes the context of the pattern's problem."@en ;
 	rdfs:domain dp:Pattern ;
 	rdfs:range rdf:langString ;
@@ -53,20 +63,55 @@ dp:context
 
 dp:solution
     a rdf:Property ;
-	rdfs:label "solution"@en ;
+	rdfs:label "Solution"@en ;
 	rdfs:comment "Describes the solution of the pattern's problem."@en ;
 	rdfs:domain dp:Pattern ;
 	rdfs:range rdf:langString ;
 	rdfs:isDefinedBy dp: .
 
+dp:model
+    a rdf:Property ;
+	rdfs:label "Model"@en ;
+	rdfs:comment "Describes the pattern as a UML model"@en ;
+	rdfs:domain dp:Pattern ;
+	rdfs:range rdfs:Resource ;
+	rdfs:isDefinedBy dp: .
+
+dp:provides
+    a rdf:Property ;
+    rdfs:label "Provides"@en ;
+	rdfs:comment "The subject provides to the object."@en ;
+	rdfs:domain rdfs:pattern ;
+	rdfs:range rdfs:Resource ;
+	rdfs:isDefinedBy dp: .
+
+dp:requires
+    a rdf:Property ;
+    rdfs:label "Requires"@en ;
+	rdfs:comment "The subject requires from the object."@en ;
+	rdfs:domain rdfs:pattern ;
+	rdfs:range rdfs:Resource ;
+	rdfs:isDefinedBy dp: .
+
+dp:impactedNFR
+    a rdf:Property ;
+    rdfs:label "Impacted NFR"@en ;
+	rdfs:comment "Impacted NFR"@en ;
+	rdfs:domain rdfs:requires ;
+	rdfs:domain rdfs:provides ;
+	rdfs:range rdfs:NFR ;
+	rdfs:isDefinedBy dp: .
+
+# Deprecated
 dp:hasImpactOn
     a rdf:Property ;
-    rdfs:label "positive impact"@en ;
-	rdfs:comment "The subject has a general impact on the object."@en ;
+    rdfs:label "Has impact"@en ;
+	rdfs:comment "The subject has an impact on the object."@en ;
 	rdfs:domain rdfs:Class ;
 	rdfs:range rdfs:Resource ;
 	rdfs:isDefinedBy dp: .
 
+# Deprecated
 dp:hasPositiveImpactOn
     a rdf:Property ;
     rdfs:subPropertyOf dp:hasImpactOn ;
@@ -76,6 +121,7 @@ dp:hasPositiveImpactOn
 	rdfs:range rdfs:Resource ;
 	rdfs:isDefinedBy dp: .
 
+# Deprecated
 dp:hasNegativeImpactOn
     a rdf:Property ;
     rdfs:subPropertyOf dp:hasImpactOn ;
diff --git a/ARCHITECT/cloud-patterns/src/main/resources/patterns/template.ttl b/ARCHITECT/cloud-patterns/src/main/resources/patterns/template.ttl
new file mode 100644
index 0000000000000000000000000000000000000000..d0829376efd53d0d9240a861612431911c320e8e
--- /dev/null
+++ b/ARCHITECT/cloud-patterns/src/main/resources/patterns/template.ttl
@@ -0,0 +1,30 @@
+<todo>
+	a dp:Pattern;
+	dct:title "todo"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/todo>;
+	dp:icon <urn:todo.png>;
+	dp:model <urn:todo.png>;
+	dct:subject
+	"todo"@en;
+	dct:description
+	"todo"@en;
+	dp:solution
+	"todo"@en;
+	dp:context
+	"todo"@en;
+	dct:license <unknown>;
+	foaf:page [
+		a foaf:Document;
+		foaf:topic "todo";
+		foaf:primaryTopic <todo>;
+	];
+	dp:hasPositiveImpactOn <todo>;
+	dp:provides [
+		dp:impactedNFR <todo>;
+		dp:abstractValue "high";
+	];
+	dp:requires [
+		dp:impactedNFR <todo>;
+		dp:abstractValue "todo";
+	]; .
+
diff --git a/ARCHITECT/cloud-patterns/src/test/java/eu/DECIDEh2020/architect/patterns/PatternsTest.java b/ARCHITECT/cloud-patterns/src/test/java/eu/DECIDEh2020/architect/patterns/PatternsTest.java
index 21b2a018721f63bec95cdac013cc057fa6d6d501..1a12b4fbcc80da919ec2a6e010a71426f3b16f53 100644
--- a/ARCHITECT/cloud-patterns/src/test/java/eu/DECIDEh2020/architect/patterns/PatternsTest.java
+++ b/ARCHITECT/cloud-patterns/src/test/java/eu/DECIDEh2020/architect/patterns/PatternsTest.java
@@ -18,11 +18,8 @@ import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 
-import org.apache.jena.rdf.model.Model;
-import org.apache.jena.rdf.model.ResIterator;
 import org.apache.jena.rdf.model.Resource;
 import org.apache.jena.rdf.model.Statement;
-import org.apache.jena.sparql.function.library.leviathan.e;
 import org.apache.jena.vocabulary.DCTerms;
 import org.testng.annotations.BeforeTest;
 import org.testng.annotations.Test;
@@ -78,7 +75,7 @@ public class PatternsTest {
 	void testCategories() {
 		List<Resource> patternList = patterns.getPatternsByCategory(patterns.getModel().createResource(":dummy"));
 		assert patternList == null : "Expected null list";
-		patternList = patterns.getPatternsByCategory(DECIDEPatterns.fundamentalCategory);
+		patternList = patterns.getPatternsByCategory(DECIDEPatterns.basicCategory);
 		assert patternList.size() == 7 : "Expected list of patterns with 7 elements.";
 		patternList = patterns.getPatternsByCategory(DECIDEPatterns.optimizationCategory);
 		assert patternList.size() == 5 : "Expected empty list of 5 patterns.";
diff --git a/AppController/README.md b/AppController/README.md
index e81a72726e8f3742f8b1d8c3611b9cb2db48b35d..ee527b4ac72b04f74113f56155da5dc32d3eab84 100644
--- a/AppController/README.md
+++ b/AppController/README.md
@@ -47,7 +47,7 @@ Finally, your application pom.xml requires the following dependency:
 <dependency>
     <groupId>eu.DECIDEh2020</groupId>
     <artifactId>app-controller</artifactId>
-    <version>0.0.2</version>
+    <version>0.0.17-SNAPSHOT</version>
 </dependency>
 ```
 
diff --git a/AppController/pom.xml b/AppController/pom.xml
index 62c7315a860da894197235203d4cc55025fd8663..510d0a7413b6f9a5cd52a404a80878fb88d14036 100644
--- a/AppController/pom.xml
+++ b/AppController/pom.xml
@@ -4,17 +4,17 @@
  
   <groupId>eu.DECIDEh2020</groupId>
   <artifactId>app-controller</artifactId>
-  <version>0.0.16-SNAPSHOT</version>
+  <version>0.0.17-SNAPSHOT</version>
  
   <distributionManagement>
     <repository>
       <id>paca</id>
       <name>Paca Releases Repo</name>
-      <url>https://paca.fokus.fraunhofer.de/repository/maven-releases/</url>
+      <url>https://paca.okd.fokus.fraunhofer.de/repository/maven-releases/</url>
     </repository>
     <snapshotRepository>
       <id>paca</id>
-      <url>https://paca.fokus.fraunhofer.de/repository/maven-snapshots/</url>
+      <url>https://paca.okd.fokus.fraunhofer.de/repository/maven-snapshots/</url>
     </snapshotRepository>
   </distributionManagement>
  
@@ -45,17 +45,17 @@
     <dependency>
       <groupId>com.fasterxml.jackson.core</groupId>
       <artifactId>jackson-core</artifactId>
-      <version>2.9.6</version>
+      <version>2.9.8</version>
     </dependency>
     <dependency>
       <groupId>com.fasterxml.jackson.core</groupId>
       <artifactId>jackson-annotations</artifactId>
-      <version>2.9.6</version>
+      <version>2.9.8</version>
     </dependency>
     <dependency>
       <groupId>com.fasterxml.jackson.core</groupId>
       <artifactId>jackson-databind</artifactId>
-      <version>2.9.6</version>
+      <version>2.9.8</version>
     </dependency>
     <dependency>
       <groupId>ch.qos.logback</groupId>
@@ -87,7 +87,7 @@
       </plugin>
       <plugin>
         <artifactId>maven-compiler-plugin</artifactId>
-        <version>3.7.0</version>
+        <version>3.8.1</version>
         <configuration>
           <source>1.8</source>
           <target>1.8</target>
@@ -96,7 +96,7 @@
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-shade-plugin</artifactId>
-        <version>3.1.1</version>
+        <version>3.2.1</version>
         <executions>
           <execution>
             <phase>package</phase>
diff --git a/AppController/src/main/java/eu/DECIDEh2020/appManager/models/AppDescription.java b/AppController/src/main/java/eu/DECIDEh2020/appManager/models/AppDescription.java
index 531fc6b8678995438652d0159258d80ee60e60dc..0dd7e3da4909d9d3fcdd664494bd681f3d40430a 100644
--- a/AppController/src/main/java/eu/DECIDEh2020/appManager/models/AppDescription.java
+++ b/AppController/src/main/java/eu/DECIDEh2020/appManager/models/AppDescription.java
@@ -38,6 +38,8 @@ public class AppDescription {
 	private String jenkinsEndpoint;
 	private String jenkinsToken;
 
+	private String preferredProvider;
+
 	private List<Nfr> nfrs = new ArrayList<>();
 
 	private List<Microservice> microservices = new ArrayList<>();
@@ -113,6 +115,14 @@ public class AppDescription {
 		this.jenkinsToken = jenkinsToken;
 	}
 
+	public String getPreferredProvider() {
+		return preferredProvider;
+	}
+
+	public void setPreferredProvider(String preferredProvider) {
+		this.preferredProvider = preferredProvider;
+	}
+
 	public List<Nfr> getNfrs() {
 		return nfrs;
 	}
diff --git a/AppController/src/main/java/eu/DECIDEh2020/appManager/models/Container.java b/AppController/src/main/java/eu/DECIDEh2020/appManager/models/Container.java
index 3dba4682093f3e4be19ff636700bf5b2c206de45..a286fb08531905b02173bee6ddc8231153f347b7 100644
--- a/AppController/src/main/java/eu/DECIDEh2020/appManager/models/Container.java
+++ b/AppController/src/main/java/eu/DECIDEh2020/appManager/models/Container.java
@@ -26,7 +26,8 @@ import java.util.Map;
 @JsonInclude(JsonInclude.Include.NON_EMPTY)
 public class Container {
 
-    private String name;
+    private String containerName;
+    private String containerRef;
     private String imageName;
     private String imageTag;
 
@@ -60,12 +61,20 @@ public class Container {
 
     private Map<String, JsonNode> additionalProperties = new HashMap<>();
 
-    public String getName() {
-        return name;
+    public String getContainerName() {
+        return containerName;
     }
 
-    public void setName(String name) {
-        this.name = name;
+    public void setContainerName(String containerName) {
+        this.containerName = containerName;
+    }
+
+    public String getContainerRef() {
+        return containerRef;
+    }
+
+    public void setContainerRef(String containerRef) {
+        this.containerRef = containerRef;
     }
 
     public String getImageName() {
diff --git a/AppController/src/main/java/eu/DECIDEh2020/appManager/models/HistoryEntry.java b/AppController/src/main/java/eu/DECIDEh2020/appManager/models/HistoryEntry.java
index e78fd7ea38eb526972abbb4422baca48f33d7121..dba1e98fd862cd895d2b52e59a2f100b38737a5c 100644
--- a/AppController/src/main/java/eu/DECIDEh2020/appManager/models/HistoryEntry.java
+++ b/AppController/src/main/java/eu/DECIDEh2020/appManager/models/HistoryEntry.java
@@ -26,7 +26,7 @@ public class HistoryEntry {
 
     private String date;
 
-    private SchemaElement schema = new SchemaElement();
+    private List<SchemaElement> schema = new ArrayList<>();
 
     private List<ObjectNode> slaBreaches = new ArrayList<>();
 
@@ -38,11 +38,11 @@ public class HistoryEntry {
         this.date = date;
     }
 
-    public SchemaElement getSchema() {
+    public List<SchemaElement> getSchema() {
         return schema;
     }
 
-    public void setSchema(SchemaElement schema) {
+    public void setSchema(List<SchemaElement> schema) {
         this.schema = schema;
     }
 
diff --git a/AppController/src/main/java/eu/DECIDEh2020/appManager/models/InfrastructureRequirements.java b/AppController/src/main/java/eu/DECIDEh2020/appManager/models/InfrastructureRequirements.java
index 3bae78121a04d025d6d5b25b9097894e398ea186..8450b4989e354dbebea1204ba3e352f648775335 100644
--- a/AppController/src/main/java/eu/DECIDEh2020/appManager/models/InfrastructureRequirements.java
+++ b/AppController/src/main/java/eu/DECIDEh2020/appManager/models/InfrastructureRequirements.java
@@ -21,37 +21,45 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include;
 @JsonInclude(Include.NON_EMPTY)
 public class InfrastructureRequirements {
 
-	private String minDisk, maxDisk, minRam, maxRam;
+	private Integer cpuCores, minDisk, maxDisk, minRam, maxRam;
 
-	public String getMinDisk() {
+	public Integer getCpuCores() {
+		return cpuCores;
+	}
+
+	public void setCpuCores(Integer cpuCores) {
+		this.cpuCores = cpuCores;
+	}
+
+	public Integer getMinDisk() {
 		return minDisk;
 	}
 
-	public void setMinDisk(String minDisk) {
+	public void setMinDisk(Integer minDisk) {
 		this.minDisk = minDisk;
 	}
 
-	public String getMaxDisk() {
+	public Integer getMaxDisk() {
 		return maxDisk;
 	}
 
-	public void setMaxDisk(String maxDisk) {
+	public void setMaxDisk(Integer maxDisk) {
 		this.maxDisk = maxDisk;
 	}
 
-	public String getMinRam() {
+	public Integer getMinRam() {
 		return minRam;
 	}
 
-	public void setMinRam(String minRam) {
+	public void setMinRam(Integer minRam) {
 		this.minRam = minRam;
 	}
 
-	public String getMaxRam() {
+	public Integer getMaxRam() {
 		return maxRam;
 	}
 
-	public void setMaxRam(String maxRam) {
+	public void setMaxRam(Integer maxRam) {
 		this.maxRam = maxRam;
 	}
 
diff --git a/AppController/src/main/java/eu/DECIDEh2020/appManager/models/Pattern.java b/AppController/src/main/java/eu/DECIDEh2020/appManager/models/Pattern.java
index 57d1a8490e2d1f562d851787cadf1b0e7a4efc9e..0d1b601e5fabd26515abbe9d0210d2f3a69b43ad 100644
--- a/AppController/src/main/java/eu/DECIDEh2020/appManager/models/Pattern.java
+++ b/AppController/src/main/java/eu/DECIDEh2020/appManager/models/Pattern.java
@@ -26,6 +26,9 @@ import java.util.Map;
 
 @JsonInclude(Include.NON_EMPTY)
 public class Pattern {
+
+    private Boolean isOptional = false;
+
     private String title;
 
     private String uriRef;
@@ -40,6 +43,8 @@ public class Pattern {
 
     private Map<String, JsonNode> additionalProperties = new HashMap<>();
 
+    public Boolean getIsOptional() { return isOptional; }
+
     public String getTitle() {
         return title;
     }
diff --git a/AppController/src/main/java/eu/DECIDEh2020/appManager/models/ScalabilityNfr.java b/AppController/src/main/java/eu/DECIDEh2020/appManager/models/ScalabilityNfr.java
index 1048332288b6f784dccfc9c1189a690635f2cf97..3fa90475f4fef4f5a65fc1be9bb0333eadff211f 100644
--- a/AppController/src/main/java/eu/DECIDEh2020/appManager/models/ScalabilityNfr.java
+++ b/AppController/src/main/java/eu/DECIDEh2020/appManager/models/ScalabilityNfr.java
@@ -23,7 +23,7 @@ public class ScalabilityNfr extends Nfr {
 
     private String abstractValue;
 
-    private Double value;
+    private Integer value;
 
     private String unit;
 
@@ -35,11 +35,11 @@ public class ScalabilityNfr extends Nfr {
         this.abstractValue = abstractValue;
     }
 
-    public Double getValue() {
+    public Integer getValue() {
         return value;
     }
 
-    public void setValue(Double value) {
+    public void setValue(Integer value) {
         this.value = value;
     }
 
diff --git a/AppController/src/main/java/eu/DECIDEh2020/appManager/persistence/GitHandler.java b/AppController/src/main/java/eu/DECIDEh2020/appManager/persistence/GitHandler.java
index 762c4bc01832d54925e1e0d1dc34c00482f94080..cc5a5b14ea6b2355640bdc806c3c2f145e507f4e 100644
--- a/AppController/src/main/java/eu/DECIDEh2020/appManager/persistence/GitHandler.java
+++ b/AppController/src/main/java/eu/DECIDEh2020/appManager/persistence/GitHandler.java
@@ -287,7 +287,7 @@ public class GitHandler {
 
     public void pullFromRepo() throws GitAPIException {
 		try {
-			PullResult result = git.pull().setCredentialsProvider(cp).setStrategy(MergeStrategy.RESOLVE).call();
+			PullResult result = git.pull().setCredentialsProvider(cp).setStrategy(MergeStrategy.RECURSIVE).call();
 			if (result.isSuccessful()) {
 				return;
             }
diff --git a/AppController/src/main/resources/application_description.schema.json b/AppController/src/main/resources/application_description.schema.json
index 6b8da68851621caa2eb40779a3fc50cff7201dd1..f9b0a70c2fe8d651668e55602190eaf7245c2af0 100644
--- a/AppController/src/main/resources/application_description.schema.json
+++ b/AppController/src/main/resources/application_description.schema.json
@@ -34,6 +34,9 @@
     "jenkinsToken": {
       "type": "string"
     },
+    "preferredProvider": {
+      "type": "string"
+    },
     "monitoring": {
       "$ref": "#/definitions/Monitoring"
     },
@@ -388,6 +391,9 @@
         "containerName": {
           "type": "string"
         },
+        "containerRef": {
+          "type": "string"
+        },
         "imageName": {
           "type": "string"
         },
@@ -489,6 +495,9 @@
       "type": "object",
       "required": [ "minDisk", "maxDisk", "minRam", "maxRam" ],
       "properties": {
+        "cpuCores": {
+          "type": "integer"
+        },
         "minDisk": {
           "type": "integer"
         },
diff --git a/AppController/src/main/resources/optimus_history.schema.json b/AppController/src/main/resources/optimus_history.schema.json
index a9ba6d9c0098dd4e59840d2361b18cbd61b399a3..c493e60ac2cee240696254c675fb6874567657c5 100644
--- a/AppController/src/main/resources/optimus_history.schema.json
+++ b/AppController/src/main/resources/optimus_history.schema.json
@@ -17,23 +17,9 @@
           "format": "date-time"
         },
         "schema": {
-          "type": "object",
-          "properties": {
-            "microservices": {
-              "type": "array",
-              "items": {
-                "type": "string",
-                "format": "uuid"
-              },
-              "minItems": 1,
-              "uniqueItems": true
-            },
-            "csId": {
-              "type": "string"
-            },
-            "index": {
-              "type": "number"
-            }
+          "type": "array",
+          "items": {
+            "$ref": "#/definitions/SchemaElement"
           }
         },
         "slaBreaches": {
@@ -43,6 +29,26 @@
           }
         }
       }
+    },
+    "SchemaElement": {
+      "type": "object",
+      "properties": {
+        "microservices": {
+          "type": "array",
+          "items": {
+            "type": "string",
+            "format": "uuid"
+          },
+          "minItems": 1,
+          "uniqueItems": true
+        },
+        "csId": {
+          "type": "string"
+        },
+        "index": {
+          "type": "number"
+        }
+      }
     }
   }
 }
diff --git a/AppController/src/test/java/eu/DECIDEh2020/appManager/AppManagerTest.java b/AppController/src/test/java/eu/DECIDEh2020/appManager/AppManagerTest.java
index bc660bcaef5b2572c13ccff1867b3b79e76262c0..398ceb67de1ba85606aca74094573e2903bc7663 100644
--- a/AppController/src/test/java/eu/DECIDEh2020/appManager/AppManagerTest.java
+++ b/AppController/src/test/java/eu/DECIDEh2020/appManager/AppManagerTest.java
@@ -40,8 +40,10 @@ public class AppManagerTest {
         Path path = FileSystems.getDefault().getPath(LOCAL_REPO_PATH);
         try {
             AppManager manager = AppManager.open(path);
+            manager.sync();
             AppDescription app = manager.getAppDescription();
             app.getAdditionalProperties().forEach((key, value) -> log.debug("{} - {}", key, value));
+
         } catch (DECIDEValidationException e) {
             log.error("validation", e);
         } catch (AppManagerException e) {
@@ -56,7 +58,8 @@ public class AppManagerTest {
     public void openRemoteRepository() {
         try {
             Path path = Files.createTempDirectory("decide_");
-            AppManager manager = AppManager.open(REMOTE_REPO_REF, REMOTE_REPO_USERNAME, REMOTE_REPO_PASSWORD, path);
+//            AppManager manager = AppManager.open("https://git.code.tecnalia.com/j2018b/106779.git", "a_CDddDa21qvznTPbsG7", path);
+            AppManager manager = AppManager.open("https://git.code.tecnalia.com/decide/SockShop_AppDescription.git", "Hz5t-ZiqWm-4JCm__d9u", path);
             AppDescription app = manager.getAppDescription();
             app.getAdditionalProperties().forEach((key, value) -> log.debug("{} - {}", key, value));
         } catch (DECIDEValidationException e) {
diff --git a/DevOpsFramework/optimus-web/components/loading-placeholder/loading-placeholder.component.html b/DevOpsFramework/optimus-web/components/loading-placeholder/loading-placeholder.component.html
new file mode 100644
index 0000000000000000000000000000000000000000..6fc1b517d7787c1d36229132ea53bf67310b69d1
--- /dev/null
+++ b/DevOpsFramework/optimus-web/components/loading-placeholder/loading-placeholder.component.html
@@ -0,0 +1,3 @@
+<div class="placeholder-animation"
+     [ngStyle]="{'height': height, 'width': width}">
+</div>
diff --git a/DevOpsFramework/optimus-web/components/loading-placeholder/loading-placeholder.component.scss b/DevOpsFramework/optimus-web/components/loading-placeholder/loading-placeholder.component.scss
new file mode 100644
index 0000000000000000000000000000000000000000..f2d9b05dd6f5f63a7b4cec6fc5b8abe33b9b51af
--- /dev/null
+++ b/DevOpsFramework/optimus-web/components/loading-placeholder/loading-placeholder.component.scss
@@ -0,0 +1,22 @@
+@import "../../styles/colors";
+
+@keyframes placeHolderShimmer {
+  0% {
+    background-position: -468px 0
+  }
+  100% {
+    background-position: 468px 0
+  }
+}
+
+.placeholder-animation {
+  animation-duration: 1.25s;
+  animation-fill-mode: forwards;
+  animation-iteration-count: infinite;
+  animation-name: placeHolderShimmer;
+  animation-timing-function: linear;
+  background: darkgray;
+  background: linear-gradient(to right, $light-grey 10%, #dddddd 18%, #eeeeee 33%);
+  position: relative;
+  background-size: 1000px 100px
+}
diff --git a/DevOpsFramework/optimus-web/components/loading-placeholder/loading-placeholder.component.spec.ts b/DevOpsFramework/optimus-web/components/loading-placeholder/loading-placeholder.component.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2018ccbfbdcd829f6f2cc7ade3320e934b776c9b
--- /dev/null
+++ b/DevOpsFramework/optimus-web/components/loading-placeholder/loading-placeholder.component.spec.ts
@@ -0,0 +1,25 @@
+import {async, ComponentFixture, TestBed} from '@angular/core/testing';
+
+import {LoadingPlaceholderComponent} from './loading-placeholder.component';
+
+describe('LoadingPlaceholderComponent', () => {
+  let component: LoadingPlaceholderComponent;
+  let fixture: ComponentFixture<LoadingPlaceholderComponent>;
+
+  beforeEach(async(() => {
+    TestBed.configureTestingModule({
+      declarations: [LoadingPlaceholderComponent]
+    })
+      .compileComponents();
+  }));
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(LoadingPlaceholderComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/DevOpsFramework/optimus-web/components/loading-placeholder/loading-placeholder.component.ts b/DevOpsFramework/optimus-web/components/loading-placeholder/loading-placeholder.component.ts
new file mode 100644
index 0000000000000000000000000000000000000000..16f8712f526d39db772c65f4d678a66bd8bda65c
--- /dev/null
+++ b/DevOpsFramework/optimus-web/components/loading-placeholder/loading-placeholder.component.ts
@@ -0,0 +1,40 @@
+/*********************************************************************
+* Copyright (c) 2019 Tecnalia.
+*
+* This program and the accompanying materials are made
+* available under the terms of the MIT license
+*
+* SPDX-License-Identifier: MIT
+* Contributors (in alphabetical order):
+* Alberto Molinuevo                         Tecnalia
+* Gorka Benguria                            Tecnalia
+* Inaki Etxaniz                             Tecnalia
+* Inigo Iparraguirre                        Tecnalia
+* Juncal Alonso                             Tecnalia
+* Leire Orue-Echevarria                     Tecnalia
+* Maria Jose Lopez                          Tecnalia
+* Marisa Escalante                          Tecnalia
+*
+* Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+**********************************************************************/
+
+
+import {Component, Input, OnInit} from '@angular/core';
+
+@Component({
+  selector: 'app-loading-placeholder',
+  templateUrl: './loading-placeholder.component.html',
+  styleUrls: ['./loading-placeholder.component.scss']
+})
+export class LoadingPlaceholderComponent implements OnInit {
+
+  @Input() height: string;
+  @Input() width: string;
+
+  constructor() {
+  }
+
+  ngOnInit() {
+  }
+
+}
diff --git a/DevOpsFramework/optimus-web/components/simulation-provider/simulation-provider.component.css b/DevOpsFramework/optimus-web/components/simulation-provider/simulation-provider.component.css
new file mode 100644
index 0000000000000000000000000000000000000000..c43a0aff1802528bc385e94d2756d4a2cef5474d
--- /dev/null
+++ b/DevOpsFramework/optimus-web/components/simulation-provider/simulation-provider.component.css
@@ -0,0 +1,9 @@
+.label-margin {
+    margin: 10px;
+}
+
+.provider-combo {
+    max-width: 300px;
+    display: flex;
+    
+}
\ No newline at end of file
diff --git a/DevOpsFramework/optimus-web/components/simulation-provider/simulation-provider.component.html b/DevOpsFramework/optimus-web/components/simulation-provider/simulation-provider.component.html
new file mode 100644
index 0000000000000000000000000000000000000000..7a5983a5b1a6af43622d70408bbd9a4adfc868d7
--- /dev/null
+++ b/DevOpsFramework/optimus-web/components/simulation-provider/simulation-provider.component.html
@@ -0,0 +1,8 @@
+<mat-label class=label-margin>Select Provider</mat-label>
+<div class=provider-combo>
+  <mat-select>
+    <mat-option *ngFor="let provider of providers" [value]="provider.value">
+      {{provider.value}}
+    </mat-option>
+  </mat-select>
+</div>
diff --git a/DevOpsFramework/optimus-web/components/simulation-provider/simulation-provider.component.spec.ts b/DevOpsFramework/optimus-web/components/simulation-provider/simulation-provider.component.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b6183295bd31bfe58ced5c468dbcdb13f6facbb4
--- /dev/null
+++ b/DevOpsFramework/optimus-web/components/simulation-provider/simulation-provider.component.spec.ts
@@ -0,0 +1,25 @@
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { SimulationProviderComponent } from './simulation-provider.component';
+
+describe('SimulationProviderComponent', () => {
+  let component: SimulationProviderComponent;
+  let fixture: ComponentFixture<SimulationProviderComponent>;
+
+  beforeEach(async(() => {
+    TestBed.configureTestingModule({
+      declarations: [ SimulationProviderComponent ]
+    })
+    .compileComponents();
+  }));
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(SimulationProviderComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/DevOpsFramework/optimus-web/components/simulation-provider/simulation-provider.component.ts b/DevOpsFramework/optimus-web/components/simulation-provider/simulation-provider.component.ts
new file mode 100644
index 0000000000000000000000000000000000000000..cf9d73cf750d5aef1588e8d4cb4283d5a235619d
--- /dev/null
+++ b/DevOpsFramework/optimus-web/components/simulation-provider/simulation-provider.component.ts
@@ -0,0 +1,63 @@
+/*********************************************************************
+* Copyright (c) 2019 Tecnalia.
+*
+* This program and the accompanying materials are made
+* available under the terms of the MIT license
+*
+* SPDX-License-Identifier: MIT
+* Contributors (in alphabetical order):
+* Alberto Molinuevo                         Tecnalia
+* Gorka Benguria                            Tecnalia
+* Inaki Etxaniz                             Tecnalia
+* Inigo Iparraguirre                        Tecnalia
+* Juncal Alonso                             Tecnalia
+* Leire Orue-Echevarria                     Tecnalia
+* Maria Jose Lopez                          Tecnalia
+* Marisa Escalante                          Tecnalia
+*
+* Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+**********************************************************************/
+
+
+import { Component, OnInit } from '@angular/core';
+import { ApplicationDescriptionService } from '../../services/application-description.service';
+import { Observable } from 'rxjs';
+import { map, catchError } from 'rxjs/operators';
+
+interface Provider {
+  code: string,
+  value: String
+}
+
+@Component({
+  selector: 'app-simulation-provider',
+  templateUrl: './simulation-provider.component.html',
+  styleUrls: ['./simulation-provider.component.css']
+})
+export class SimulationProviderComponent implements OnInit {
+
+  private providers: any;
+  constructor(private applicationService: ApplicationDescriptionService) { }
+
+  ngOnInit() {
+    this.applicationService.getApplicationProviders()
+    .pipe(
+      map(
+        (provider: [Provider]) => {
+          this.providers = provider;
+        }
+      ),
+      catchError( (error) => {
+        return Observable.throw(error.json().error || 'Server error');
+      }))
+    .subscribe(
+        data => {
+          if(data != null){
+            console.log(data)
+          }
+        },
+        error => {                
+            console.log("Error getting providers")
+    });
+  }
+}
diff --git a/DevOpsFramework/optimus-web/components/simulation-result/simulation-result.component.css b/DevOpsFramework/optimus-web/components/simulation-result/simulation-result.component.css
new file mode 100644
index 0000000000000000000000000000000000000000..50f8f91ebe324575d3fea1e4aadd2f708c924b49
--- /dev/null
+++ b/DevOpsFramework/optimus-web/components/simulation-result/simulation-result.component.css
@@ -0,0 +1,32 @@
+.button {
+    margin: 10px;
+    background-color: #0277bc;
+    color: white;
+}
+
+.button-select {
+    margin: 10px;
+    background-color: lightgreen;
+}
+
+.ms-card {
+    background-color: rgb(160, 151, 151);
+    display: flex;
+    margin: 5px;
+    padding: 5px;
+}
+
+.ms-wrapper-card {
+    margin: 5px;
+    display: block;
+}
+.schema-wrapper {
+    margin: 10px;
+    padding: 10px;
+
+    
+}
+
+.schema-wrapper.selected {
+    border: 2px solid rgb(71, 248, 71);
+}
\ No newline at end of file
diff --git a/DevOpsFramework/optimus-web/components/simulation-result/simulation-result.component.html b/DevOpsFramework/optimus-web/components/simulation-result/simulation-result.component.html
new file mode 100644
index 0000000000000000000000000000000000000000..4756dfc2880c272ad7f4c9294f3ef3ff9afe9a85
--- /dev/null
+++ b/DevOpsFramework/optimus-web/components/simulation-result/simulation-result.component.html
@@ -0,0 +1,43 @@
+<div>
+  <app-simulation-provider></app-simulation-provider>
+  <div>
+    <button class="button" mat-raised-button (click)="onSimulate()"> 
+        {{'Simulate'}}
+      </button>
+      <button class="button" mat-raised-button (click)="onClearResults()"> 
+        {{'Clear'}}
+      </button>
+      <button class="button" mat-raised-button (click)="onSaveResults()"> 
+          {{'Save'}}
+        </button>
+  </div>
+
+  <div *ngIf="simulationResults.length > 0">
+    <div 
+    [@listAnimation]="simulationResults.length"
+      (@listAnimation.start)="logAnimation($event)"
+      (@listAnimation.done)="logAnimation($event)"
+    >
+      <div #schemawrapper class="schema-wrapper">
+        <h3>Schema 1</h3>
+        <div>
+          <button #schemaselectbutton class="button-select" mat-raised-button (click)="onSelectSchema(1)"> 
+              <fa-icon *ngIf="selectedSchema==1" [icon]="checkedIcon"></fa-icon>
+              {{'Select Schema'}}
+            </button>
+        </div>
+        <mat-list-item *ngFor="let i of simulationResults">
+          <mat-card class="card card-flex ms-wrapper-card" (click)="onSelectResult(service, id)">
+              <h4> csId: {{i.csId}} </h4>
+              <!-- <h4> index: {{i.index}}</h4> -->
+              <mat-list-item *ngFor="let ms of i.microservices">
+                <mat-card class="card card-flex ms-card">
+                  <p class="card-text">{{searchMicroserviceNameById(simulationMicroservices,ms)}}</p> 
+                </mat-card>
+              </mat-list-item>
+          </mat-card>
+      </mat-list-item>
+      </div>
+    </div>
+  </div>
+</div>
diff --git a/DevOpsFramework/optimus-web/components/simulation-result/simulation-result.component.spec.ts b/DevOpsFramework/optimus-web/components/simulation-result/simulation-result.component.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..310bb3bdee14a913a880020271a26fa6843f67ff
--- /dev/null
+++ b/DevOpsFramework/optimus-web/components/simulation-result/simulation-result.component.spec.ts
@@ -0,0 +1,28 @@
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { MaterialModule } from '../../../modules/material.module';
+import { SimulationResultComponent } from './simulation-result.component';
+import { NgxSpinnerModule, NgxSpinnerComponent } from 'ngx-spinner';
+import { HttpClientTestingModule } from '@angular/common/http/testing';
+
+describe('SimulationResultComponent', () => {
+  let component: SimulationResultComponent;
+  let fixture: ComponentFixture<SimulationResultComponent>;
+
+  beforeEach(async(() => {
+    TestBed.configureTestingModule({
+      imports: [ NgxSpinnerModule, MaterialModule, HttpClientTestingModule],
+      declarations: [ SimulationResultComponent, NgxSpinnerComponent ]
+    })
+    .compileComponents();
+  }));
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(SimulationResultComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/DevOpsFramework/optimus-web/components/simulation-result/simulation-result.component.ts b/DevOpsFramework/optimus-web/components/simulation-result/simulation-result.component.ts
new file mode 100644
index 0000000000000000000000000000000000000000..52869141482455b43968640664dd651d77a1c1a9
--- /dev/null
+++ b/DevOpsFramework/optimus-web/components/simulation-result/simulation-result.component.ts
@@ -0,0 +1,123 @@
+/*********************************************************************
+* Copyright (c) 2019 Tecnalia.
+*
+* This program and the accompanying materials are made
+* available under the terms of the MIT license
+*
+* SPDX-License-Identifier: MIT
+* Contributors (in alphabetical order):
+* Alberto Molinuevo                         Tecnalia
+* Gorka Benguria                            Tecnalia
+* Inaki Etxaniz                             Tecnalia
+* Inigo Iparraguirre                        Tecnalia
+* Juncal Alonso                             Tecnalia
+* Leire Orue-Echevarria                     Tecnalia
+* Maria Jose Lopez                          Tecnalia
+* Marisa Escalante                          Tecnalia
+*
+* Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+**********************************************************************/
+
+
+import { Component, ViewChild, OnInit, ElementRef, Renderer2 } from '@angular/core';
+import { ApplicationDescriptionService } from '../../services/application-description.service';
+import { Observable, Subscription, of, from } from 'rxjs';
+import { delay, concatMap } from 'rxjs/operators';
+import { trigger, transition, style, animate, query, stagger } from '@angular/animations';
+import { NgxSpinnerService } from 'ngx-spinner';
+import { faCheck } from '@fortawesome/free-solid-svg-icons';
+
+
+@Component({
+  selector: 'simulation-result',
+  templateUrl: './simulation-result.component.html',
+  animations: [
+    trigger('listAnimation', [
+      transition('* => *', [ // each time the binding value changes
+        query(':leave', [
+          stagger(100, [
+            animate('0.5s', style({ opacity: 0 }))
+          ])
+        ], { optional: true }),
+        query(':enter', [
+          style({ opacity: 0 }),
+          stagger(100, [
+            animate('0.5s', style({ opacity: 1 }))
+          ])
+        ], { optional: true })
+      ])
+    ])
+  ],
+  styleUrls: ['./simulation-result.component.css']
+})
+export class SimulationResultComponent implements OnInit {
+  @ViewChild('schemaselectbutton') schemabuttonRef: ElementRef;
+  @ViewChild('schemawrapper') schemawrapperRef: ElementRef;
+  first: string;
+  second: string;
+  third: number;
+  thirdSubscription: Subscription;
+  simulationResults = [];
+  simulationMicroservices = null;
+  results_loading = false;
+  checkedIcon = faCheck;
+  selectedSchema = 0; 
+  constructor(
+    private applicationService: ApplicationDescriptionService,
+    private spinner: NgxSpinnerService,
+    private renderer: Renderer2
+    ) { }
+
+  ngOnInit() {
+
+  }
+
+  logAnimation(_event) {
+    console.log(_event)
+  }
+
+  searchMicroserviceNameById(arr: Array<Object>, id: string): string {
+    console.log("Map microservice name:")
+    for (let i=0; i < arr.length; i++) {
+      if (arr[i]["id"] == id)
+        return arr[i]["name"];
+    }
+    return id;
+  }
+
+  onSelectSchema(index: number) {
+    this.selectedSchema = index;
+    this.renderer.addClass(this.schemawrapperRef.nativeElement, "selected");
+    this.renderer.addClass(this.schemabuttonRef.nativeElement, "selected")
+  }
+
+  onClearResults() {
+    this.simulationResults = []; // Clear elements
+    this.simulationMicroservices = null;
+    this.selectedSchema = 0;
+    this.spinner.hide();
+  }
+
+  onSaveResults() {
+    // TODO: Write to Decide.json object
+    // Get DecideProject
+    // this.applciationService.saveSelectedSchema();
+    // this.applicationService.getApplicationDescription(project)
+    // Save wisth selected schema
+  }
+
+  onSimulate() {
+    this.onClearResults();
+    this.spinner.show();
+    this.applicationService.getMockSimulationResults()
+    .pipe(delay(500))
+    .subscribe(
+        (data) => {
+          this.simulationMicroservices = data['microservices'];
+          this.simulationResults = data['schema'];
+        },
+        (error) => console.log(error),
+        () => this.spinner.hide()
+      );
+  }
+}
diff --git a/DevOpsFramework/optimus-web/core/core.module.ts b/DevOpsFramework/optimus-web/core/core.module.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c7b1e2c2e27165e57625735211974f6f469e1788
--- /dev/null
+++ b/DevOpsFramework/optimus-web/core/core.module.ts
@@ -0,0 +1,57 @@
+/*********************************************************************
+* Copyright (c) 2019 Tecnalia.
+*
+* This program and the accompanying materials are made
+* available under the terms of the MIT license
+*
+* SPDX-License-Identifier: MIT
+* Contributors (in alphabetical order):
+* Alberto Molinuevo                         Tecnalia
+* Gorka Benguria                            Tecnalia
+* Inaki Etxaniz                             Tecnalia
+* Inigo Iparraguirre                        Tecnalia
+* Juncal Alonso                             Tecnalia
+* Leire Orue-Echevarria                     Tecnalia
+* Maria Jose Lopez                          Tecnalia
+* Marisa Escalante                          Tecnalia
+*
+* Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+**********************************************************************/
+
+
+import { NgModule, Optional, SkipSelf} from '@angular/core';
+import { ProgressBarService } from './services/progress-bar.service';
+import { TimingInterceptor } from './interceptors/timing.interceptor';
+import { HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http';
+import { ProgressInterceptor } from './interceptors/progress.interceptor';
+import { BrowserModule } from '@angular/platform-browser';
+import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
+//import { TranslateModule } from '@ngx-translate/core';
+import { RouterModule } from '@angular/router';
+
+@NgModule({
+  imports: [
+    BrowserModule,
+    BrowserAnimationsModule,
+    //TranslateModule.forChild(),
+    RouterModule,
+    HttpClientModule
+  ],
+  exports: [
+    BrowserModule,
+    BrowserAnimationsModule,
+    HttpClientModule
+  ],
+  providers: [
+    {provide: HTTP_INTERCEPTORS, useClass: ProgressInterceptor, multi: true, deps: [ProgressBarService]},
+    {provide: HTTP_INTERCEPTORS, useClass: TimingInterceptor, multi: true}
+  ]
+})
+
+export class CoreModule {
+  constructor(@Optional() @SkipSelf() parentModule: CoreModule) {
+    if (parentModule) {
+      throw new Error(`CoreModule has already been loaded. Import Core modules in the AppModule only.`);
+    }
+  }
+}
diff --git a/DevOpsFramework/optimus-web/core/interceptors/progress.interceptor.ts b/DevOpsFramework/optimus-web/core/interceptors/progress.interceptor.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a8a26ea001a45d9f8f903cbc8f0ffda2cf1d4ef6
--- /dev/null
+++ b/DevOpsFramework/optimus-web/core/interceptors/progress.interceptor.ts
@@ -0,0 +1,41 @@
+/*********************************************************************
+* Copyright (c) 2019 Tecnalia.
+*
+* This program and the accompanying materials are made
+* available under the terms of the MIT license
+*
+* SPDX-License-Identifier: MIT
+* Contributors (in alphabetical order):
+* Alberto Molinuevo                         Tecnalia
+* Gorka Benguria                            Tecnalia
+* Inaki Etxaniz                             Tecnalia
+* Inigo Iparraguirre                        Tecnalia
+* Juncal Alonso                             Tecnalia
+* Leire Orue-Echevarria                     Tecnalia
+* Maria Jose Lopez                          Tecnalia
+* Marisa Escalante                          Tecnalia
+*
+* Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+**********************************************************************/
+
+
+import {tap} from 'rxjs/operators';
+import {HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpResponse} from '@angular/common/http';
+import {Observable} from 'rxjs';
+import {ProgressBarService} from '../services/progress-bar.service';
+
+export class ProgressInterceptor implements HttpInterceptor {
+  constructor(private progressBarService: ProgressBarService) {
+  }
+
+  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
+    this.progressBarService.increase();
+    return next
+      .handle(req).pipe(
+        tap(event => {
+          if (event instanceof HttpResponse) {
+            this.progressBarService.decrease();
+          }
+        }));
+  }
+}
diff --git a/DevOpsFramework/optimus-web/core/interceptors/timing.interceptor.ts b/DevOpsFramework/optimus-web/core/interceptors/timing.interceptor.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9aa1bf3b9d5db38cf015d9858d4f160536637e6e
--- /dev/null
+++ b/DevOpsFramework/optimus-web/core/interceptors/timing.interceptor.ts
@@ -0,0 +1,42 @@
+/*********************************************************************
+* Copyright (c) 2019 Tecnalia.
+*
+* This program and the accompanying materials are made
+* available under the terms of the MIT license
+*
+* SPDX-License-Identifier: MIT
+* Contributors (in alphabetical order):
+* Alberto Molinuevo                         Tecnalia
+* Gorka Benguria                            Tecnalia
+* Inaki Etxaniz                             Tecnalia
+* Inigo Iparraguirre                        Tecnalia
+* Juncal Alonso                             Tecnalia
+* Leire Orue-Echevarria                     Tecnalia
+* Maria Jose Lopez                          Tecnalia
+* Marisa Escalante                          Tecnalia
+*
+* Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+**********************************************************************/
+
+
+import {tap} from 'rxjs/operators';
+import {HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpResponse} from '@angular/common/http';
+import {Observable} from 'rxjs';
+import {LoggerService} from '../services/logger.service';
+
+export class TimingInterceptor implements HttpInterceptor {
+  constructor() {
+  }
+
+  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
+    const started = Date.now();
+    return next
+      .handle(req).pipe(
+        tap(event => {
+          if (event instanceof HttpResponse) {
+            const elapsed = Date.now() - started;
+            LoggerService.log(`Request for ${req.urlWithParams} took ${elapsed} ms.`);
+          }
+        }));
+  }
+}
diff --git a/DevOpsFramework/optimus-web/core/services/logger.service.spec.ts b/DevOpsFramework/optimus-web/core/services/logger.service.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..bff9d1535cb430be4f66890ab5eb783af4bc7ac9
--- /dev/null
+++ b/DevOpsFramework/optimus-web/core/services/logger.service.spec.ts
@@ -0,0 +1,21 @@
+import {TestBed} from '@angular/core/testing';
+import {LoggerService} from './logger.service';
+
+describe('LoggerService', () => {
+  let loggerService;
+  beforeEach(() => {
+    TestBed.configureTestingModule({
+      providers: [
+        LoggerService
+      ]
+    });
+
+    loggerService = TestBed.get(LoggerService);
+  });
+
+  it('should log without errors', (() => {
+    expect(loggerService).toBeDefined();
+    expect(LoggerService.error('This is an error')).toBeUndefined();
+    expect(LoggerService.log('This is a log')).toBeUndefined();
+  }));
+});
diff --git a/DevOpsFramework/optimus-web/core/services/logger.service.ts b/DevOpsFramework/optimus-web/core/services/logger.service.ts
new file mode 100644
index 0000000000000000000000000000000000000000..05d4d627d80ab9150d3c493ada6911f6a74af6a3
--- /dev/null
+++ b/DevOpsFramework/optimus-web/core/services/logger.service.ts
@@ -0,0 +1,35 @@
+/*********************************************************************
+* Copyright (c) 2019 Tecnalia.
+*
+* This program and the accompanying materials are made
+* available under the terms of the MIT license
+*
+* SPDX-License-Identifier: MIT
+* Contributors (in alphabetical order):
+* Alberto Molinuevo                         Tecnalia
+* Gorka Benguria                            Tecnalia
+* Inaki Etxaniz                             Tecnalia
+* Inigo Iparraguirre                        Tecnalia
+* Juncal Alonso                             Tecnalia
+* Leire Orue-Echevarria                     Tecnalia
+* Maria Jose Lopez                          Tecnalia
+* Marisa Escalante                          Tecnalia
+*
+* Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+**********************************************************************/
+
+
+import {Injectable} from '@angular/core';
+
+@Injectable({
+  providedIn: 'root'
+})
+export class LoggerService {
+  static log(msg: string): void {
+    console.log(msg);
+  }
+
+  static error(msg: string, obj = {}): void {
+    console.error(msg, obj);
+  }
+}
diff --git a/DevOpsFramework/optimus-web/core/services/progress-bar.service.spec.ts b/DevOpsFramework/optimus-web/core/services/progress-bar.service.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..7fb86e210cf6c7a0579d70a764f34b7e8afdf0a2
--- /dev/null
+++ b/DevOpsFramework/optimus-web/core/services/progress-bar.service.spec.ts
@@ -0,0 +1,49 @@
+import {TestBed} from '@angular/core/testing';
+import {ProgressBarService} from './progress-bar.service';
+import {TestsModule} from '../../modules/tests.module';
+import {TranslateModule} from '@ngx-translate/core';
+//import {HeroService} from '../../modules/heroes/shared/hero.service';
+import {APP_CONFIG, AppConfig} from '../../configs/app.config';
+
+describe('ProgressBarService', () => {
+  let progressBarService;
+  let heroService;
+
+  beforeEach(() => {
+    TestBed.configureTestingModule({
+      imports: [
+        TestsModule,
+        TranslateModule.forRoot(),
+      ],
+      providers: [
+        {provide: APP_CONFIG, useValue: AppConfig},
+        ProgressBarService,
+        //HeroService
+      ]
+    });
+
+    progressBarService = TestBed.get(ProgressBarService);
+    //heroService = TestBed.get(HeroService);
+  });
+
+  it('should not be requestsRunning', (() => {
+    const instance = new ProgressBarService();
+    expect(instance).toBeTruthy();
+  }));
+
+  it('should not be requestsRunning', (() => {
+    expect(progressBarService.requestsRunning).toBe(0);
+  }));
+
+  it('should increase and decrease the counter of requests running', (() => {
+    progressBarService.increase();
+    progressBarService.increase();
+    expect(progressBarService.requestsRunning).toBe(2);
+    progressBarService.decrease();
+    expect(progressBarService.requestsRunning).toBe(1);
+    progressBarService.decrease();
+    expect(progressBarService.requestsRunning).toBe(0);
+    progressBarService.decrease();
+    expect(progressBarService.requestsRunning).toBe(0);
+  }));
+});
diff --git a/DevOpsFramework/optimus-web/core/services/progress-bar.service.ts b/DevOpsFramework/optimus-web/core/services/progress-bar.service.ts
new file mode 100644
index 0000000000000000000000000000000000000000..7fe5eb4eebc8d2d075347cd0c9ae69eb131de0fd
--- /dev/null
+++ b/DevOpsFramework/optimus-web/core/services/progress-bar.service.ts
@@ -0,0 +1,55 @@
+/*********************************************************************
+* Copyright (c) 2019 Tecnalia.
+*
+* This program and the accompanying materials are made
+* available under the terms of the MIT license
+*
+* SPDX-License-Identifier: MIT
+* Contributors (in alphabetical order):
+* Alberto Molinuevo                         Tecnalia
+* Gorka Benguria                            Tecnalia
+* Inaki Etxaniz                             Tecnalia
+* Inigo Iparraguirre                        Tecnalia
+* Juncal Alonso                             Tecnalia
+* Leire Orue-Echevarria                     Tecnalia
+* Maria Jose Lopez                          Tecnalia
+* Marisa Escalante                          Tecnalia
+*
+* Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+**********************************************************************/
+
+
+import {EventEmitter, Injectable} from '@angular/core';
+
+@Injectable({
+  providedIn: 'root'
+})
+export class ProgressBarService {
+  public updateProgressBar$: EventEmitter<any>;
+
+  private requestsRunning = 0;
+
+  constructor() {
+    this.updateProgressBar$ = new EventEmitter();
+  }
+
+  public list(): number {
+    return this.requestsRunning;
+  }
+
+  public increase(): void {
+    this.requestsRunning++;
+    if (this.requestsRunning === 1) {
+      this.updateProgressBar$.emit('query');
+    }
+  }
+
+  public decrease(): void {
+    if (this.requestsRunning > 0) {
+      this.requestsRunning--;
+      if (this.requestsRunning === 0) {
+        this.updateProgressBar$.emit('none');
+      }
+    }
+  }
+}
diff --git a/DevOpsFramework/optimus-web/core/services/utils-helper.service.spec.ts b/DevOpsFramework/optimus-web/core/services/utils-helper.service.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e4ed6514bfda27922aca62d9b1e24e2c0c749046
--- /dev/null
+++ b/DevOpsFramework/optimus-web/core/services/utils-helper.service.spec.ts
@@ -0,0 +1,37 @@
+import {TestBed} from '@angular/core/testing';
+import {UtilsHelperService} from './utils-helper.service';
+
+describe('UtilsHelperService', () => {
+  let utilsHelperService;
+  beforeEach(() => {
+    TestBed.configureTestingModule({
+      providers: [
+        UtilsHelperService
+      ]
+    });
+
+    utilsHelperService = TestBed.get(UtilsHelperService);
+  });
+
+  it('should create instance', (() => {
+    expect(utilsHelperService).toBeDefined();
+  }));
+
+  it('should return fadeInOut trigger', (() => {
+    expect(UtilsHelperService.fadeInOut().name).toBe('fadeInOut');
+  }));
+/* 
+  it('should check if is palindrome', (() => {
+    expect(UtilsHelperService.isPalindrome('')).toBe(true);
+    expect(UtilsHelperService.isPalindrome('asd')).toBe(false);
+    expect(UtilsHelperService.isPalindrome('aas')).toBe(false);
+    expect(UtilsHelperService.isPalindrome('ass')).toBe(false);
+    expect(UtilsHelperService.isPalindrome('aassaa')).toBe(true);
+    expect(UtilsHelperService.isPalindrome('asa')).toBe(true);
+    expect(UtilsHelperService.isPalindrome('asswssa')).toBe(true);
+  }));
+
+  it('should check if browser is valid', (() => {
+    expect(UtilsHelperService.isBrowserValid()).toBe(true);
+  })); */
+});
diff --git a/DevOpsFramework/optimus-web/core/services/utils-helper.service.ts b/DevOpsFramework/optimus-web/core/services/utils-helper.service.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e9433c3061d44403df89b90bfbf098cedb2ac35b
--- /dev/null
+++ b/DevOpsFramework/optimus-web/core/services/utils-helper.service.ts
@@ -0,0 +1,81 @@
+/*********************************************************************
+* Copyright (c) 2019 Tecnalia.
+*
+* This program and the accompanying materials are made
+* available under the terms of the MIT license
+*
+* SPDX-License-Identifier: MIT
+* Contributors (in alphabetical order):
+* Alberto Molinuevo                         Tecnalia
+* Gorka Benguria                            Tecnalia
+* Inaki Etxaniz                             Tecnalia
+* Inigo Iparraguirre                        Tecnalia
+* Juncal Alonso                             Tecnalia
+* Leire Orue-Echevarria                     Tecnalia
+* Maria Jose Lopez                          Tecnalia
+* Marisa Escalante                          Tecnalia
+*
+* Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+**********************************************************************/
+
+
+import { Injectable } from '@angular/core';
+import { animate, AnimationTriggerMetadata, style, transition, trigger } from '@angular/animations';
+
+declare const require;
+//const bowser = require('bowser');
+
+@Injectable({
+  providedIn: 'root'
+})
+export class UtilsHelperService {
+  static fadeInOut(): AnimationTriggerMetadata {
+    return trigger('fadeInOut', [
+      transition(':enter', [
+        style({opacity: 0}),
+        animate(500, style({opacity: 1}))
+      ]),
+      transition(':leave', [
+        animate(500, style({opacity: 0}))
+      ])
+    ]);
+  }
+
+/*   static isPalindrome(str) {
+    const len = Math.floor(str.length / 2);
+    for (let i = 0; i < len; i++) {
+      if (str[i] !== str[str.length - i - 1]) {
+        return false;
+      }
+    }
+    return true;
+  } */
+
+/*   static isBrowserValid() {
+    const browser = bowser.getParser(window.navigator.userAgen  static isBrowserValid() {
+    const browser = bowser.getParser(window.navigator.userAgent);
+    return browser.satisfies({
+      windows: {
+        'internet explorer': '>10',
+      },
+      macos: {
+        safari: '>10.1'
+      },
+      chrome: '>20.1.1432',
+      firefox: '>31',
+      opera: '>22'
+    });
+  });
+    return browser.satisfies({
+      windows: {
+        'internet explorer': '>10',
+      },
+      macos: {
+        safari: '>10.1'
+      },
+      chrome: '>20.1.1432',
+      firefox: '>31',
+      opera: '>22'
+    });
+  } */
+}
diff --git a/DevOpsFramework/optimus-web/modules/optimus.module.ts b/DevOpsFramework/optimus-web/modules/optimus.module.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2184482737114f4f9ea20e3d546246bf1ccb0ad7
--- /dev/null
+++ b/DevOpsFramework/optimus-web/modules/optimus.module.ts
@@ -0,0 +1,59 @@
+/*********************************************************************
+* Copyright (c) 2019 Tecnalia.
+*
+* This program and the accompanying materials are made
+* available under the terms of the MIT license
+*
+* SPDX-License-Identifier: MIT
+* Contributors (in alphabetical order):
+* Alberto Molinuevo                         Tecnalia
+* Gorka Benguria                            Tecnalia
+* Inaki Etxaniz                             Tecnalia
+* Inigo Iparraguirre                        Tecnalia
+* Juncal Alonso                             Tecnalia
+* Leire Orue-Echevarria                     Tecnalia
+* Maria Jose Lopez                          Tecnalia
+* Marisa Escalante                          Tecnalia
+*
+* Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+**********************************************************************/
+
+
+import { NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { MaterialModule } from '../../modules/material.module';
+import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
+import { ScrollingModule } from '@angular/cdk/scrolling';
+import { FormsModule, ReactiveFormsModule} from '@angular/forms';
+
+
+import { OptimusListPageComponent } from '../pages/optimus-list-page/optimus-list-page.component';
+import { SimulationResultComponent } from '../components/simulation-result/simulation-result.component';
+import { LoadingPlaceholderComponent } from '../components/loading-placeholder/loading-placeholder.component';
+import { SimulationProviderComponent } from '../components/simulation-provider/simulation-provider.component';
+import { OptimusComponent } from '../optimus.component';
+import { ApplicationDescriptionService } from '../services/application-description.service';
+
+@NgModule({
+    declarations: [
+        OptimusComponent,
+        OptimusListPageComponent,
+        SimulationResultComponent,
+        LoadingPlaceholderComponent,
+        SimulationProviderComponent
+    ],
+    imports: [
+        CommonModule,
+        MaterialModule,
+        FontAwesomeModule,
+        ScrollingModule,
+        FormsModule,
+        ReactiveFormsModule
+    ],
+    exports: [
+
+    ],
+    providers: [ApplicationDescriptionService],
+  })
+  
+export class OptimusModule { }
\ No newline at end of file
diff --git a/DevOpsFramework/optimus-web/optimus.component.css b/DevOpsFramework/optimus-web/optimus.component.css
new file mode 100644
index 0000000000000000000000000000000000000000..7508aa84a6449dcb93a69df608b0252dd8a18356
--- /dev/null
+++ b/DevOpsFramework/optimus-web/optimus.component.css
@@ -0,0 +1,15 @@
+.empty-table{
+	display: block;
+	text-align: center;
+    padding: 3px;
+    margin: 0 0 10px;
+    font-size: 13px;
+    line-height: 1.42857143;
+    color: #333;
+    word-break: break-all;
+    word-wrap: break-word;
+    background-color: #f5f5f5;
+    border: 1px solid #ccc;
+    border-radius: 4px;
+    margin: 3px;
+}
\ No newline at end of file
diff --git a/DevOpsFramework/optimus-web/optimus.component.html b/DevOpsFramework/optimus-web/optimus.component.html
new file mode 100644
index 0000000000000000000000000000000000000000..87896944a146831b9f1918b6406450e636f741a5
--- /dev/null
+++ b/DevOpsFramework/optimus-web/optimus.component.html
@@ -0,0 +1,5 @@
+<div class="main-content">
+    <div class="container-fluid">
+        <optimus-list-page selectedApp></optimus-list-page>
+    </div>
+</div>
\ No newline at end of file
diff --git a/DevOpsFramework/optimus-web/optimus.component.ts b/DevOpsFramework/optimus-web/optimus.component.ts
new file mode 100644
index 0000000000000000000000000000000000000000..397e8b017ae4f31f984450e9da27adba0dd60798
--- /dev/null
+++ b/DevOpsFramework/optimus-web/optimus.component.ts
@@ -0,0 +1,47 @@
+import { Component, OnInit } from '@angular/core';
+import { environment } from '../../environments/environment';
+import { DecideGatewayService } from '../services/decide.gateway.service';
+import { AppChangeService } from "../services/appchange.service";
+import { DecideProject } from '../models/decide.project';
+
+@Component({
+  selector: 'app-optimus',
+  templateUrl: './optimus.component.html',
+  styleUrls: ['./optimus.component.css']
+})
+    
+export class OptimusComponent implements OnInit {
+
+  welcomeMessage: string;
+
+  //Selected DECIDE app
+  selectedApp : DecideProject;
+
+  //Optimus
+  simulations= <String> "";
+
+  constructor(private decideGatewayService:DecideGatewayService, private appChangeService:AppChangeService) {
+      //Load selected app
+    this.appChangeService.decideProjectObservable.subscribe(
+            data => {
+               this.selectedApp = data;
+               // this.loadOptimus();
+            });
+   }
+
+  ngOnInit() {
+      //Load OPTIMUS welcome message
+      //this.decideGatewayService.getWelcomeMessage().subscribe(p=>this.welcomeMessage = p);
+  }
+
+  loadOptimus(){
+    //Load simulations
+      this.decideGatewayService.getAllSimulations().subscribe(p=>{
+        this.simulations = p;
+      });
+  }
+
+  createSimulation(){
+
+  }
+}
\ No newline at end of file
diff --git a/DevOpsFramework/optimus-web/pages/optimus-list-page/optimus-list-page.component.html b/DevOpsFramework/optimus-web/pages/optimus-list-page/optimus-list-page.component.html
new file mode 100644
index 0000000000000000000000000000000000000000..b2a5ddf69f0eaae9383a2807ed44069a00bf4529
--- /dev/null
+++ b/DevOpsFramework/optimus-web/pages/optimus-list-page/optimus-list-page.component.html
@@ -0,0 +1,136 @@
+<div id="left">
+  <h2 class="header__title">{{ 'Microservices List' }}</h2>
+  <div>
+    <mat-list id="loading-list" *ngIf="!applicationDescription.services">
+      <mat-list-item *ngFor="let i of [1,2,3,4,5,6,7,8]">
+        <h3 mat-line>
+          <app-loading-placeholder [width]="'150px'" [height]="'0.9rem'"></app-loading-placeholder>
+        </h3>
+        <p mat-line>
+          <app-loading-placeholder [width]="'100px'" [height]="'0.9rem'"></app-loading-placeholder>
+        </p>
+        <div class="hero-actions">
+          <app-loading-placeholder [width]="'30px'" [height]="'0.9rem'"></app-loading-placeholder>
+        </div>
+      </mat-list-item>
+    </mat-list>
+    <!-- Microservices List-->
+    <cdk-virtual-scroll-viewport itemSize="80" class="optimus-viewport">
+        <h3 matLine> {{applicationDescription.appName}} </h3>
+        <div *cdkVirtualFor="let service of applicationDescription.services, index as id" class="optimus-item">
+          <mat-card class="card card-flex" (click)="onSelectService(service, id)" [class.selected]="service === selectedService">
+              <h4 [class.selected]="service === selectedService"> {{service.name}} </h4>
+<!--               <p class="card-text">Microservice's content.</p> -->
+          </mat-card>
+        </div>
+    </cdk-virtual-scroll-viewport>
+  </div>
+</div>
+<div id="right" [@fadeInOut]>
+  <mat-tab-group>
+    <mat-tab label="Microservice Edit">
+        <h2 class="header__title">Add {{selectedService && selectedService.name}} parameters</h2>
+        <div id="form-loading" *ngIf="!applicationDescription.services">
+          <form>
+            <div class="input-container">
+              <app-loading-placeholder [height]="'2rem'"></app-loading-placeholder>
+            </div>
+            <div class="input-container">
+              <app-loading-placeholder [height]="'2rem'"></app-loading-placeholder>
+            </div>
+          </form>
+        </div>
+        <div *ngIf="applicationDescription.services">
+          <form [formGroup]="newSimulationForm" #form="ngForm" ngxScrollToFirstInvalid (ngSubmit)="onSave(newSimulationForm.value)"
+            autocomplete="on">
+             <section class="example-section">
+              <label class="example-margin">Public Ip</label>
+              <mat-checkbox [(ngModel)]="selectedService.publicIP"  formControlName="optimus">
+              </mat-checkbox>
+            </section>
+            <h3>Classification</h3>
+            <section *ngIf="selectedService.publicIP" class="example-section">
+             <label class="example-margin">Computing Public Ip</label>
+            </section>
+            <section *ngIf="!selectedService.publicIP" class="example-section">
+             <label class="example-margin">Computing Ip</label>
+            </section>
+            <mat-form-field *ngFor="let endpoint of selectedService.endpoints" class="input-container">
+                <input matInput placeholder="{{'Endpoint'}}" [(value)]="endpoint" formControlName="optimus">
+                <mat-error *ngIf="!newSimulationForm.controls.optimus.valid && form.submitted">
+                    {{'Endpoint'}}
+                </mat-error>
+              </mat-form-field>
+            <mat-form-field class="input-container">
+              <input matInput type="text" name="rname" placeholder="{{'Deployment Order'}}" [(value)]="selectedService.deploymentOrder"formControlName="optimus">
+              <mat-error *ngIf="!newSimulationForm.controls.optimus.valid && form.submitted">
+                {{'Deployment Order'}}
+              </mat-error>
+            </mat-form-field>
+            <h3>Infrastructure Requirements</h3>
+
+            <section class="example-section">
+                <mat-form-field class="example-margin"> 
+                  <mat-label>Disk</mat-label>
+                  <input matInput type="number" placeholder="Disk" value=100 min=10 max=100>
+                </mat-form-field> 
+            </section>
+            <section class="example-section">
+                <mat-form-field class="example-margin">
+                    <mat-label>Memory</mat-label>
+                    <input matInput type="number" placeholder="Memory" value=20 min=10 max=100>
+                  </mat-form-field> 
+            </section>
+            <section class="example-section">
+                <mat-form-field class="example-margin">
+                  <mat-label>CPU Cores</mat-label>
+                  <input matInput type="number" placeholder="CPU Cores" value=1 min=1 max=8>
+                </mat-form-field> 
+            </section>
+            <div>
+              <h2>Resource</h2>
+              <button class="button add-dr" mat-raised-button (click)="onAddDetachableResource()">
+                Add Detachable Resource
+              </button>
+              <mat-card *ngFor="let dr of selectedService.detachableResources; index as i" style="margin:10px">
+                <mat-card-title>
+                  Detachable Resources
+                </mat-card-title>
+                <mat-card-content>
+                    <button class="remove-dr" (click)="onRemoveDetachableResource(i)">
+                        <fa-icon [icon]="removeIcon"></fa-icon>
+                    </button>
+                    <section class="example-section">
+                        <label class="example-margin">Id:&nbsp;   {{dr.id }}</label>
+                        <label class="example-margin">Name:&nbsp;   {{dr.name}}</label>
+                        <mat-radio-group>
+                          <mat-radio-button class="example-margin" [value]="dr.db">Db</mat-radio-button>
+                          <mat-radio-button class="example-margin" [value]="dr.sql">Sql</mat-radio-button>
+                        </mat-radio-group>
+                      </section>  
+                </mat-card-content>
+                
+              </mat-card>
+            </div>      
+            <p>
+              Form Status: {{ newSimulationForm.status }}
+            </p>
+            <div style="display:inline-flex">
+                <button mat-raised-button type="submit" [disabled]="!newSimulationForm.valid">
+                    {{'Save'}}
+                </button>
+            </div>
+            <div *ngIf="error">{{error}}</div>
+          </form>
+        </div>
+    </mat-tab>
+    <mat-tab label="Simulate">
+        <h2 class="header__title">{{ 'Simulation Results' }}</h2>   
+        <div>
+          <simulation-result></simulation-result>
+        </div>
+
+    </mat-tab>
+  </mat-tab-group>
+</div>
+<div class="clear"></div>
\ No newline at end of file
diff --git a/DevOpsFramework/optimus-web/pages/optimus-list-page/optimus-list-page.component.scss b/DevOpsFramework/optimus-web/pages/optimus-list-page/optimus-list-page.component.scss
new file mode 100644
index 0000000000000000000000000000000000000000..e0ccc90f65ec65d88b53a5925102f27ba47ce44c
--- /dev/null
+++ b/DevOpsFramework/optimus-web/pages/optimus-list-page/optimus-list-page.component.scss
@@ -0,0 +1,174 @@
+@import "../../styles/mixins";
+@import "../../styles/colors";
+
+#loading-list {
+  p {
+    margin-top: 0.2rem;
+  }
+}
+
+#form-loading {
+  .input-container {
+    margin: 0.5rem 0;
+  }
+}
+
+#left {
+  width: 30%;
+  float: left;
+  margin-left: 2%;
+}
+
+#right {
+  margin-left: 10%;
+  text-align: left;
+  padding-right: 18%;
+}
+
+.clear {
+  clear: both;
+}
+
+.mat-list {
+  @include push--auto();
+  // display: table;
+
+  /deep/ .mat-list-text {
+    text-align: left !important;
+  }
+}
+
+.add-dr {
+  display: inline-block
+}
+
+.remove-dr {
+  display: inline-block;
+  float: right;
+  // float: right;
+}
+
+form {
+  display: grid;
+  text-align: left;
+  width: 100%;
+  @include push--auto();
+
+  .mat-raised-button {
+    color: $secondary--color;
+    background: $primary--color;
+    width: 25%;
+    @include push--auto();
+  }
+
+  .mat-form-field {
+    width: 100%;
+  }
+  .mat-checkbox {
+    margin: 0.5rem;
+  }
+}
+
+#-json {
+  margin-top: 2rem;
+
+  pre {
+    margin-top: 1rem;
+  }
+}
+
+@media (max-width: 680px) {
+  #left {
+    width: 100%;
+    float: none;
+    @include push--auto();
+  }
+
+  #right {
+    margin: 1em auto 0;
+    width: 90%;
+    float: none;
+    padding: 0;
+  }
+}
+
+button {
+  @include push--auto(2rem);
+  display: block;
+}
+
+.optimus-viewport {
+  height: 800px;
+  width: 80%;
+  border: 1px solid black;
+}
+
+.optimus-viewport div {
+  display: flex;
+  flex-direction: row;
+  margin: 10px;
+  justify-content: flex-start;
+}
+
+.optimus-viewport h3{
+  display: block;
+  margin-left: 10px;
+  margin-right: 10px;
+  text-align: left;
+}
+
+.card-flex {
+  min-width: 90%
+}
+
+.card {
+  display: block;
+  background-color: #0277bc !important;
+  background: #FFFFFF;
+  width: 180px;
+  height: 50px;
+  border-radius: 2px;
+  margin: 10px;
+  display: inline-block;
+  transition: all .25s linear;
+    box-shadow: 0px 1px 2px 0px rgba(0,0,0,0.4);
+}
+
+.card:hover{
+  box-shadow: -1px 10px 29px 0px rgba(0,0,0,0.8);
+}
+
+.card.selected{
+  color: #161218;
+  border-color: black;
+  background: black;
+  background-color: rgb(44, 211, 127) !important;
+}
+
+h3 {
+  text-align: left;
+}
+
+h4 {
+  color: white;
+  font-size: 14px;
+}
+
+h4.selected {
+  color: black;
+}
+
+.example-section {
+  display: flex;
+  align-content: center;
+  align-items: center;
+  height: 60px;
+}
+
+.example-margin {
+  margin: 0 10px;
+}
+
+
+
+
diff --git a/DevOpsFramework/optimus-web/pages/optimus-list-page/optimus-list-page.component.spec.ts b/DevOpsFramework/optimus-web/pages/optimus-list-page/optimus-list-page.component.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..04d1775c6d0fb0dc47ade6fe06db7faa20237a9d
--- /dev/null
+++ b/DevOpsFramework/optimus-web/pages/optimus-list-page/optimus-list-page.component.spec.ts
@@ -0,0 +1,42 @@
+import { async, TestBed } from '@angular/core/testing';
+import { APP_BASE_HREF } from '@angular/common';
+import { MaterialModule } from '../../modules/material.module';
+import { ApplicationDescriptionService } from '../../services/application-description.service';
+import { APP_CONFIG, AppConfig } from '../../configs/app.config';
+import { OptimusListPageComponent } from './optimus-list-page.component';
+import { SimulationResultComponent } from '../../components/simulation-result/simulation-result.component';
+import { LoadingPlaceholderComponent } from '../../components/loading-placeholder/loading-placeholder.component';
+import { HttpClientTestingModule } from '@angular/common/http/testing' ;
+import { NgxSpinnerModule } from 'ngx-spinner';
+
+describe('OptimusListPageComponent', () => {
+  let fixture;
+  let component;
+
+  beforeEach(async(() => {
+    TestBed.configureTestingModule({
+      imports: [
+        MaterialModule,
+        HttpClientTestingModule,
+        NgxSpinnerModule
+      ],
+      declarations: [
+        SimulationResultComponent,
+        LoadingPlaceholderComponent
+      ],
+      providers: [
+        { provide: APP_CONFIG, useValue: AppConfig },
+        { provide: APP_BASE_HREF, useValue: '/' },
+        ApplicationDescriptionService
+      ],
+    }).compileComponents();
+
+    fixture = TestBed.createComponent(OptimusListPageComponent);
+    fixture.detectChanges();
+    component = fixture.debugElement.componentInstance;
+  }));
+
+  it('should create optimus list component', (() => {
+    expect(component).toBeTruthy();
+  }));
+});
diff --git a/DevOpsFramework/optimus-web/pages/optimus-list-page/optimus-list-page.component.ts b/DevOpsFramework/optimus-web/pages/optimus-list-page/optimus-list-page.component.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9a47a8c4af5f53bf549f257933dbd3d20e0973a1
--- /dev/null
+++ b/DevOpsFramework/optimus-web/pages/optimus-list-page/optimus-list-page.component.ts
@@ -0,0 +1,148 @@
+/*********************************************************************
+* Copyright (c) 2019 Tecnalia.
+*
+* This program and the accompanying materials are made
+* available under the terms of the MIT license
+*
+* SPDX-License-Identifier: MIT
+* Contributors (in alphabetical order):
+* Alberto Molinuevo                         Tecnalia
+* Gorka Benguria                            Tecnalia
+* Inaki Etxaniz                             Tecnalia
+* Inigo Iparraguirre                        Tecnalia
+* Juncal Alonso                             Tecnalia
+* Leire Orue-Echevarria                     Tecnalia
+* Maria Jose Lopez                          Tecnalia
+* Marisa Escalante                          Tecnalia
+*
+* Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+**********************************************************************/
+
+
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { ApplicationDescriptionService } from '../../services/application-description.service';
+import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';
+import { MatDialog, MatSnackBar } from '@angular/material';
+import { Router } from '@angular/router';
+import { UtilsHelperService } from '../../core/services/utils-helper.service';
+import { faTrashAlt } from '@fortawesome/free-solid-svg-icons';
+import { DecideProject } from '../../../models/decide.project';
+
+@Component({
+  selector: 'optimus-list-page',
+  templateUrl: './optimus-list-page.component.html',
+  styleUrls: ['./optimus-list-page.component.scss'],
+  animations: [UtilsHelperService.fadeInOut()]
+})
+
+export class OptimusListPageComponent implements OnInit {
+
+  services: any[];
+  selectedService: any;
+  selectedServiceId: number;
+  // The real selected application from parent component
+  selectedApplicationDescription: DecideProject;
+  applicationDescription: any;
+  public newSimulationForm: FormGroup;
+  error: string;
+  @ViewChild('form') myNgForm; // just to call resetForm method
+
+  removeIcon = faTrashAlt;
+  constructor(private applicationService: ApplicationDescriptionService,
+              private dialog: MatDialog,
+              private snackBar: MatSnackBar,
+              private router: Router,
+              private formBuilder: FormBuilder) {
+
+    this.newSimulationForm = new FormGroup({
+      'optimus': new FormControl('', [Validators.required])
+      //TODO: Define required fields for better validation
+    });
+
+
+    this.applicationDescription = {};
+    this.selectedService = null;
+    this.selectedServiceId = 0;
+    this.onChanges();
+  }
+
+  ngOnInit() {
+    //TODO: we use a mock application description, but this should be populated from real application description form parent component
+    this.applicationService.getMockApplicationDescription()
+    .subscribe((data) => {
+      this.applicationDescription = {
+        services: data['microservices'],
+        appName:  data['name'],
+        appDescription: data['description']
+      };
+      this.selectedService = data['microservices'][0]
+    });
+  }
+
+  private onChanges() {
+
+  }
+
+  onSaveService(value: any) {
+    console.log("Microservice form is saved!")
+    //TODO 
+    //Save to Decide.json
+    //POST to REST API
+    this.applicationDescription.services[this.selectedServiceId] = this.selectedService;
+    
+  }
+
+  onSaveApplicationDescription () {
+    //TODO
+    let sendData = {
+      microservices: this.applicationDescription.services,
+      name: this.applicationDescription.appName,
+      description: this.applicationDescription.appDescription
+    }
+
+    // Save modified data to application description
+    // TODO
+   // this.selectedApplicationDescription
+    
+    this.applicationService.getApplicationDescription(this.selectedApplicationDescription);
+  }
+
+  onSelectService(service: any, id: number) {
+    console.log(`Microservice selected: ${service.name}`);
+    console.log(`Microservice public IP selected: ${service.publicIP}`);
+    console.log(`Microservice Id selected: ${id}` )
+    this.selectedService = service;
+    this.selectedServiceId = id;
+  }
+
+  createNewApplication() {
+
+  }
+
+  deleteApplication() {
+
+  }
+
+  seeApplicationDetails() {
+    
+  }
+
+  createNewSimulation() {
+    console.log("Simulation started!");
+  }
+
+  onRemoveDetachableResource(index: number) {
+    this.selectedService.detachableResources.splice(index, 1); 
+  }
+
+  onAddDetachableResource() {
+    this.selectedService.detachableResources.push(
+      {
+        "id" : "1111-1111-111-1111-1111",
+        "name" : "none",
+        "db" : false,
+        "classification" : "storage"
+      }
+    )
+  }
+}
diff --git a/DevOpsFramework/optimus-web/services/application-description.service.spec.ts b/DevOpsFramework/optimus-web/services/application-description.service.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..7f9154b7d85d05cfd9548851ec2bd197237ec84b
--- /dev/null
+++ b/DevOpsFramework/optimus-web/services/application-description.service.spec.ts
@@ -0,0 +1,21 @@
+import { TestBed } from '@angular/core/testing';
+import { HttpClientTestingModule } from '@angular/common/http/testing';
+import { HttpClient } from '@angular/common/http';
+import { ApplicationDescriptionService } from './application-description.service';
+
+describe('ApplicationDescriptionService', () => {
+  beforeEach(() => TestBed.configureTestingModule({
+    imports: [
+      HttpClientTestingModule
+    ],
+    providers: [
+      HttpClient,
+      ApplicationDescriptionService
+    ]
+  }));
+
+  it('should be created', () => {
+    const service: ApplicationDescriptionService = TestBed.get(ApplicationDescriptionService);
+    expect(service).toBeTruthy();
+  });
+});
diff --git a/DevOpsFramework/optimus-web/services/application-description.service.ts b/DevOpsFramework/optimus-web/services/application-description.service.ts
new file mode 100644
index 0000000000000000000000000000000000000000..3eab0506d9e9b99f1db29983621b7ef64e3055d3
--- /dev/null
+++ b/DevOpsFramework/optimus-web/services/application-description.service.ts
@@ -0,0 +1,88 @@
+/*********************************************************************
+* Copyright (c) 2019 Tecnalia.
+*
+* This program and the accompanying materials are made
+* available under the terms of the MIT license
+*
+* SPDX-License-Identifier: MIT
+* Contributors (in alphabetical order):
+* Alberto Molinuevo                         Tecnalia
+* Gorka Benguria                            Tecnalia
+* Inaki Etxaniz                             Tecnalia
+* Inigo Iparraguirre                        Tecnalia
+* Juncal Alonso                             Tecnalia
+* Leire Orue-Echevarria                     Tecnalia
+* Maria Jose Lopez                          Tecnalia
+* Marisa Escalante                          Tecnalia
+*
+* Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+**********************************************************************/
+
+
+import { Injectable } from '@angular/core';
+import { HttpClient } from '@angular/common/http';
+import { environment } from '../../../environments/environment';
+import { DecideGatewayService } from '../../services/decide.gateway.service';
+import { DecideProject } from '../../models/decide.project';
+
+
+
+@Injectable({
+  providedIn: 'root'
+})
+export class ApplicationDescriptionService {
+
+  applicationUrl = 'assets/Decide.json';
+  // TODO
+  // Decide gateway url
+  // Call to injected service DecideGatewayservice ---> getApplicationDescription
+  // And get the real results
+  simulationResultsSchemaUrl = 'assets/Decide_simulation_result.json';
+
+  providerUrl = environment.apiAcsmiServices + '/definitions-by-attribute?typeid=3'
+  constructor(private http:HttpClient, private dgateway: DecideGatewayService) { }
+
+  getApplicationProviders() {
+    return this.http.get(this.providerUrl);
+  }
+
+  // This methods saves application description
+  getApplicationDescription(project: DecideProject) {
+    return this.dgateway.getApplicationDescription(project);
+  }
+
+  // Better to use this method so we can doing a POST to save 
+  saveApplicationDescription(project: DecideProject) {
+    //TODO saveApplicationDescription
+    this.getApplicationDescription(project);
+  }
+
+  getMockApplicationDescription() {
+    return this.http.get(this.applicationUrl);
+  } 
+
+  getMockSimulationResults() {
+    return this.http.get(this.simulationResultsSchemaUrl);
+  }
+
+  // TODOS: THIS methods will create a simulation, get the calculated schemas, and save the selected schema
+
+  createSimulation() {
+
+  }  
+
+  getSimulationResultsSchema() {
+
+    // Create simulation
+
+    // Get Simulation with id status == finished
+
+    // Get Simulation  results schema
+    //return this.http.get(`${this.simulationResultsSchemaUrl} + "/" +  `);
+  }
+
+  saveSelectedSchema() {
+
+  }
+
+}
diff --git a/DevOpsFramework/optimus-web/styles/_colors.scss b/DevOpsFramework/optimus-web/styles/_colors.scss
new file mode 100644
index 0000000000000000000000000000000000000000..8f013c7329505d82eadb390366c8325d370c0c9a
--- /dev/null
+++ b/DevOpsFramework/optimus-web/styles/_colors.scss
@@ -0,0 +1,10 @@
+// Descriptive Colors
+$white: #ffffff;
+$blue: #0277bc;
+$red: #dc143c;
+$grey: #bbbbbb;
+$light-grey: #eeeeee;
+
+// Functional Colors
+$primary--color: $blue;
+$secondary--color: $white;
diff --git a/DevOpsFramework/optimus-web/styles/_functions.scss b/DevOpsFramework/optimus-web/styles/_functions.scss
new file mode 100644
index 0000000000000000000000000000000000000000..39be4b02d7f20c98d29cc91de03d7159230147e6
--- /dev/null
+++ b/DevOpsFramework/optimus-web/styles/_functions.scss
@@ -0,0 +1,6 @@
+@import "colors";
+
+@function calculateRem($size) {
+  $remSize: $size / 16px;
+  @return $remSize * 1rem;
+}
diff --git a/DevOpsFramework/optimus-web/styles/_mixins.scss b/DevOpsFramework/optimus-web/styles/_mixins.scss
new file mode 100644
index 0000000000000000000000000000000000000000..7aabd15d67b073affd54fcc33885cca43d20a3d7
--- /dev/null
+++ b/DevOpsFramework/optimus-web/styles/_mixins.scss
@@ -0,0 +1,39 @@
+@import "colors";
+@import "functions";
+
+@mixin font-size($size) {
+  font-size: $size;
+  font-size: calculateRem($size);
+}
+
+@mixin push--auto($vertically: false) {
+  @if $vertically {
+    margin: {
+      top: $vertically;
+      bottom: $vertically;
+      left: auto;
+      right: auto;
+    }
+  } @else {
+    margin: {
+      left: auto;
+      right: auto;
+    }
+  }
+}
+
+@mixin font-roboto($size: false, $colour: false, $weight: false,  $lh: false) {
+  font-family: 'Roboto', Helvetica, Arial, sans-serif;
+  @if $size {
+    font-size: $size;
+  }
+  @if $colour {
+    color: $colour;
+  }
+  @if $weight {
+    font-weight: $weight;
+  }
+  @if $lh {
+    line-height: $lh;
+  }
+}
\ No newline at end of file
diff --git a/DevOpsFramework/optimus-web/styles/global.scss b/DevOpsFramework/optimus-web/styles/global.scss
new file mode 100644
index 0000000000000000000000000000000000000000..eafd4eb1c5cad1d6386a3db6a7f55b1263146d56
--- /dev/null
+++ b/DevOpsFramework/optimus-web/styles/global.scss
@@ -0,0 +1,91 @@
+@import "mixins";
+
+* {
+  @include font-roboto();
+}
+
+a, .cp {
+  cursor: pointer;
+}
+
+h1, h2 {
+  margin-bottom: 2rem;
+}
+
+.header__title {
+  text-align: center;
+  font-size: 1.5rem;
+  font-weight: 300;
+  padding: 1rem 0 0;
+}
+
+.flex-spacer {
+  flex-grow: 1;
+}
+
+.progress__spinner {
+  height: calculateRem(60px) !important;
+  @include push--auto(2rem);
+}
+
+.hero-actions {
+  align-items: center;
+  display: flex;
+  padding-bottom: 1rem;
+}
+
+.icon__like--red {
+  color: $red;
+  cursor: pointer;
+}
+
+.icon__like--grey {
+  color: $grey;
+  cursor: pointer;
+}
+
+.hero-header__image {
+  background-size: cover;
+}
+
+.text--center {
+  text-align: center;
+}
+
+.text--right {
+  text-align: right;
+}
+
+pre {
+  background: $light-grey;
+  border: 1px solid $grey;
+  border-left: 3px solid $primary--color;
+  color: $primary--color;
+  page-break-inside: avoid;
+  font-family: monospace;
+  font-size: calculateRem(15px);
+  line-height: 1.6;
+  margin-bottom: 1.6rem;
+  max-width: 100%;
+  overflow: auto;
+  padding: 1rem 1.5rem;
+  display: block;
+  text-align: left;
+  word-wrap: break-word;
+}
+
+.offline-error {
+  font-size: 1rem;
+  font-weight: 300;
+  padding: 1rem;
+  text-align: center;
+
+  span {
+    transform: rotate(90deg);
+    font-size: 0.8rem;
+    display: inline-flex;
+  }
+}
+
+// MATERIAL
+@import "material";
diff --git a/DevOpsFramework/optimus-web/styles/material.scss b/DevOpsFramework/optimus-web/styles/material.scss
new file mode 100644
index 0000000000000000000000000000000000000000..b92d842eb589937ca31e7ecabe0cae1bc9cf643b
--- /dev/null
+++ b/DevOpsFramework/optimus-web/styles/material.scss
@@ -0,0 +1,52 @@
+@import "mixins";
+
+snack-bar-container {
+  background: $primary--color !important;
+}
+
+.mat-menu-content {
+  background: $primary--color;
+}
+
+.mat-menu-item, .mat-menu-item .mat-icon {
+  color: $secondary--color;
+  font-weight: 100;
+}
+
+.mat-raised-button[disabled] {
+  background: $grey !important;
+}
+
+.mat-dialog-container {
+  background: $primary--color;
+  color: $secondary--color;
+}
+
+.mat-dialog-content {
+  text-align: center;
+  padding: 1rem calculateRem(24px) !important;
+}
+
+.mat-dialog-title {
+  text-align: center;
+}
+
+.mat-list-avatar {
+  height: calculateRem(55px) !important;
+  width: calculateRem(55px) !important;
+}
+
+.mat-card-image {
+  margin-bottom: -28px !important;
+  border-top: 1px solid $light-grey;
+}
+
+#search-input {
+  .mat-form-field-label {
+    color: white !important;
+  }
+
+  .mat-form-field-underline {
+    background-color: white !important;
+  }
+}
diff --git a/MCSLA/mcsla-core/LICENSE.txt b/MCSLA/mcsla-core/LICENSE.txt
index 93084469804f79f4deda7ad5b9fbd9cfa0de8a0b..1a5effe455affae45fa3bb7a9a870f498aa7a656 100644
--- a/MCSLA/mcsla-core/LICENSE.txt
+++ b/MCSLA/mcsla-core/LICENSE.txt
@@ -1,281 +1,666 @@
 Copyright (C) 2018 Fraunhofer FOKUS.
 
 This program is free software: you can redistribute it and/or modify
-it under the terms of the Eclipse Public License version 2.0.
-
-Eclipse Public License - v 2.0
-THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
-PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION
-OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
-
-1. DEFINITIONS
-
-"Contribution" means:
-
-a) in the case of the initial Contributor, the initial content
-Distributed under this Agreement, and
-
-b) in the case of each subsequent Contributor:
-i) changes to the Program, and
-ii) additions to the Program;
-where such changes and/or additions to the Program originate from
-and are Distributed by that particular Contributor. A Contribution
-"originates" from a Contributor if it was added to the Program by
-such Contributor itself or anyone acting on such Contributor's behalf.
-Contributions do not include changes or additions to the Program that
-are not Modified Works.
-
-"Contributor" means any person or entity that Distributes the Program.
-
-"Licensed Patents" mean patent claims licensable by a Contributor which
-are necessarily infringed by the use or sale of its Contribution alone
-or when combined with the Program.
-
-"Program" means the Contributions Distributed in accordance with this
-Agreement.
-
-"Recipient" means anyone who receives the Program under this Agreement
-or any Secondary License (as applicable), including Contributors.
-
-"Derivative Works" shall mean any work, whether in Source Code or other
-form, that is based on (or derived from) the Program and for which the
-editorial revisions, annotations, elaborations, or other modifications
-represent, as a whole, an original work of authorship.
-
-"Modified Works" shall mean any work in Source Code or other form that
-results from an addition to, deletion from, or modification of the
-contents of the Program, including, for purposes of clarity any new file
-in Source Code form that contains any contents of the Program. Modified
-Works shall not include works that contain only declarations,
-interfaces, types, classes, structures, or files of the Program solely
-in each case in order to link to, bind by name, or subclass the Program
-or Modified Works thereof.
-
-"Distribute" means the acts of a) distributing or b) making available
-in any manner that enables the transfer of a copy.
-
-"Source Code" means the form of a Program preferred for making
-modifications, including but not limited to software source code,
-documentation source, and configuration files.
-
-"Secondary License" means either the GNU General Public License,
-Version 2.0, or any later versions of that license, including any
-exceptions or additional permissions as identified by the initial
-Contributor.
-
-2. GRANT OF RIGHTS
-
-a) Subject to the terms of this Agreement, each Contributor hereby
-grants Recipient a non-exclusive, worldwide, royalty-free copyright
-license to reproduce, prepare Derivative Works of, publicly display,
-publicly perform, Distribute and sublicense the Contribution of such
-Contributor, if any, and such Derivative Works.
-
-b) Subject to the terms of this Agreement, each Contributor hereby
-grants Recipient a non-exclusive, worldwide, royalty-free patent
-license under Licensed Patents to make, use, sell, offer to sell,
-import and otherwise transfer the Contribution of such Contributor,
-if any, in Source Code or other form. This patent license shall
-apply to the combination of the Contribution and the Program if, at
-the time the Contribution is added by the Contributor, such addition
-of the Contribution causes such combination to be covered by the
-Licensed Patents. The patent license shall not apply to any other
-combinations which include the Contribution. No hardware per se is
-licensed hereunder.
-
-c) Recipient understands that although each Contributor grants the
-licenses to its Contributions set forth herein, no assurances are
-provided by any Contributor that the Program does not infringe the
-patent or other intellectual property rights of any other entity.
-Each Contributor disclaims any liability to Recipient for claims
-brought by any other entity based on infringement of intellectual
-property rights or otherwise. As a condition to exercising the
-rights and licenses granted hereunder, each Recipient hereby
-assumes sole responsibility to secure any other intellectual
-property rights needed, if any. For example, if a third party
-patent license is required to allow Recipient to Distribute the
-Program, it is Recipient's responsibility to acquire that license
-before distributing the Program.
-
-d) Each Contributor represents that to its knowledge it has
-sufficient copyright rights in its Contribution, if any, to grant
-the copyright license set forth in this Agreement.
-
-e) Notwithstanding the terms of any Secondary License, no
-Contributor makes additional grants to any Recipient (other than
-those set forth in this Agreement) as a result of such Recipient's
-receipt of the Program under the terms of a Secondary License
-(if permitted under the terms of Section 3).
-
-3. REQUIREMENTS
-
-3.1 If a Contributor Distributes the Program in any form, then:
-
-a) the Program must also be made available as Source Code, in
-accordance with section 3.2, and the Contributor must accompany
-the Program with a statement that the Source Code for the Program
-is available under this Agreement, and informs Recipients how to
-obtain it in a reasonable manner on or through a medium customarily
-used for software exchange; and
-
-b) the Contributor may Distribute the Program under a license
-different than this Agreement, provided that such license:
-i) effectively disclaims on behalf of all other Contributors all
-warranties and conditions, express and implied, including
-warranties or conditions of title and non-infringement, and
-implied warranties or conditions of merchantability and fitness
-for a particular purpose;
-
-ii) effectively excludes on behalf of all other Contributors all
-liability for damages, including direct, indirect, special,
-incidental and consequential damages, such as lost profits;
-
-iii) does not attempt to limit or alter the recipients' rights
-in the Source Code under section 3.2; and
-
-iv) requires any subsequent distribution of the Program by any
-party to be under a license that satisfies the requirements
-of this section 3.
-
-3.2 When the Program is Distributed as Source Code:
-
-a) it must be made available under this Agreement, or if the
-Program (i) is combined with other material in a separate file or
-files made available under a Secondary License, and (ii) the initial
-Contributor attached to the Source Code the notice described in
-Exhibit A of this Agreement, then the Program may be made available
-under the terms of such Secondary Licenses, and
-
-b) a copy of this Agreement must be included with each copy of
-the Program.
-
-3.3 Contributors may not remove or alter any copyright, patent,
-trademark, attribution notices, disclaimers of warranty, or limitations
-of liability ("notices") contained within the Program from any copy of
-the Program which they Distribute, provided that Contributors may add
-their own appropriate notices.
-
-4. COMMERCIAL DISTRIBUTION
-
-Commercial distributors of software may accept certain responsibilities
-with respect to end users, business partners and the like. While this
-license is intended to facilitate the commercial use of the Program,
-the Contributor who includes the Program in a commercial product
-offering should do so in a manner which does not create potential
-liability for other Contributors. Therefore, if a Contributor includes
-the Program in a commercial product offering, such Contributor
-("Commercial Contributor") hereby agrees to defend and indemnify every
-other Contributor ("Indemnified Contributor") against any losses,
-damages and costs (collectively "Losses") arising from claims, lawsuits
-and other legal actions brought by a third party against the Indemnified
-Contributor to the extent caused by the acts or omissions of such
-Commercial Contributor in connection with its distribution of the Program
-in a commercial product offering. The obligations in this section do not
-apply to any claims or Losses relating to any actual or alleged
-intellectual property infringement. In order to qualify, an Indemnified
-Contributor must: a) promptly notify the Commercial Contributor in
-writing of such claim, and b) allow the Commercial Contributor to control,
-and cooperate with the Commercial Contributor in, the defense and any
-related settlement negotiations. The Indemnified Contributor may
-participate in any such claim at its own expense.
-
-For example, a Contributor might include the Program in a commercial
-product offering, Product X. That Contributor is then a Commercial
-Contributor. If that Commercial Contributor then makes performance
-claims, or offers warranties related to Product X, those performance
-claims and warranties are such Commercial Contributor's responsibility
-alone. Under this section, the Commercial Contributor would have to
-defend claims against the other Contributors related to those performance
-claims and warranties, and if a court requires any other Contributor to
-pay any damages as a result, the Commercial Contributor must pay
-those damages.
-
-5. NO WARRANTY
-
-EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
-PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS"
-BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
-IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF
-TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR
-PURPOSE. Each Recipient is solely responsible for determining the
-appropriateness of using and distributing the Program and assumes all
-risks associated with its exercise of rights under this Agreement,
-including but not limited to the risks and costs of program errors,
-compliance with applicable laws, damage to or loss of data, programs
-or equipment, and unavailability or interruption of operations.
-
-6. DISCLAIMER OF LIABILITY
-
-EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
-PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS
-SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
-PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE
-EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-7. GENERAL
-
-If any provision of this Agreement is invalid or unenforceable under
-applicable law, it shall not affect the validity or enforceability of
-the remainder of the terms of this Agreement, and without further
-action by the parties hereto, such provision shall be reformed to the
-minimum extent necessary to make such provision valid and enforceable.
-
-If Recipient institutes patent litigation against any entity
-(including a cross-claim or counterclaim in a lawsuit) alleging that the
-Program itself (excluding combinations of the Program with other software
-or hardware) infringes such Recipient's patent(s), then such Recipient's
-rights granted under Section 2(b) shall terminate as of the date such
-litigation is filed.
-
-All Recipient's rights under this Agreement shall terminate if it
-fails to comply with any of the material terms or conditions of this
-Agreement and does not cure such failure in a reasonable period of
-time after becoming aware of such noncompliance. If all Recipient's
-rights under this Agreement terminate, Recipient agrees to cease use
-and distribution of the Program as soon as reasonably practicable.
-However, Recipient's obligations under this Agreement and any licenses
-granted by Recipient relating to the Program shall continue and survive.
-
-Everyone is permitted to copy and distribute copies of this Agreement,
-but in order to avoid inconsistency the Agreement is copyrighted and
-may only be modified in the following manner. The Agreement Steward
-reserves the right to publish new versions (including revisions) of
-this Agreement from time to time. No one other than the Agreement
-Steward has the right to modify this Agreement. The Eclipse Foundation
-is the initial Agreement Steward. The Eclipse Foundation may assign the
-responsibility to serve as the Agreement Steward to a suitable separate
-entity. Each new version of the Agreement will be given a distinguishing
-version number. The Program (including Contributions) may always be
-Distributed subject to the version of the Agreement under which it was
-received. In addition, after a new version of the Agreement is published,
-Contributor may elect to Distribute the Program (including its
-Contributions) under the new version.
-
-Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
-receives no rights or licenses to the intellectual property of any
-Contributor under this Agreement, whether expressly, by implication,
-estoppel or otherwise. All rights in the Program not expressly granted
-under this Agreement are reserved. Nothing in this Agreement is intended
-to be enforceable by any entity that is not a Contributor or Recipient.
-No third-party beneficiary rights are created under this Agreement.
-
-Exhibit A - Form of Secondary Licenses Notice
-
-"This Source Code may also be made available under the following
-Secondary Licenses when the conditions for such availability set forth
-in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
-version(s), and exceptions or additional permissions here}."
-
-Simply including a copy of this Agreement, including this Exhibit A
-is not sufficient to license the Source Code under Secondary Licenses.
-
-If it is not possible or desirable to put the notice in a particular
-file, then You may include the notice in a location (such as a LICENSE
-file in a relevant directory) where a recipient would be likely to
-look for such a notice.
-
-You may add additional accurate notices of copyright ownership.
\ No newline at end of file
+it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE Version 3.
+
+                    GNU AFFERO GENERAL PUBLIC LICENSE
+                       Version 3, 19 November 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU Affero General Public License is a free, copyleft license for
+software and other kinds of works, specifically designed to ensure
+cooperation with the community in the case of network server software.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+our General Public Licenses are intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  Developers that use our General Public Licenses protect your rights
+with two steps: (1) assert copyright on the software, and (2) offer
+you this License which gives you legal permission to copy, distribute
+and/or modify the software.
+
+  A secondary benefit of defending all users' freedom is that
+improvements made in alternate versions of the program, if they
+receive widespread use, become available for other developers to
+incorporate.  Many developers of free software are heartened and
+encouraged by the resulting cooperation.  However, in the case of
+software used on network servers, this result may fail to come about.
+The GNU General Public License permits making a modified version and
+letting the public access it on a server without ever releasing its
+source code to the public.
+
+  The GNU Affero General Public License is designed specifically to
+ensure that, in such cases, the modified source code becomes available
+to the community.  It requires the operator of a network server to
+provide the source code of the modified version running there to the
+users of that server.  Therefore, public use of a modified version, on
+a publicly accessible server, gives the public access to the source
+code of the modified version.
+
+  An older license, called the Affero General Public License and
+published by Affero, was designed to accomplish similar goals.  This is
+a different license, not a version of the Affero GPL, but Affero has
+released a new version of the Affero GPL which permits relicensing under
+this license.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU Affero General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Remote Network Interaction; Use with the GNU General Public License.
+
+  Notwithstanding any other provision of this License, if you modify the
+Program, your modified version must prominently offer all users
+interacting with it remotely through a computer network (if your version
+supports such interaction) an opportunity to receive the Corresponding
+Source of your version by providing access to the Corresponding Source
+from a network server at no charge, through some standard or customary
+means of facilitating copying of software.  This Corresponding Source
+shall include the Corresponding Source for any work covered by version 3
+of the GNU General Public License that is incorporated pursuant to the
+following paragraph.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the work with which it is combined will remain governed by version
+3 of the GNU General Public License.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU Affero General Public License from time to time.  Such new versions
+will be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU Affero General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU Affero General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU Affero General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU Affero General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU Affero General Public License for more details.
+
+    You should have received a copy of the GNU Affero General Public License
+    along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If your software can interact with users remotely through a computer
+network, you should also make sure that it provides a way for users to
+get its source.  For example, if your program is a web application, its
+interface could display a "Source" link that leads users to an archive
+of the code.  There are many ways you could offer source, and different
+solutions will be better for different programs; see section 13 for the
+specific requirements.
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU AGPL, see
+<https://www.gnu.org/licenses/>.
diff --git a/MCSLA/mcsla-core/README.md b/MCSLA/mcsla-core/README.md
index c8b26c6565977ce963866c4a586717c3582fe4f5..ea2edb7cf9b948371ab9cc3b159ef4b16f7b278a 100644
--- a/MCSLA/mcsla-core/README.md
+++ b/MCSLA/mcsla-core/README.md
@@ -189,4 +189,4 @@ assert result.isConditionMet() : "Condition is not met.";
 
 ## License
 
-[Eclipse Public License version 2.0.](LICENSE.txt)
\ No newline at end of file
+[GNU Affero General Public License Version 3](LICENSE.txt)
\ No newline at end of file
diff --git a/MCSLA/mcsla-core/pom.xml b/MCSLA/mcsla-core/pom.xml
index e261e574561ee50251275e82cef4da26af9ceadb..9f27a27f9d43eee857896d71e33a00a0d9177d60 100644
--- a/MCSLA/mcsla-core/pom.xml
+++ b/MCSLA/mcsla-core/pom.xml
@@ -1,109 +1,115 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<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>eu.DECIDEh2020</groupId>
-    <artifactId>mcsla-core</artifactId>
-    <version>0.0.1-SNAPSHOT</version>
-
-    <properties>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-    </properties>
-
-    <distributionManagement>
-        <repository>
-            <id>paca-releases</id>
-            <name>Paca Releases Repo</name>
-            <url>https://paca.fokus.fraunhofer.de/repository/maven-releases/</url>
-        </repository>
-        <snapshotRepository>
-            <id>paca-snapshots</id>
-            <url>https://paca.fokus.fraunhofer.de/repository/maven-snapshots/</url>
-        </snapshotRepository>
-    </distributionManagement>
-
-    <scm>
-        <connection>
-            scm:git:https://${GITLAB_USER_LDAP}:${GITLAB_USER_PASSWORD}@gitlab.fokus.fraunhofer.de/${CI_PROJECT_PATH}
-        </connection>
-        <url>https://${GITLAB_USER_LDAP}:${GITLAB_USER_PASSWORD}@gitlab.fokus.fraunhofer.de/${CI_PROJECT_PATH}</url>
-        <developerConnection>
-            scm:git:https://${GITLAB_USER_LDAP}:${GITLAB_USER_PASSWORD}@gitlab.fokus.fraunhofer.de/${CI_PROJECT_PATH}
-        </developerConnection>
-        <tag>HEAD</tag>
-    </scm>
-
-    <repositories>
-        <repository>
-            <id>jgit-repository</id>
-            <url>https://repo.eclipse.org/content/groups/releases/</url>
-        </repository>
-        <repository>
-            <id>jitpack.io</id>
-            <url>https://jitpack.io</url>
-        </repository>
-    </repositories>
-
-    <dependencies>
-        <dependency>
-            <groupId>eu.DECIDEh2020</groupId>
-            <artifactId>app-controller</artifactId>
-            <version>0.0.15-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>ch.qos.logback</groupId>
-            <artifactId>logback-classic</artifactId>
-            <version>1.2.3</version>
-        </dependency>
-        <dependency>
-            <groupId>org.testng</groupId>
-            <artifactId>testng</artifactId>
-            <version>6.14.3</version>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <version>3.7.0</version>
-                <configuration>
-                    <source>1.8</source>
-                    <target>1.8</target>
-                    <encoding>${project.build.sourceEncoding}</encoding>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-shade-plugin</artifactId>
-                <version>3.1.1</version>
-                <executions>
-                    <execution>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>shade</goal>
-                        </goals>
-                        <configuration>
-                            <minimizeJar>true</minimizeJar>
-                            <shadedArtifactAttached>true</shadedArtifactAttached>
-                            <filters>
-                                <filter>
-                                    <artifact>*:*</artifact>
-                                    <excludes>
-                                        <exclude>META-INF/*.SF</exclude>
-                                        <exclude>META-INF/*.DSA</exclude>
-                                        <exclude>META-INF/*.RSA</exclude>
-                                    </excludes>
-                                </filter>
-                            </filters>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-
+<?xml version="1.0" encoding="UTF-8"?>
+<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>eu.DECIDEh2020</groupId>
+    <artifactId>mcsla-core</artifactId>
+    <version>0.0.3-SNAPSHOT</version>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+    <distributionManagement>
+        <repository>
+            <id>paca</id>
+            <name>Paca Releases Repo</name>
+            <url>https://paca.okd.fokus.fraunhofer.de/repository/maven-releases/</url>
+        </repository>
+        <snapshotRepository>
+            <id>paca</id>
+            <url>https://paca.okd.fokus.fraunhofer.de/repository/maven-snapshots/</url>
+        </snapshotRepository>
+    </distributionManagement>
+
+    <scm>
+        <connection>
+            scm:git:https://${GITLAB_USER_LDAP}:${GITLAB_USER_PASSWORD}@gitlab.fokus.fraunhofer.de/${CI_PROJECT_PATH}
+        </connection>
+        <url>https://${GITLAB_USER_LDAP}:${GITLAB_USER_PASSWORD}@gitlab.fokus.fraunhofer.de/${CI_PROJECT_PATH}</url>
+        <developerConnection>
+            scm:git:https://${GITLAB_USER_LDAP}:${GITLAB_USER_PASSWORD}@gitlab.fokus.fraunhofer.de/${CI_PROJECT_PATH}
+        </developerConnection>
+        <tag>HEAD</tag>
+    </scm>
+
+    <repositories>
+        <repository>
+            <id>jgit-repository</id>
+            <url>https://repo.eclipse.org/content/groups/releases/</url>
+        </repository>
+        <repository>
+            <id>jitpack.io</id>
+            <url>https://jitpack.io</url>
+        </repository>
+    </repositories>
+
+    <dependencies>
+        <dependency>
+            <groupId>eu.DECIDEh2020</groupId>
+            <artifactId>app-controller</artifactId>
+            <version>0.0.16-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>ch.qos.logback</groupId>
+            <artifactId>logback-classic</artifactId>
+            <version>1.2.3</version>
+        </dependency>
+        <dependency>
+            <groupId>org.testng</groupId>
+            <artifactId>testng</artifactId>
+            <version>6.14.3</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-release-plugin</artifactId>
+                <version>2.5.3</version>
+                <configuration>
+                    <tagNameFormat>v@{project.version}</tagNameFormat>
+                </configuration>
+            </plugin>
+            <plugin>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.7.0</version>
+                <configuration>
+                    <source>1.8</source>
+                    <target>1.8</target>
+                    <encoding>${project.build.sourceEncoding}</encoding>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-shade-plugin</artifactId>
+                <version>3.1.1</version>
+                <executions>
+                    <execution>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>shade</goal>
+                        </goals>
+                        <configuration>
+                            <minimizeJar>true</minimizeJar>
+                            <shadedArtifactAttached>true</shadedArtifactAttached>
+                            <filters>
+                                <filter>
+                                    <artifact>*:*</artifact>
+                                    <excludes>
+                                        <exclude>META-INF/*.SF</exclude>
+                                        <exclude>META-INF/*.DSA</exclude>
+                                        <exclude>META-INF/*.RSA</exclude>
+                                    </excludes>
+                                </filter>
+                            </filters>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
 </project>
\ No newline at end of file
diff --git a/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/AggregationMaxType.java b/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/AggregationMaxType.java
index 226fd00c7c187bddb80595c51f2517233a8d2145..306ce19e421938919c65b970535358e4ff0f721f 100644
--- a/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/AggregationMaxType.java
+++ b/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/AggregationMaxType.java
@@ -1,14 +1,13 @@
 /*
- * Copyright (c) 2018 Fraunhofer FOKUS.
+ * Copyright (c) 2017 Fraunhofer FOKUS.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the
- * Eclipse Public License version 2.0 which accompanies
+ * GNU AGPL v3 which accompanies
  * this distribution, and is available at
- * https://opensource.org/licenses/EPL-2.0
+ * http://www.gnu.org/licenses/agpl.txt
  *
  * Contributors:
- *
- * Simon Dutkowski (Fraunhofer FOKUS)
+ * Simon Dutkowski Fraunhofer FOKUS
  *
  * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
  */
diff --git a/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/AggregationMinType.java b/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/AggregationMinType.java
index d70e2242e71a7aa379b797c6a184913af7c4d878..c5eb5ba376b322d6b5ece6b701ea6abffdb796d7 100644
--- a/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/AggregationMinType.java
+++ b/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/AggregationMinType.java
@@ -1,14 +1,13 @@
 /*
- * Copyright (c) 2018 Fraunhofer FOKUS.
+ * Copyright (c) 2017 Fraunhofer FOKUS.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the
- * Eclipse Public License version 2.0 which accompanies
+ * GNU AGPL v3 which accompanies
  * this distribution, and is available at
- * https://opensource.org/licenses/EPL-2.0
+ * http://www.gnu.org/licenses/agpl.txt
  *
  * Contributors:
- *
- * Simon Dutkowski (Fraunhofer FOKUS)
+ * Simon Dutkowski Fraunhofer FOKUS
  *
  * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
  */
diff --git a/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/AggregationSumType.java b/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/AggregationSumType.java
index 75dce7d65dd1d64095f3b209d8457ae2aeefadfa..2e9ea472aaec7e744847d36a7379987291366c92 100644
--- a/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/AggregationSumType.java
+++ b/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/AggregationSumType.java
@@ -1,14 +1,13 @@
 /*
- * Copyright (c) 2018 Fraunhofer FOKUS.
+ * Copyright (c) 2017 Fraunhofer FOKUS.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the
- * Eclipse Public License version 2.0 which accompanies
+ * GNU AGPL v3 which accompanies
  * this distribution, and is available at
- * https://opensource.org/licenses/EPL-2.0
+ * http://www.gnu.org/licenses/agpl.txt
  *
  * Contributors:
- *
- * Simon Dutkowski (Fraunhofer FOKUS)
+ * Simon Dutkowski Fraunhofer FOKUS
  *
  * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
  */
diff --git a/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/AvailabilityAggregationSumType.java b/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/AvailabilityAggregationSumType.java
index 42cb6ff91f8e6ff3f22b7ef6df9521e1d3f9b16b..6b6892ead1a9fe430418e5599beefd80b1148afe 100644
--- a/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/AvailabilityAggregationSumType.java
+++ b/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/AvailabilityAggregationSumType.java
@@ -1,14 +1,13 @@
 /*
- * Copyright (c) 2018 Fraunhofer FOKUS.
+ * Copyright (c) 2017 Fraunhofer FOKUS.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the
- * Eclipse Public License version 2.0 which accompanies
+ * GNU AGPL v3 which accompanies
  * this distribution, and is available at
- * https://opensource.org/licenses/EPL-2.0
+ * http://www.gnu.org/licenses/agpl.txt
  *
  * Contributors:
- *
- * Simon Dutkowski (Fraunhofer FOKUS)
+ * Simon Dutkowski Fraunhofer FOKUS
  *
  * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
  */
diff --git a/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/AvailabilityMTBFMTTR.java b/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/AvailabilityMTBFMTTR.java
index bc98d3212e946d289ffa6745641e20edfa186033..a718615a2610285e54e1e853d45076b63c722a22 100644
--- a/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/AvailabilityMTBFMTTR.java
+++ b/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/AvailabilityMTBFMTTR.java
@@ -1,14 +1,13 @@
 /*
- * Copyright (c) 2018 Fraunhofer FOKUS.
+ * Copyright (c) 2017 Fraunhofer FOKUS.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the
- * Eclipse Public License version 2.0 which accompanies
+ * GNU AGPL v3 which accompanies
  * this distribution, and is available at
- * https://opensource.org/licenses/EPL-2.0
+ * http://www.gnu.org/licenses/agpl.txt
  *
  * Contributors:
- *
- * Simon Dutkowski (Fraunhofer FOKUS)
+ * Simon Dutkowski Fraunhofer FOKUS
  *
  * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
  */
diff --git a/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/AvailabilityUptimeBillingCycle.java b/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/AvailabilityUptimeBillingCycle.java
index e10ecf23cb4f4fc6cdcfd139cf86558ffd60e1eb..8f99b72d6642ab2f6b187a37eabc8c2f6de93a27 100644
--- a/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/AvailabilityUptimeBillingCycle.java
+++ b/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/AvailabilityUptimeBillingCycle.java
@@ -1,14 +1,13 @@
 /*
- * Copyright (c) 2018 Fraunhofer FOKUS.
+ * Copyright (c) 2017 Fraunhofer FOKUS.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the
- * Eclipse Public License version 2.0 which accompanies
+ * GNU AGPL v3 which accompanies
  * this distribution, and is available at
- * https://opensource.org/licenses/EPL-2.0
+ * http://www.gnu.org/licenses/agpl.txt
  *
  * Contributors:
- *
- * Simon Dutkowski (Fraunhofer FOKUS)
+ * Simon Dutkowski Fraunhofer FOKUS
  *
  * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
  */
diff --git a/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/Empty.java b/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/Empty.java
index 73900c5929d77ff2dc4ac5e32a8f2969547c5474..a9f5eb0fc68b9f2be2ab93995452eb889ec07420 100644
--- a/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/Empty.java
+++ b/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/Empty.java
@@ -1,14 +1,13 @@
 /*
- * Copyright (c) 2018 Fraunhofer FOKUS.
+ * Copyright (c) 2017 Fraunhofer FOKUS.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the
- * Eclipse Public License version 2.0 which accompanies
+ * GNU AGPL v3 which accompanies
  * this distribution, and is available at
- * https://opensource.org/licenses/EPL-2.0
+ * http://www.gnu.org/licenses/agpl.txt
  *
  * Contributors:
- *
- * Simon Dutkowski (Fraunhofer FOKUS)
+ * Simon Dutkowski Fraunhofer FOKUS
  *
  * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
  */
diff --git a/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/EvaluationResult.java b/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/EvaluationResult.java
index 1b6060796f9a679065518132c6fd49ec1ab59ef4..8ef455f88afd3d9623396aa22809fb3e225f3874 100644
--- a/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/EvaluationResult.java
+++ b/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/EvaluationResult.java
@@ -1,14 +1,13 @@
 /*
- * Copyright (c) 2018 Fraunhofer FOKUS.
+ * Copyright (c) 2017 Fraunhofer FOKUS.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the
- * Eclipse Public License version 2.0 which accompanies
+ * GNU AGPL v3 which accompanies
  * this distribution, and is available at
- * https://opensource.org/licenses/EPL-2.0
+ * http://www.gnu.org/licenses/agpl.txt
  *
  * Contributors:
- *
- * Simon Dutkowski (Fraunhofer FOKUS)
+ * Simon Dutkowski Fraunhofer FOKUS
  *
  * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
  */
diff --git a/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/Expressions.java b/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/Expressions.java
index 34c01ed9ee3c5982811d7d3957232e1c549876ec..d1dc5dd3d0ab2ffc09ddc2fda95f25b8455c6c22 100644
--- a/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/Expressions.java
+++ b/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/Expressions.java
@@ -1,14 +1,13 @@
 /*
- * Copyright (c) 2018 Fraunhofer FOKUS.
+ * Copyright (c) 2017 Fraunhofer FOKUS.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the
- * Eclipse Public License version 2.0 which accompanies
+ * GNU AGPL v3 which accompanies
  * this distribution, and is available at
- * https://opensource.org/licenses/EPL-2.0
+ * http://www.gnu.org/licenses/agpl.txt
  *
  * Contributors:
- *
- * Simon Dutkowski (Fraunhofer FOKUS)
+ * Simon Dutkowski Fraunhofer FOKUS
  *
  * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
  */
diff --git a/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/MetricsContext.java b/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/MetricsContext.java
index 8738dc622f0108befe84753a12e63b1d16ef8968..c8f25563787a9f0af3d52ade01ee4af750bf4c4f 100644
--- a/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/MetricsContext.java
+++ b/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/MetricsContext.java
@@ -1,14 +1,13 @@
 /*
- * Copyright (c) 2018 Fraunhofer FOKUS.
+ * Copyright (c) 2017 Fraunhofer FOKUS.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the
- * Eclipse Public License version 2.0 which accompanies
+ * GNU AGPL v3 which accompanies
  * this distribution, and is available at
- * https://opensource.org/licenses/EPL-2.0
+ * http://www.gnu.org/licenses/agpl.txt
  *
  * Contributors:
- *
- * Simon Dutkowski (Fraunhofer FOKUS)
+ * Simon Dutkowski Fraunhofer FOKUS
  *
  * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
  */
diff --git a/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/Predefined.java b/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/Predefined.java
index 70c1a305d5f1b22fd45c527469706a632b7a6a59..de84b0cb0195fdc853287084285d7d7eb60370bc 100644
--- a/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/Predefined.java
+++ b/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/Predefined.java
@@ -1,14 +1,13 @@
 /*
- * Copyright (c) 2018 Fraunhofer FOKUS.
+ * Copyright (c) 2017 Fraunhofer FOKUS.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the
- * Eclipse Public License version 2.0 which accompanies
+ * GNU AGPL v3 which accompanies
  * this distribution, and is available at
- * https://opensource.org/licenses/EPL-2.0
+ * http://www.gnu.org/licenses/agpl.txt
  *
  * Contributors:
- *
- * Simon Dutkowski (Fraunhofer FOKUS)
+ * Simon Dutkowski Fraunhofer FOKUS
  *
  * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
  */
diff --git a/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/PredefinedExpression.java b/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/PredefinedExpression.java
index fa91348990c9e7faf09da0454fdcb453ea2e0416..544f641c18cf05ed6a23822b7db398046c90a2b3 100644
--- a/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/PredefinedExpression.java
+++ b/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/PredefinedExpression.java
@@ -1,14 +1,13 @@
 /*
- * Copyright (c) 2018 Fraunhofer FOKUS.
+ * Copyright (c) 2017 Fraunhofer FOKUS.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the
- * Eclipse Public License version 2.0 which accompanies
+ * GNU AGPL v3 which accompanies
  * this distribution, and is available at
- * https://opensource.org/licenses/EPL-2.0
+ * http://www.gnu.org/licenses/agpl.txt
  *
  * Contributors:
- *
- * Simon Dutkowski (Fraunhofer FOKUS)
+ * Simon Dutkowski Fraunhofer FOKUS
  *
  * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
  */
diff --git a/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/ServiceObjectiveMetrics.java b/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/ServiceObjectiveMetrics.java
index a0a6401c0deeb1005673d72c8a061efa747d9ce4..49f9e7d8c4b1446e1b196e922aab48bcbba6d3a6 100644
--- a/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/ServiceObjectiveMetrics.java
+++ b/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/ServiceObjectiveMetrics.java
@@ -1,14 +1,13 @@
 /*
- * Copyright (c) 2018 Fraunhofer FOKUS.
+ * Copyright (c) 2017 Fraunhofer FOKUS.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the
- * Eclipse Public License version 2.0 which accompanies
+ * GNU AGPL v3 which accompanies
  * this distribution, and is available at
- * https://opensource.org/licenses/EPL-2.0
+ * http://www.gnu.org/licenses/agpl.txt
  *
  * Contributors:
- *
- * Simon Dutkowski (Fraunhofer FOKUS)
+ * Simon Dutkowski Fraunhofer FOKUS
  *
  * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
  */
@@ -96,6 +95,10 @@ public class ServiceObjectiveMetrics {
                 .map(m -> (Double)evaluate(m, measuredValues.get(m.getId())).getMeasurementResultValue())
                 .collect(Collectors.toList());
 
+        if (subValues.isEmpty()) {
+            return errorResult("No underlying metrics for the given keys found.");
+        }
+
         return (EvaluationResult<Double>)evaluate(metric, subValues);
     }
 
@@ -107,10 +110,15 @@ public class ServiceObjectiveMetrics {
         Metric metric = objective.getMetrics().get(0);
         List<EvaluationResult> results = context.restore(objective.getTermName());
         List<Double> subValues = results.stream().map(r -> (Double)r.getMeasurementResultValue()).collect(Collectors.toList());
+
+        if (subValues.isEmpty()) {
+            return errorResult("No stored metrics evaluation result found.");
+        }
+
         return (EvaluationResult<Double>)evaluate(metric, subValues);
     }
 
-    private <T extends Comparable<T>> EvaluationResult<?> evaluate(Metric metric, List<T> values) {
+    private <T extends Comparable<T>, V extends Comparable<V>> EvaluationResult<V> evaluate(Metric metric, List<T> values) {
         Expression expression = metric.getExpression();
         if (expression.getExpressionLanguage().equals(Expressions.LANGUAGE_PREDEFINED)) {
             Predefined predefined = Predefined.valueOf(expression.getExpression());
@@ -119,30 +127,30 @@ public class ServiceObjectiveMetrics {
                     AvailabilityAggregationSumType availability = (AvailabilityAggregationSumType)Expressions.create(predefined);
                     List<Double> finalList = values.get(0) instanceof Long ? ((List<Long>)values).stream().map(Long::doubleValue).collect(Collectors.toList()) : (List<Double>)values;
                     Double value = availability.calculate(finalList, metric.getParameters());
-                    return result(value, Statement.valueOf(objective.getConditionStatement()), Double.valueOf(objective.getValue()));
+                    return (EvaluationResult<V>)result(value, Statement.valueOf(objective.getConditionStatement()), Double.valueOf(objective.getValue()));
                 case AVAILABILITY_MTBFMTTR:
                     AvailabilityMTBFMTTR mtbfmttr = (AvailabilityMTBFMTTR)Expressions.create(predefined);
                     Double value0 = mtbfmttr.calculate((List<Long>)values, metric.getParameters());
-                    return result(value0, Statement.valueOf(objective.getConditionStatement()), Double.valueOf(objective.getValue()));
+                    return (EvaluationResult<V>)result(value0, Statement.valueOf(objective.getConditionStatement()), Double.valueOf(objective.getValue()));
                 case AVAILABILITY_UPTIME_BC:
                     AvailabilityUptimeBillingCycle uptimeBillingCycle = (AvailabilityUptimeBillingCycle)Expressions.create(predefined);
                     Double value1 = uptimeBillingCycle.calculate((List<Long>)values, metric.getParameters());
-                    return result(value1, Statement.valueOf(objective.getConditionStatement()), Double.valueOf(objective.getValue()));
+                    return (EvaluationResult<V>)result(value1, Statement.valueOf(objective.getConditionStatement()), Double.valueOf(objective.getValue()));
                 case AGGREGATION_SUMTYPE:
                     AggregationSumType<Double> sumAggregation = (AggregationSumType<Double>)Expressions.create(predefined);
                     List<Double> finalList2 = values.get(0) instanceof Long ? ((List<Long>)values).stream().map(Long::doubleValue).collect(Collectors.toList()) : (List<Double>)values;
                     Double value2 = sumAggregation.calculate(finalList2, metric.getParameters());
-                    return result(value2, Statement.valueOf(objective.getConditionStatement()), Double.valueOf(objective.getValue()));
+                    return (EvaluationResult<V>)result(value2, Statement.valueOf(objective.getConditionStatement()), Double.valueOf(objective.getValue()));
                 case AGGREGATION_MINTYPE:
                     AggregationMinType<Double> minAggregation = (AggregationMinType<Double>)Expressions.create(predefined);
                     List<Double> finalList3 = values.get(0) instanceof Long ? ((List<Long>)values).stream().map(Long::doubleValue).collect(Collectors.toList()) : (List<Double>)values;
                     Double value3 = minAggregation.calculate(finalList3, metric.getParameters());
-                return result(value3, Statement.valueOf(objective.getConditionStatement()), Double.valueOf(objective.getValue()));
+                    return (EvaluationResult<V>)result(value3, Statement.valueOf(objective.getConditionStatement()), Double.valueOf(objective.getValue()));
                 case AGGREGATION_MAXTYPE:
                     AggregationMaxType<Double> maxAggregation = (AggregationMaxType<Double>)Expressions.create(predefined);
                     List<Double> finalList4 = values.get(0) instanceof Long ? ((List<Long>)values).stream().map(Long::doubleValue).collect(Collectors.toList()) : (List<Double>)values;
                     Double value4 = maxAggregation.calculate(finalList4, metric.getParameters());
-                    return result(value4, Statement.valueOf(objective.getConditionStatement()), Double.valueOf(objective.getValue()));
+                    return (EvaluationResult<V>)result(value4, Statement.valueOf(objective.getConditionStatement()), Double.valueOf(objective.getValue()));
                 case EMPTY:
                     return errorResult("Empty metric.");
                 default:
@@ -153,8 +161,8 @@ public class ServiceObjectiveMetrics {
         }
     }
 
-    private <T extends Comparable<T>> EvaluationResult<T> result(T result, Statement conditionStatement, T value) {
-        EvaluationResult<T> res = new EvaluationResult<>();
+    private <V extends Comparable<V>> EvaluationResult<V> result(V result, Statement conditionStatement, V value) {
+        EvaluationResult<V> res = new EvaluationResult<>();
         res.setTermName(objective.getTermName());
         res.setConditionStatement(conditionStatement, value);
         res.setMeasurementResultValue(result);
diff --git a/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/Statement.java b/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/Statement.java
index 2be3a2be2f2dd402d89f432bb00e02fdac842a6b..3903bcac875b766bc25abadc0d47adba2da06b72 100644
--- a/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/Statement.java
+++ b/MCSLA/mcsla-core/src/main/java/eu/DECIDEh2020/mcsla/core/metrics/Statement.java
@@ -1,14 +1,13 @@
 /*
- * Copyright (c) 2018 Fraunhofer FOKUS.
+ * Copyright (c) 2017 Fraunhofer FOKUS.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the
- * Eclipse Public License version 2.0 which accompanies
+ * GNU AGPL v3 which accompanies
  * this distribution, and is available at
- * https://opensource.org/licenses/EPL-2.0
+ * http://www.gnu.org/licenses/agpl.txt
  *
  * Contributors:
- *
- * Simon Dutkowski (Fraunhofer FOKUS)
+ * Simon Dutkowski Fraunhofer FOKUS
  *
  * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
  */
diff --git a/MCSLA/mcsla-core/src/test/java/eu/DECIDEh2020/mcsla/core/metrics/MetricsContextTest.java b/MCSLA/mcsla-core/src/test/java/eu/DECIDEh2020/mcsla/core/metrics/MetricsContextTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..66a35a5daca9372d6f9ee450f8dcbb00090d23dd
--- /dev/null
+++ b/MCSLA/mcsla-core/src/test/java/eu/DECIDEh2020/mcsla/core/metrics/MetricsContextTest.java
@@ -0,0 +1,179 @@
+/*
+ * Copyright (c) 2017 Fraunhofer FOKUS.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the
+ * GNU AGPL v3 which accompanies
+ * this distribution, and is available at
+ * http://www.gnu.org/licenses/agpl.txt
+ *
+ * Contributors:
+ * Simon Dutkowski Fraunhofer FOKUS
+ *
+ * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+ */
+package eu.DECIDEh2020.mcsla.core.metrics;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.common.collect.ImmutableBiMap;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Maps;
+import eu.DECIDEh2020.appManager.AppDescriptionFactory;
+import eu.DECIDEh2020.appManager.exceptions.DECIDEValidationException;
+import eu.DECIDEh2020.appManager.models.AppDescription;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+import java.io.IOException;
+import java.nio.file.FileSystems;
+import java.nio.file.Path;
+import java.util.*;
+
+public class MetricsContextTest {
+
+    private MetricsContext context;
+
+    @BeforeClass
+    public void init() {
+        Path path = FileSystems.getDefault().getPath("src/test/resources/DECIDE.json");
+        try {
+            AppDescription appDescription = new ObjectMapper().readValue(path.toFile(), AppDescription.class);
+            AppDescriptionFactory.validateAppDescription(appDescription);
+            context = MetricsContext.create(appDescription);
+        } catch (DECIDEValidationException | IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    @DataProvider(name = "csIdsDownTimes")
+    public Object[][] createCsIdsDownTimes() {
+        return new Object[][] {
+                { "38", new long[] { 3000L, 4200L, 6300L } },
+                { "15", new long[] { 5000L } },
+                { "28", new long[] { 500L, 4400L, 3000L, 1000L } }
+        };
+    }
+
+    @DataProvider(name = "aggregationValues")
+    public Object[][] createAggregationValues() {
+        return new Object[][] {
+                { Predefined.AVAILABILITY_AGGREGATION_SUMTYPE, Arrays.asList(50.0, 50.0, 50.0), -50.0 },
+                { Predefined.AVAILABILITY_AGGREGATION_SUMTYPE, Arrays.asList(99.9, 99.9, 99.9 ), 99.7 },
+                { Predefined.AGGREGATION_SUMTYPE, Arrays.asList(100.00, 3000.00, 550.00 ), 3650.00 }
+        };
+    }
+
+    @DataProvider(name = "microservicesMeasuredValues")
+    public Object[][] createMicroservicesMeasuredValues() {
+        return new Object[][] {
+                {
+                    ImmutableMap.of(
+                        "9005a07c-1148-49bf-8c94-83421ce20e52", Arrays.asList(0L, 9000L, 10000L),
+                        "3d16aa10-1ba0-43b2-b9c3-fa4f2c761688", Arrays.asList(0L, 30000L, 30100L),
+                        "7a1837ea-2f5e-4fb2-aa57-a8261f2a5a83", Arrays.asList(0L, 100000L, 100250L))
+                },
+                {
+                    ImmutableMap.of(
+                        "9005a07c-1148-49bf-8c94-83421ce20e52", Arrays.asList(47L, 48L, 49L),
+                        "3d16aa10-1ba0-43b2-b9c3-fa4f2c761688", Arrays.asList(99L, 100L,101L),
+                        "7a1837ea-2f5e-4fb2-aa57-a8261f2a5a83", Arrays.asList(199L, 200L,201L))
+                }
+        };
+    }
+
+    @Test
+    public void metricsContext() {
+        try {
+            MetricsContext context = MetricsContext.create(AppDescriptionFactory.createAppDescription("Test"));
+            assert false;
+        } catch (IllegalStateException e) {
+            assert true : e.getMessage();
+        }
+    }
+
+    @Test(dataProvider = "aggregationValues")
+    public void metricsContextAggregate(Predefined predefined, List<Double> values, Double result) {
+        Double aggregated = MetricsContext.aggregate(values, predefined);
+        Double rounded = Math.round(aggregated * 100.0) / 100.0;
+
+        assert rounded.equals(result) : "Aggregation is " + rounded;
+    }
+
+    // Aggregation with explicit values.
+    @Test
+    public void availabilityAggregationRaw() {
+
+        // Get all service objectives from the MCSLA (App SLA)
+        Map<String, ServiceObjectiveMetrics> metrics = context.getAppMetrics();
+
+        // Get the service objective for Availability
+        ServiceObjectiveMetrics availabilityMetrics = metrics.get("Availability");
+
+        // Evaluate against a list of measured cloud service values
+        double[] values = { 99.9, 99.99, 99.95, 99.95 };
+        EvaluationResult<Double> evaluation = availabilityMetrics.evaluate(values);
+
+        // Read out the evaluation result
+        System.out.println("result of raw: " + evaluation.getMeasurementResultValue());
+        System.out.println("final condition met: " + evaluation.isConditionMet());
+
+        assert !evaluation.isError() : evaluation.getErrorMessage();
+    }
+
+    // Aggregation based on internal recall. Precondition is that all values to be aggregated are measured once before.
+    @Test(dependsOnMethods = "availabilityBillingCycle")
+    public void availabilityAggregationMemory() {
+
+        // Get all service objectives from the MCSLA (App SLA)
+        Map<String, ServiceObjectiveMetrics> metrics = context.getAppMetrics();
+
+        // Get the service objective for Availability
+        ServiceObjectiveMetrics availabilityMetrics = metrics.get("Availability");
+
+        // Evaluate against the previously measured and internally stored cloud service values
+        EvaluationResult<Double> evaluation = availabilityMetrics.evaluate();
+
+        // Read out the evaluation result
+        System.out.println("final result from memory: " + evaluation.getMeasurementResultValue());
+        System.out.println("final condition met: " + evaluation.isConditionMet());
+
+        assert !evaluation.isError() : evaluation.getErrorMessage();
+    }
+
+    @Test(dataProvider = "csIdsDownTimes")
+    public void availabilityBillingCycle(String csId, long[] values) {
+
+        // Get all service objectives for a specific cloud service
+        Map<String, ServiceObjectiveMetrics> metrics = context.getCsMetrics(csId);
+
+        // Get the service objective for Availability
+        ServiceObjectiveMetrics availabilityMetrics = metrics.get("Availability");
+
+        // Evaluate against the measured values
+        EvaluationResult<Double> evaluation = availabilityMetrics.evaluate(values);
+
+        // Read out the evaluation result
+        System.out.println("result of billing cycle: " + evaluation.getMeasurementResultValue());
+        System.out.println("condition met: " + evaluation.isConditionMet());
+
+        assert !evaluation.isError() : evaluation.getErrorMessage();
+    }
+
+    @Test(dataProvider = "microservicesMeasuredValues")
+    public void availabilityAggregation(Map<String, List<Long>> measuredValues) {
+        // Get all service objectives from the MCSLA (App SLA)
+        Map<String, ServiceObjectiveMetrics> metrics = context.getAppMetrics();
+
+        // Get the service objective for Availability
+        ServiceObjectiveMetrics availabilityMetrics = metrics.get("Availability");
+
+        // Evaluate against a list of measured cloud service values
+        EvaluationResult<Double> evaluation = availabilityMetrics.evaluate(measuredValues);
+
+        // Read out the evaluation result
+        System.out.println("result of microservice: " + evaluation.getMeasurementResultValue());
+        System.out.println("final condition met: " + evaluation.isConditionMet());
+
+        assert !evaluation.isError() : evaluation.getErrorMessage();
+    }
+}
diff --git a/MCSLA/mcsla-service/.gitlab-ci.yml b/MCSLA/mcsla-service/.gitlab-ci.yml
index d448b5e64675d852e131079b6fef283362981e54..5b2ffc57fb9d4ac4a09944c2ea5f9f18fd4e960e 100644
--- a/MCSLA/mcsla-service/.gitlab-ci.yml
+++ b/MCSLA/mcsla-service/.gitlab-ci.yml
@@ -1,3 +1,16 @@
+variables:
+  # This will suppress any download for dependencies and plugins or upload messages which would clutter the console log.
+  # `showDateTime` will show the passed time in milliseconds. You need to specify `--batch-mode` to make this work.
+  MAVEN_OPTS: "-Dhttps.protocols=TLSv1.2 -Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true"
+  # As of Maven 3.3.0 instead of this you may define these options in `.mvn/maven.config` so the same config is used
+  # when running from the command line.
+  # `installAtEnd` and `deployAtEnd` are only effective with recent version of the corresponding plugins.
+  MAVEN_CLI_OPTS: "--batch-mode --errors --fail-at-end --show-version"
+
+cache:
+  paths:
+    - .m2/repository
+
 stages:
   - build
   - deploy
@@ -8,7 +21,7 @@ build:
     - docker
   image: maven:3.6.0-jdk-10
   script:
-    - "mvn clean package -U -B -DskipTests"
+    - "mvn $MAVEN_CLI_OPTS clean package -U -DskipTests"
   only:
     - master
   artifacts:
diff --git a/MCSLA/mcsla-service/pom.xml b/MCSLA/mcsla-service/pom.xml
index 350752bcb67bf9faeed643ad24bdf5c3a151a91d..972d18a27b86f8c558c1bb3b4a5b03f9f16471c9 100644
--- a/MCSLA/mcsla-service/pom.xml
+++ b/MCSLA/mcsla-service/pom.xml
@@ -6,11 +6,11 @@
 
     <groupId>eu.DECIDEh2020</groupId>
     <artifactId>mcsla-service</artifactId>
-    <version>0.0.5-SNAPSHOT</version>
+    <version>0.0.6-SNAPSHOT</version>
 
     <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <vertx.version>3.5.4</vertx.version>
+        <vertx.version>3.7.1</vertx.version>
         <main.verticle>eu.DECIDEh2020.mcsla.service.MainVerticle</main.verticle>
     </properties>
 
@@ -79,12 +79,12 @@
         <dependency>
             <groupId>eu.DECIDEh2020</groupId>
             <artifactId>app-controller</artifactId>
-            <version>0.0.16-SNAPSHOT</version>
+            <version>0.0.16</version>
         </dependency>
         <dependency>
             <groupId>eu.DECIDEh2020</groupId>
             <artifactId>mcsla-core</artifactId>
-            <version>0.0.3-SNAPSHOT</version>
+            <version>0.0.4</version>
         </dependency>
         <dependency>
             <groupId>ch.qos.logback</groupId>
@@ -94,11 +94,18 @@
     </dependencies>
 
     <build>
+        <resources>
+            <resource>
+                <directory>src/main/resources</directory>
+                <filtering>true</filtering>
+            </resource>
+        </resources>
+
         <pluginManagement>
             <plugins>
                 <plugin>
                     <artifactId>maven-compiler-plugin</artifactId>
-                    <version>3.8.0</version>
+                    <version>3.8.1</version>
                     <configuration>
                         <source>1.8</source>
                         <target>1.8</target>
@@ -131,7 +138,7 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-shade-plugin</artifactId>
-                <version>3.1.1</version>
+                <version>3.2.1</version>
                 <executions>
                     <execution>
                         <phase>package</phase>
diff --git a/MCSLA/mcsla-service/src/main/resources/logback.xml b/MCSLA/mcsla-service/src/main/resources/logback.xml
index ae277159e62f49cf9493b128ea8549ad4fd18866..2d0eb74a5a5a47770390d2cd891b78cb747c7ee3 100644
--- a/MCSLA/mcsla-service/src/main/resources/logback.xml
+++ b/MCSLA/mcsla-service/src/main/resources/logback.xml
@@ -7,7 +7,7 @@
         </encoder>
     </appender>
 
-    <logger name="eu.DECIDEh2020" level="TRACE" />
+    <logger name="eu.DECIDEh2020" level="INFO" />
 
     <root level="INFO">
         <appender-ref ref="STDOUT"/>
diff --git a/MCSLA/mcsla-service/src/main/resources/webroot/openapi.yaml b/MCSLA/mcsla-service/src/main/resources/webroot/openapi.yaml
index d1cb92e42b3ab884897f3aff21325e2c98ceb053..00de14fcba49cd28fe2ffe49766a9c02f6be53c9 100644
--- a/MCSLA/mcsla-service/src/main/resources/webroot/openapi.yaml
+++ b/MCSLA/mcsla-service/src/main/resources/webroot/openapi.yaml
@@ -1,7 +1,7 @@
 openapi: 3.0.1
 
 info:
-  version: 0.0.2
+  version: ${project.version}
   title: DECIDE MCSLA Service
   x-logo:
     url: "images/logoDecide_300ppp_small.jpg"
diff --git a/MCSLA/mcsla-ui/.gitlab-ci.yml b/MCSLA/mcsla-ui/.gitlab-ci.yml
index 052d6216d6633858952d0e860b3fbea1d6c925c8..acda3924df645d56367dc45665b322847a11b694 100644
--- a/MCSLA/mcsla-ui/.gitlab-ci.yml
+++ b/MCSLA/mcsla-ui/.gitlab-ci.yml
@@ -8,8 +8,6 @@ cache:
 
 build:
   stage: build
-  tags:
-    - docker
   image: node
   script:
     - "npm install"
@@ -23,7 +21,7 @@ build:
 register:
   stage: deploy
   tags:
-    - docker
+    - dind
   image: docker:latest
   variables:
     DOCKER_DRIVER: overlay2
diff --git a/MCSLA/mcsla-ui/README.md b/MCSLA/mcsla-ui/README.md
index 80586daf788e6620f763d05b55e6848b21a55899..ebd73d781ea3ef3a8e8d7c761c1ab00f0a050d78 100644
--- a/MCSLA/mcsla-ui/README.md
+++ b/MCSLA/mcsla-ui/README.md
@@ -31,7 +31,7 @@ http://localhost:8080
 ```
 
 ### Dashboard mashup
-There is a content only version, without a hader and a left side navigation bar. It shows only the content of the mcsla tab and requires the remote repository data:
+There is a content only version, without a header and a left side navigation bar. It shows only the content of the mcsla tab and requires the remote repository data:
 
 For example, assuming the host is mcsla-ui and it is running on port 80:
 ```
diff --git a/MCSLA/mcsla-ui/package-lock.json b/MCSLA/mcsla-ui/package-lock.json
index ccbb0a296ec3b74f809faa45555a4c72b9352ab9..b20c664c3bcaf051b5fdfd51091ee8960567b4de 100644
--- a/MCSLA/mcsla-ui/package-lock.json
+++ b/MCSLA/mcsla-ui/package-lock.json
@@ -1,13 +1,13 @@
 {
   "name": "mcsla-ui",
-  "version": "0.4.0",
+  "version": "0.5.0",
   "lockfileVersion": 1,
   "requires": true,
   "dependencies": {
     "@babel/runtime": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.0.0.tgz",
-      "integrity": "sha512-7hGhzlcmg01CvH1EHdSPVXYX1aJ8KCEyz6I9xYIi/asDtzBPMyMhVibhM/K6g/5qnKBwjZtp10bNZIEFTRW1MA==",
+      "version": "7.3.1",
+      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.3.1.tgz",
+      "integrity": "sha512-7jGW8ppV0ant637pIqAcFfQDDH1orEPGJb8aXfUozuCU3QqX7rX4DA8iwrbPrR1hcH0FTTHz47yQnk+bl5xHQA==",
       "requires": {
         "regenerator-runtime": "0.12.1"
       },
@@ -19,22 +19,28 @@
         }
       }
     },
+    "@emotion/hash": {
+      "version": "0.7.1",
+      "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.7.1.tgz",
+      "integrity": "sha512-OYpa/Sg+2GDX+jibUfpZVn1YqSVRpYmTLF2eyAfrFTIJSbwyIrc+YscayoykvaOME/wV4BV0Sa0yqdMrgse6mA=="
+    },
     "@material-ui/core": {
-      "version": "3.6.0",
-      "resolved": "https://registry.npmjs.org/@material-ui/core/-/core-3.6.0.tgz",
-      "integrity": "sha512-Erg9PI1xYa8pQFZf6tvWMGyoKCup+P3HJ6phagKGGPzNQ8dswpgW/qNkTOJNG2DaTtXDmkOswpjWcceHqURwYw==",
-      "requires": {
-        "@babel/runtime": "7.1.2",
-        "@material-ui/utils": "3.0.0-alpha.0",
-        "@types/jss": "9.5.7",
-        "@types/react-transition-group": "2.0.14",
+      "version": "3.9.3",
+      "resolved": "https://registry.npmjs.org/@material-ui/core/-/core-3.9.3.tgz",
+      "integrity": "sha512-REIj62+zEvTgI/C//YL4fZxrCVIySygmpZglsu/Nl5jPqy3CDjZv1F9ubBYorHqmRgeVPh64EghMMWqk4egmfg==",
+      "requires": {
+        "@babel/runtime": "7.3.1",
+        "@material-ui/system": "3.0.0-alpha.2",
+        "@material-ui/utils": "3.0.0-alpha.3",
+        "@types/jss": "9.5.8",
+        "@types/react-transition-group": "2.9.1",
         "brcast": "3.0.1",
         "classnames": "2.2.6",
-        "csstype": "2.5.7",
+        "csstype": "2.6.4",
         "debounce": "1.2.0",
-        "deepmerge": "2.2.1",
+        "deepmerge": "3.2.0",
         "dom-helpers": "3.4.0",
-        "hoist-non-react-statics": "3.2.0",
+        "hoist-non-react-statics": "3.3.0",
         "is-plain-object": "2.0.4",
         "jss": "9.8.7",
         "jss-camel-case": "6.1.0",
@@ -43,153 +49,165 @@
         "jss-nested": "6.0.1",
         "jss-props-sort": "6.0.0",
         "jss-vendor-prefixer": "7.0.0",
-        "keycode": "2.2.0",
         "normalize-scroll-left": "0.1.2",
-        "popper.js": "1.14.5",
+        "popper.js": "1.15.0",
         "prop-types": "15.6.0",
-        "react-event-listener": "0.6.4",
-        "react-transition-group": "2.5.0",
+        "react-event-listener": "0.6.6",
+        "react-transition-group": "2.9.0",
         "recompose": "0.30.0",
-        "warning": "4.0.2"
-      },
-      "dependencies": {
-        "@babel/runtime": {
-          "version": "7.1.2",
-          "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.1.2.tgz",
-          "integrity": "sha512-Y3SCjmhSupzFB6wcv1KmmFucH6gDVnI30WjOcicV10ju0cZjak3Jcs67YLIXBrmZYw1xCrVeJPbycFwrqNyxpg==",
+        "warning": "4.0.3"
+      }
+    },
+    "@material-ui/icons": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/@material-ui/icons/-/icons-3.0.2.tgz",
+      "integrity": "sha512-QY/3gJnObZQ3O/e6WjH+0ah2M3MOgLOzCy8HTUoUx9B6dDrS18vP7Ycw3qrDEKlB6q1KNxy6CZHm5FCauWGy2g==",
+      "requires": {
+        "@babel/runtime": "7.3.1",
+        "recompose": "0.30.0"
+      }
+    },
+    "@material-ui/lab": {
+      "version": "3.0.0-alpha.30",
+      "resolved": "https://registry.npmjs.org/@material-ui/lab/-/lab-3.0.0-alpha.30.tgz",
+      "integrity": "sha512-d8IXbkQO92Ln7f/Tzy8Q5cLi/sMWH/Uz1xrOO5NKUgg42whwyCuoT9ErddDPFNQmPi9d1C7A5AG8ONjEAbAIyQ==",
+      "requires": {
+        "@babel/runtime": "7.3.1",
+        "@material-ui/utils": "3.0.0-alpha.3",
+        "classnames": "2.2.6",
+        "keycode": "2.2.0",
+        "prop-types": "15.6.0"
+      }
+    },
+    "@material-ui/styles": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/@material-ui/styles/-/styles-4.0.0.tgz",
+      "integrity": "sha512-TUpmXlyZDVOl6E2//+UzsZxgi2E+2L753QY02nNkbAC6PPx8FUBqvnjYSGqX0V/BjTJ/fD4CkoS6ZpY3lHf+Gg==",
+      "requires": {
+        "@babel/runtime": "7.3.1",
+        "@emotion/hash": "0.7.1",
+        "@material-ui/types": "4.0.0",
+        "@material-ui/utils": "4.0.0",
+        "clsx": "1.0.4",
+        "deepmerge": "3.2.0",
+        "hoist-non-react-statics": "3.3.0",
+        "jss": "10.0.0-alpha.16",
+        "jss-plugin-camel-case": "10.0.0-alpha.16",
+        "jss-plugin-default-unit": "10.0.0-alpha.16",
+        "jss-plugin-global": "10.0.0-alpha.16",
+        "jss-plugin-nested": "10.0.0-alpha.16",
+        "jss-plugin-props-sort": "10.0.0-alpha.16",
+        "jss-plugin-rule-value-function": "10.0.0-alpha.16",
+        "jss-plugin-vendor-prefixer": "10.0.0-alpha.16",
+        "prop-types": "15.7.2",
+        "warning": "4.0.3"
+      },
+      "dependencies": {
+        "@material-ui/utils": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/@material-ui/utils/-/utils-4.0.0.tgz",
+          "integrity": "sha512-gjz52hO1hkIbKPMng1diQybVgtfgCptOCrulUs4emSCHHKUoR1zfT+IUrjgOaKIpYZNOgS/CI7KDMp689+FzeQ==",
           "requires": {
-            "regenerator-runtime": "0.12.1"
+            "@babel/runtime": "7.3.1",
+            "prop-types": "15.7.2",
+            "react-is": "16.8.6"
           }
         },
-        "hoist-non-react-statics": {
-          "version": "3.2.0",
-          "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.2.0.tgz",
-          "integrity": "sha512-3IascCRfaEkbmHjJnUxWSspIUE1okLPjGTMVXW8zraUo1t3yg1BadKAxAGILHwgoBzmMnzrgeeaDGBvpuPz6dA==",
+        "jss": {
+          "version": "10.0.0-alpha.16",
+          "resolved": "https://registry.npmjs.org/jss/-/jss-10.0.0-alpha.16.tgz",
+          "integrity": "sha512-HmKNNnr82TR5jkWjBcbrx/uim2ief588pWp7zsf4GQpL125zRkEaWYL1SXv5bR6bBvAoTtvJsTAOxDIlLxUNZg==",
           "requires": {
-            "react-is": "16.6.3"
+            "@babel/runtime": "7.3.1",
+            "is-in-browser": "1.1.3",
+            "tiny-warning": "1.0.2"
           }
         },
-        "regenerator-runtime": {
-          "version": "0.12.1",
-          "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz",
-          "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg=="
-        },
-        "warning": {
-          "version": "4.0.2",
-          "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.2.tgz",
-          "integrity": "sha512-wbTp09q/9C+jJn4KKJfJfoS6VleK/Dti0yqWSm6KMvJ4MRCXFQNapHuJXutJIrWV0Cf4AhTdeIe4qdKHR1+Hug==",
+        "loose-envify": {
+          "version": "1.4.0",
+          "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+          "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
           "requires": {
-            "loose-envify": "1.3.1"
+            "js-tokens": "3.0.2"
           }
-        }
-      }
-    },
-    "@material-ui/icons": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/@material-ui/icons/-/icons-3.0.1.tgz",
-      "integrity": "sha512-1kNcxYiIT1x8iDPEAlgmKrfRTIV8UyK6fLVcZ9kMHIKGWft9I451V5mvSrbCjbf7MX1TbLWzZjph0aVCRf9MqQ==",
-      "requires": {
-        "@babel/runtime": "7.0.0",
-        "recompose": "0.29.0"
-      },
-      "dependencies": {
-        "recompose": {
-          "version": "0.29.0",
-          "resolved": "https://registry.npmjs.org/recompose/-/recompose-0.29.0.tgz",
-          "integrity": "sha512-J/qLXNU4W+AeHCDR70ajW8eMd1uroqZaECTj6qqDLPMILz3y0EzpYlvrnxKB9DnqcngWrtGwjXY9JeXaW9kS1A==",
+        },
+        "prop-types": {
+          "version": "15.7.2",
+          "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
+          "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
           "requires": {
-            "@babel/runtime": "7.0.0",
-            "change-emitter": "0.1.6",
-            "fbjs": "0.8.16",
-            "hoist-non-react-statics": "2.5.5",
-            "react-lifecycles-compat": "3.0.4",
-            "symbol-observable": "1.2.0"
+            "loose-envify": "1.4.0",
+            "object-assign": "4.1.1",
+            "react-is": "16.8.6"
           }
+        },
+        "react-is": {
+          "version": "16.8.6",
+          "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz",
+          "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA=="
         }
       }
     },
-    "@material-ui/lab": {
-      "version": "3.0.0-alpha.24",
-      "resolved": "https://registry.npmjs.org/@material-ui/lab/-/lab-3.0.0-alpha.24.tgz",
-      "integrity": "sha512-tFZ31XkJvxRULTSpEZwNuOA/cHB2vb5xbqTcLbUXbFHO0qULQrAo6ap9WgEPXSy+zt0Oi3TgngT117Ra4OkPmQ==",
+    "@material-ui/system": {
+      "version": "3.0.0-alpha.2",
+      "resolved": "https://registry.npmjs.org/@material-ui/system/-/system-3.0.0-alpha.2.tgz",
+      "integrity": "sha512-odmxQ0peKpP7RQBQ8koly06YhsPzcoVib1vByVPBH4QhwqBXuYoqlCjt02846fYspAqkrWzjxnWUD311EBbxOA==",
       "requires": {
-        "@babel/runtime": "7.1.2",
-        "classnames": "2.2.6",
-        "keycode": "2.2.0"
-      },
-      "dependencies": {
-        "@babel/runtime": {
-          "version": "7.1.2",
-          "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.1.2.tgz",
-          "integrity": "sha512-Y3SCjmhSupzFB6wcv1KmmFucH6gDVnI30WjOcicV10ju0cZjak3Jcs67YLIXBrmZYw1xCrVeJPbycFwrqNyxpg==",
-          "requires": {
-            "regenerator-runtime": "0.12.1"
-          }
-        },
-        "regenerator-runtime": {
-          "version": "0.12.1",
-          "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz",
-          "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg=="
-        }
+        "@babel/runtime": "7.3.1",
+        "deepmerge": "3.2.0",
+        "prop-types": "15.6.0",
+        "warning": "4.0.3"
       }
     },
+    "@material-ui/types": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/@material-ui/types/-/types-4.0.0.tgz",
+      "integrity": "sha512-wuiQMo8nSljZR1oWh57UQYssdtFqaU+Cbhr16uLohzzTllpCAK4LkH0slnH3n+5vCa2dgOdNlZTrmsIDDwvRJQ=="
+    },
     "@material-ui/utils": {
-      "version": "3.0.0-alpha.0",
-      "resolved": "https://registry.npmjs.org/@material-ui/utils/-/utils-3.0.0-alpha.0.tgz",
-      "integrity": "sha512-HwC/pBcPG81UP4Jh0BaH2i4wAY9aDOrvL5+B/7J6cyFlG/Wip5Li+qI+GDlk9MR3kpG8v0sxfpWA0IlQYcHK6g==",
+      "version": "3.0.0-alpha.3",
+      "resolved": "https://registry.npmjs.org/@material-ui/utils/-/utils-3.0.0-alpha.3.tgz",
+      "integrity": "sha512-rwMdMZptX0DivkqBuC+Jdq7BYTXwqKai5G5ejPpuEDKpWzi1Oxp+LygGw329FrKpuKeiqpcymlqJTjmy+quWng==",
       "requires": {
-        "@babel/runtime": "7.1.2"
-      },
-      "dependencies": {
-        "@babel/runtime": {
-          "version": "7.1.2",
-          "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.1.2.tgz",
-          "integrity": "sha512-Y3SCjmhSupzFB6wcv1KmmFucH6gDVnI30WjOcicV10ju0cZjak3Jcs67YLIXBrmZYw1xCrVeJPbycFwrqNyxpg==",
-          "requires": {
-            "regenerator-runtime": "0.12.1"
-          }
-        },
-        "regenerator-runtime": {
-          "version": "0.12.1",
-          "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz",
-          "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg=="
-        }
+        "@babel/runtime": "7.3.1",
+        "prop-types": "15.6.0",
+        "react-is": "16.6.3"
       }
     },
     "@types/jss": {
-      "version": "9.5.7",
-      "resolved": "https://registry.npmjs.org/@types/jss/-/jss-9.5.7.tgz",
-      "integrity": "sha512-OZimStu2QdDMtZ0h72JXqvLVbWUjXd5ZLk8vxLmfuC/nM1AabRyyGoxSufnzixrbpEcVcyy/JV5qeQu2JnjVZw==",
+      "version": "9.5.8",
+      "resolved": "https://registry.npmjs.org/@types/jss/-/jss-9.5.8.tgz",
+      "integrity": "sha512-bBbHvjhm42UKki+wZpR89j73ykSXg99/bhuKuYYePtpma3ZAnmeGnl0WxXiZhPGsIfzKwCUkpPC0jlrVMBfRxA==",
       "requires": {
-        "csstype": "2.5.7",
+        "csstype": "2.6.4",
         "indefinite-observable": "1.0.2"
       }
     },
     "@types/node": {
-      "version": "8.10.38",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.38.tgz",
-      "integrity": "sha512-EibsnbJerd0hBFaDjJStFrVbVBAtOy4dgL8zZFw0uOvPqzBAX59Ci8cgjg3+RgJIWhsB5A4c+pi+D4P9tQQh/A=="
+      "version": "8.10.48",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.48.tgz",
+      "integrity": "sha512-c35YEBTkL4rzXY2ucpSKy+UYHjUBIIkuJbWYbsGIrKLEWU5dgJMmLkkIb3qeC3O3Tpb1ZQCwecscvJTDjDjkRw=="
     },
     "@types/prop-types": {
-      "version": "15.5.6",
-      "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.5.6.tgz",
-      "integrity": "sha512-ZBFR7TROLVzCkswA3Fmqq+IIJt62/T7aY/Dmz+QkU7CaW2QFqAitCE8Ups7IzmGhcN1YWMBT4Qcoc07jU9hOJQ=="
+      "version": "15.7.1",
+      "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.1.tgz",
+      "integrity": "sha512-CFzn9idOEpHrgdw8JsoTkaDDyRWk1jrzIV8djzcgpq0y9tG4B4lFT+Nxh52DVpDXV+n4+NPNv7M1Dj5uMp6XFg=="
     },
     "@types/react": {
-      "version": "16.7.7",
-      "resolved": "https://registry.npmjs.org/@types/react/-/react-16.7.7.tgz",
-      "integrity": "sha512-dJiq7CKxD1XJ/GqmbnsQisFnzG4z5lntKBw9X9qeSrguxFbrrhGa8cK9s0ONBp8wL1EfGfofEDVhjen26U46pw==",
+      "version": "16.8.18",
+      "resolved": "https://registry.npmjs.org/@types/react/-/react-16.8.18.tgz",
+      "integrity": "sha512-lUXdKzRqWR4FebR5tGHkLCqnvQJS4fdXKCBrNGGbglqZg2gpU+J82pMONevQODUotATs9fc9k66bx3/St8vReg==",
       "requires": {
-        "@types/prop-types": "15.5.6",
-        "csstype": "2.5.7"
+        "@types/prop-types": "15.7.1",
+        "csstype": "2.6.4"
       }
     },
     "@types/react-transition-group": {
-      "version": "2.0.14",
-      "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-2.0.14.tgz",
-      "integrity": "sha512-pa7qB0/mkhwWMBFoXhX8BcntK8G4eQl4sIfSrJCxnivTYRQWjOWf2ClR9bWdm0EUFBDHzMbKYS+QYfDtBzkY4w==",
+      "version": "2.9.1",
+      "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-2.9.1.tgz",
+      "integrity": "sha512-1usq4DRUVBFnxc9KGJAlJO9EpQrLZGDDEC8wDOn2+2ODSyudYo8FiIzPDRaX/hfQjHqGeeoNaNdA2bj0l35hZQ==",
       "requires": {
-        "@types/react": "16.7.7"
+        "@types/react": "16.8.18"
       }
     },
     "abab": {
@@ -488,6 +506,58 @@
       "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
       "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
     },
+    "ast-transform": {
+      "version": "0.0.0",
+      "resolved": "https://registry.npmjs.org/ast-transform/-/ast-transform-0.0.0.tgz",
+      "integrity": "sha1-dJRAWIh9goPhidlUYAlHvJj+AGI=",
+      "requires": {
+        "escodegen": "1.2.0",
+        "esprima": "1.0.4",
+        "through": "2.3.8"
+      },
+      "dependencies": {
+        "escodegen": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.2.0.tgz",
+          "integrity": "sha1-Cd55Z3kcyVi3+Jot220jRRrzJ+E=",
+          "requires": {
+            "esprima": "1.0.4",
+            "estraverse": "1.5.1",
+            "esutils": "1.0.0",
+            "source-map": "0.1.43"
+          }
+        },
+        "esprima": {
+          "version": "1.0.4",
+          "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz",
+          "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0="
+        },
+        "estraverse": {
+          "version": "1.5.1",
+          "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.5.1.tgz",
+          "integrity": "sha1-hno+jlip+EYYr7bC3bzZFrfLr3E="
+        },
+        "esutils": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.0.0.tgz",
+          "integrity": "sha1-gVHTWOIMisx/t0XnRywAJf5JZXA="
+        },
+        "source-map": {
+          "version": "0.1.43",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
+          "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
+          "optional": true,
+          "requires": {
+            "amdefine": "1.0.1"
+          }
+        }
+      }
+    },
+    "ast-types": {
+      "version": "0.7.8",
+      "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.7.8.tgz",
+      "integrity": "sha1-kC0uDWDQcb3NRtwRXhgJ7RHBOKk="
+    },
     "ast-types-flow": {
       "version": "0.0.7",
       "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz",
@@ -1519,11 +1589,68 @@
       "resolved": "https://registry.npmjs.org/brcast/-/brcast-3.0.1.tgz",
       "integrity": "sha512-eI3yqf9YEqyGl9PCNTR46MGvDylGtaHjalcz6Q3fAPnP/PhpKkkve52vFdfGpwp4VUvK6LUr4TQN+2stCrEwTg=="
     },
+    "brfs": {
+      "version": "1.6.1",
+      "resolved": "https://registry.npmjs.org/brfs/-/brfs-1.6.1.tgz",
+      "integrity": "sha512-OfZpABRQQf+Xsmju8XE9bDjs+uU4vLREGolP7bDgcpsI17QREyZ4Bl+2KLxxx1kCgA0fAIhKQBaBYh+PEcCqYQ==",
+      "requires": {
+        "quote-stream": "1.0.2",
+        "resolve": "1.5.0",
+        "static-module": "2.2.5",
+        "through2": "2.0.5"
+      },
+      "dependencies": {
+        "process-nextick-args": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+          "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
+        },
+        "readable-stream": {
+          "version": "2.3.6",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+          "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+          "requires": {
+            "core-util-is": "1.0.2",
+            "inherits": "2.0.3",
+            "isarray": "1.0.0",
+            "process-nextick-args": "2.0.0",
+            "safe-buffer": "5.1.1",
+            "string_decoder": "1.1.1",
+            "util-deprecate": "1.0.2"
+          }
+        },
+        "string_decoder": {
+          "version": "1.1.1",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+          "requires": {
+            "safe-buffer": "5.1.1"
+          }
+        },
+        "through2": {
+          "version": "2.0.5",
+          "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
+          "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+          "requires": {
+            "readable-stream": "2.3.6",
+            "xtend": "4.0.1"
+          }
+        }
+      }
+    },
     "brorand": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
       "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8="
     },
+    "brotli": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.2.tgz",
+      "integrity": "sha1-UlqcrU/LqWR119OI9q7LE+7VL0Y=",
+      "requires": {
+        "base64-js": "1.2.1"
+      }
+    },
     "browser-resolve": {
       "version": "1.11.2",
       "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz",
@@ -1572,6 +1699,16 @@
         "inherits": "2.0.3"
       }
     },
+    "browserify-optional": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/browserify-optional/-/browserify-optional-1.0.1.tgz",
+      "integrity": "sha1-HhNyLP3g2F8SFnbCpyztUzoBiGk=",
+      "requires": {
+        "ast-transform": "0.0.0",
+        "ast-types": "0.7.8",
+        "browser-resolve": "1.11.2"
+      }
+    },
     "browserify-rsa": {
       "version": "4.0.1",
       "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
@@ -1630,6 +1767,11 @@
         "isarray": "1.0.0"
       }
     },
+    "buffer-equal": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz",
+      "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs="
+    },
     "buffer-from": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
@@ -1907,6 +2049,11 @@
       "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz",
       "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8="
     },
+    "clsx": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.0.4.tgz",
+      "integrity": "sha512-1mQ557MIZTrL/140j+JVdRM6e31/OA4vTYxXgqIIZlndyfjHpyawKZia1Im05Vp9BWmImkcNrNtFYQMyFcgJDg=="
+    },
     "co": {
       "version": "4.6.0",
       "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
@@ -2223,6 +2370,11 @@
         "randomfill": "1.0.3"
       }
     },
+    "crypto-js": {
+      "version": "3.1.9-1",
+      "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.1.9-1.tgz",
+      "integrity": "sha1-/aGedh/Ad+Af+/3G6f38WeiAbNg="
+    },
     "crypto-random-string": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz",
@@ -2458,9 +2610,9 @@
       }
     },
     "csstype": {
-      "version": "2.5.7",
-      "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.5.7.tgz",
-      "integrity": "sha512-Nt5VDyOTIIV4/nRFswoCKps1R5CD1hkiyjBE9/thNaNZILLEviVw9yWQw15+O+CpNjQKB/uvdcxFFOrSflY3Yw=="
+      "version": "2.6.4",
+      "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.4.tgz",
+      "integrity": "sha512-lAJUJP3M6HxFXbqtGRc0iZrdyeN+WzOWeY0q/VnFzI+kqVrYIzC7bWlKqCW7oCIdzoPkvfp82EVvrTlQ8zsWQg=="
     },
     "currently-unhandled": {
       "version": "0.4.1",
@@ -2530,9 +2682,9 @@
       "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ="
     },
     "deepmerge": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz",
-      "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA=="
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.2.0.tgz",
+      "integrity": "sha512-6+LuZGU7QCNUnAJyX8cIrlzoEgggTM6B7mm+znKOX4t5ltluT9KLjN6g61ECMS0LTsLW7yDpNoxhix5FZcrIow=="
     },
     "default-require-extensions": {
       "version": "1.0.0",
@@ -2627,6 +2779,14 @@
         "debug": "2.6.9"
       }
     },
+    "dfa": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.1.0.tgz",
+      "integrity": "sha1-0wIYvRDQMPpCHfPrvIIoVGOjF4E=",
+      "requires": {
+        "babel-runtime": "6.26.0"
+      }
+    },
     "diff": {
       "version": "3.4.0",
       "resolved": "https://registry.npmjs.org/diff/-/diff-3.4.0.tgz",
@@ -2692,22 +2852,7 @@
       "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz",
       "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==",
       "requires": {
-        "@babel/runtime": "7.1.5"
-      },
-      "dependencies": {
-        "@babel/runtime": {
-          "version": "7.1.5",
-          "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.1.5.tgz",
-          "integrity": "sha512-xKnPpXG/pvK1B90JkwwxSGii90rQGKtzcMt2gI5G6+M0REXaq6rOHsGC2ay6/d0Uje7zzvSzjEzfR3ENhFlrfA==",
-          "requires": {
-            "regenerator-runtime": "0.12.1"
-          }
-        },
-        "regenerator-runtime": {
-          "version": "0.12.1",
-          "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz",
-          "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg=="
-        }
+        "@babel/runtime": "7.3.1"
       }
     },
     "dom-serializer": {
@@ -2784,6 +2929,14 @@
       "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
       "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E="
     },
+    "duplexer2": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
+      "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
+      "requires": {
+        "readable-stream": "2.3.3"
+      }
+    },
     "duplexer3": {
       "version": "0.1.4",
       "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
@@ -2808,7 +2961,7 @@
       "resolved": "https://registry.npmjs.org/electron/-/electron-1.8.8.tgz",
       "integrity": "sha512-1f9zJehcTTGjrkb06o6ds+gsRq6SYhZJyxOk6zIWjRH8hVy03y/RzUDELzNas71f5vcvXmfGVvyjeEsadDI8tg==",
       "requires": {
-        "@types/node": "8.10.38",
+        "@types/node": "8.10.48",
         "electron-download": "3.3.0",
         "extract-zip": "1.6.7"
       }
@@ -2831,7 +2984,7 @@
       "dependencies": {
         "fs-extra": {
           "version": "0.30.0",
-          "resolved": "http://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz",
+          "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz",
           "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=",
           "requires": {
             "graceful-fs": "4.1.11",
@@ -2843,7 +2996,7 @@
         },
         "jsonfile": {
           "version": "2.4.0",
-          "resolved": "http://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
+          "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
           "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
           "requires": {
             "graceful-fs": "4.1.11"
@@ -2851,7 +3004,7 @@
         },
         "minimist": {
           "version": "1.2.0",
-          "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+          "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
           "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
         },
         "path-exists": {
@@ -3599,6 +3752,24 @@
       "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
       "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
     },
+    "falafel": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.1.0.tgz",
+      "integrity": "sha1-lrsXdh2rqU9G0AFzizzt86Z/4Gw=",
+      "requires": {
+        "acorn": "5.3.0",
+        "foreach": "2.0.5",
+        "isarray": "0.0.1",
+        "object-keys": "1.0.11"
+      },
+      "dependencies": {
+        "isarray": {
+          "version": "0.0.1",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+          "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+        }
+      }
+    },
     "fast-deep-equal": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz",
@@ -3770,6 +3941,24 @@
       "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz",
       "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I="
     },
+    "fontkit": {
+      "version": "1.8.0",
+      "resolved": "https://registry.npmjs.org/fontkit/-/fontkit-1.8.0.tgz",
+      "integrity": "sha512-EFDRCca7khfQWYu1iFhsqeABpi87f03MBdkT93ZE6YhqCdMzb5Eojb6c4dlJikGv5liuhByyzA7ikpIPTSBWbQ==",
+      "requires": {
+        "babel-runtime": "6.26.0",
+        "brfs": "1.6.1",
+        "brotli": "1.3.2",
+        "browserify-optional": "1.0.1",
+        "clone": "1.0.3",
+        "deep-equal": "1.0.1",
+        "dfa": "1.1.0",
+        "restructure": "0.5.4",
+        "tiny-inflate": "1.0.2",
+        "unicode-properties": "1.1.0",
+        "unicode-trie": "0.3.1"
+      }
+    },
     "for-in": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
@@ -5016,15 +5205,16 @@
       "integrity": "sha1-5tnb5Xy+/mB1HwKvM2GVhwyQwB4="
     },
     "history": {
-      "version": "4.7.2",
-      "resolved": "https://registry.npmjs.org/history/-/history-4.7.2.tgz",
-      "integrity": "sha512-1zkBRWW6XweO0NBcjiphtVJVsIQ+SXF29z9DVkceeaSLVMFXHool+fdCZD4spDCfZJCILPILc3bm7Bc+HRi0nA==",
+      "version": "4.9.0",
+      "resolved": "https://registry.npmjs.org/history/-/history-4.9.0.tgz",
+      "integrity": "sha512-H2DkjCjXf0Op9OAr6nJ56fcRkTSNrUiv41vNJ6IswJjif6wlpZK0BTfFbi7qK9dXLSYZxkq5lBsj3vUjlYBYZA==",
       "requires": {
-        "invariant": "2.2.2",
+        "@babel/runtime": "7.3.1",
         "loose-envify": "1.3.1",
         "resolve-pathname": "2.2.0",
-        "value-equal": "0.4.0",
-        "warning": "3.0.0"
+        "tiny-invariant": "1.0.4",
+        "tiny-warning": "1.0.2",
+        "value-equal": "0.4.0"
       }
     },
     "hmac-drbg": {
@@ -5043,9 +5233,19 @@
       "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ=="
     },
     "hoist-non-react-statics": {
-      "version": "2.5.5",
-      "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz",
-      "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw=="
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz",
+      "integrity": "sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA==",
+      "requires": {
+        "react-is": "16.8.6"
+      },
+      "dependencies": {
+        "react-is": {
+          "version": "16.8.6",
+          "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz",
+          "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA=="
+        }
+      }
     },
     "home-or-tmp": {
       "version": "2.0.0",
@@ -5270,9 +5470,9 @@
       "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM="
     },
     "hyphenate-style-name": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.2.tgz",
-      "integrity": "sha1-MRYKNpMK2vH8BMYHT360FGXU7Es="
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.3.tgz",
+      "integrity": "sha512-EcuixamT82oplpoJ2XU4pDtKGWQ7b00CD9f1ug9IaQ3p1bkHMiKCZ9ut9QDI6qsa6cpUuB+A/I+zLtdNK4n2DQ=="
     },
     "iconv-lite": {
       "version": "0.4.19",
@@ -6273,6 +6473,16 @@
         "is-in-browser": "1.1.3",
         "symbol-observable": "1.2.0",
         "warning": "3.0.0"
+      },
+      "dependencies": {
+        "warning": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz",
+          "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=",
+          "requires": {
+            "loose-envify": "1.3.1"
+          }
+        }
       }
     },
     "jss-camel-case": {
@@ -6280,7 +6490,7 @@
       "resolved": "https://registry.npmjs.org/jss-camel-case/-/jss-camel-case-6.1.0.tgz",
       "integrity": "sha512-HPF2Q7wmNW1t79mCqSeU2vdd/vFFGpkazwvfHMOhPlMgXrJDzdj9viA2SaHk9ZbD5pfL63a8ylp4++irYbbzMQ==",
       "requires": {
-        "hyphenate-style-name": "1.0.2"
+        "hyphenate-style-name": "1.0.3"
       }
     },
     "jss-default-unit": {
@@ -6299,6 +6509,175 @@
       "integrity": "sha512-rn964TralHOZxoyEgeq3hXY8hyuCElnvQoVrQwKHVmu55VRDd6IqExAx9be5HgK0yN/+hQdgAXQl/GUrBbbSTA==",
       "requires": {
         "warning": "3.0.0"
+      },
+      "dependencies": {
+        "warning": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz",
+          "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=",
+          "requires": {
+            "loose-envify": "1.3.1"
+          }
+        }
+      }
+    },
+    "jss-plugin-camel-case": {
+      "version": "10.0.0-alpha.16",
+      "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.0.0-alpha.16.tgz",
+      "integrity": "sha512-nki+smHEsFyoZ0OlOYtaxVqcQA0ZHVJCE1slRnk+1TklbmxbBiO4TwITMTEaNIDv0U0Uyb0Z8wVgFgRwCCIFog==",
+      "requires": {
+        "@babel/runtime": "7.3.1",
+        "hyphenate-style-name": "1.0.3",
+        "jss": "10.0.0-alpha.16"
+      },
+      "dependencies": {
+        "jss": {
+          "version": "10.0.0-alpha.16",
+          "resolved": "https://registry.npmjs.org/jss/-/jss-10.0.0-alpha.16.tgz",
+          "integrity": "sha512-HmKNNnr82TR5jkWjBcbrx/uim2ief588pWp7zsf4GQpL125zRkEaWYL1SXv5bR6bBvAoTtvJsTAOxDIlLxUNZg==",
+          "requires": {
+            "@babel/runtime": "7.3.1",
+            "is-in-browser": "1.1.3",
+            "tiny-warning": "1.0.2"
+          }
+        }
+      }
+    },
+    "jss-plugin-default-unit": {
+      "version": "10.0.0-alpha.16",
+      "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.0.0-alpha.16.tgz",
+      "integrity": "sha512-jjGW4F/r9yKvoyUk22M8nWhdMfvoWzJw/oFO2cDRXCk2onnWFiRALfqeUsEDyocwdZbyVF9WhZbSHn4GL03kSw==",
+      "requires": {
+        "@babel/runtime": "7.3.1",
+        "jss": "10.0.0-alpha.16"
+      },
+      "dependencies": {
+        "jss": {
+          "version": "10.0.0-alpha.16",
+          "resolved": "https://registry.npmjs.org/jss/-/jss-10.0.0-alpha.16.tgz",
+          "integrity": "sha512-HmKNNnr82TR5jkWjBcbrx/uim2ief588pWp7zsf4GQpL125zRkEaWYL1SXv5bR6bBvAoTtvJsTAOxDIlLxUNZg==",
+          "requires": {
+            "@babel/runtime": "7.3.1",
+            "is-in-browser": "1.1.3",
+            "tiny-warning": "1.0.2"
+          }
+        }
+      }
+    },
+    "jss-plugin-global": {
+      "version": "10.0.0-alpha.16",
+      "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.0.0-alpha.16.tgz",
+      "integrity": "sha512-B1mm2ZF9OEsWPmzkG5ZUXqV88smDqpc4unILLXhWVuj0U5JeT0DNitH+QbXFrSueDJzkWVfvqyckvWDR/0qeDg==",
+      "requires": {
+        "@babel/runtime": "7.3.1",
+        "jss": "10.0.0-alpha.16"
+      },
+      "dependencies": {
+        "jss": {
+          "version": "10.0.0-alpha.16",
+          "resolved": "https://registry.npmjs.org/jss/-/jss-10.0.0-alpha.16.tgz",
+          "integrity": "sha512-HmKNNnr82TR5jkWjBcbrx/uim2ief588pWp7zsf4GQpL125zRkEaWYL1SXv5bR6bBvAoTtvJsTAOxDIlLxUNZg==",
+          "requires": {
+            "@babel/runtime": "7.3.1",
+            "is-in-browser": "1.1.3",
+            "tiny-warning": "1.0.2"
+          }
+        }
+      }
+    },
+    "jss-plugin-nested": {
+      "version": "10.0.0-alpha.16",
+      "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.0.0-alpha.16.tgz",
+      "integrity": "sha512-3l/MB6COnIpq4GOXQFae6UydoaIPa81UxhuBTEQuiAojgTeUla9L7nB3h18Q4zAhQQpjxaEsyppAKuEzIP7kPQ==",
+      "requires": {
+        "@babel/runtime": "7.3.1",
+        "jss": "10.0.0-alpha.16",
+        "tiny-warning": "1.0.2"
+      },
+      "dependencies": {
+        "jss": {
+          "version": "10.0.0-alpha.16",
+          "resolved": "https://registry.npmjs.org/jss/-/jss-10.0.0-alpha.16.tgz",
+          "integrity": "sha512-HmKNNnr82TR5jkWjBcbrx/uim2ief588pWp7zsf4GQpL125zRkEaWYL1SXv5bR6bBvAoTtvJsTAOxDIlLxUNZg==",
+          "requires": {
+            "@babel/runtime": "7.3.1",
+            "is-in-browser": "1.1.3",
+            "tiny-warning": "1.0.2"
+          }
+        }
+      }
+    },
+    "jss-plugin-props-sort": {
+      "version": "10.0.0-alpha.16",
+      "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.0.0-alpha.16.tgz",
+      "integrity": "sha512-+Yn9nugHAH58nf/d43H2uxMvlCFPDgLKRSmKO4Q4m1IGYjMbHsWt1Rk2HfC9IiCanqcqpc8hstwtzf+HG7PWFQ==",
+      "requires": {
+        "@babel/runtime": "7.3.1",
+        "jss": "10.0.0-alpha.16"
+      },
+      "dependencies": {
+        "jss": {
+          "version": "10.0.0-alpha.16",
+          "resolved": "https://registry.npmjs.org/jss/-/jss-10.0.0-alpha.16.tgz",
+          "integrity": "sha512-HmKNNnr82TR5jkWjBcbrx/uim2ief588pWp7zsf4GQpL125zRkEaWYL1SXv5bR6bBvAoTtvJsTAOxDIlLxUNZg==",
+          "requires": {
+            "@babel/runtime": "7.3.1",
+            "is-in-browser": "1.1.3",
+            "tiny-warning": "1.0.2"
+          }
+        }
+      }
+    },
+    "jss-plugin-rule-value-function": {
+      "version": "10.0.0-alpha.16",
+      "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.0.0-alpha.16.tgz",
+      "integrity": "sha512-MQap9ne6ZGZH0NlpSQTMSm6QalBTF0hYpd2uaGQwam+GlT7IKeO+sTjd46I1WgO3kyOmwb0pIY6CnuLQGXKtSA==",
+      "requires": {
+        "@babel/runtime": "7.3.1",
+        "jss": "10.0.0-alpha.16"
+      },
+      "dependencies": {
+        "jss": {
+          "version": "10.0.0-alpha.16",
+          "resolved": "https://registry.npmjs.org/jss/-/jss-10.0.0-alpha.16.tgz",
+          "integrity": "sha512-HmKNNnr82TR5jkWjBcbrx/uim2ief588pWp7zsf4GQpL125zRkEaWYL1SXv5bR6bBvAoTtvJsTAOxDIlLxUNZg==",
+          "requires": {
+            "@babel/runtime": "7.3.1",
+            "is-in-browser": "1.1.3",
+            "tiny-warning": "1.0.2"
+          }
+        }
+      }
+    },
+    "jss-plugin-vendor-prefixer": {
+      "version": "10.0.0-alpha.16",
+      "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.0.0-alpha.16.tgz",
+      "integrity": "sha512-70yJ6QE5dN8VlPUGKld5jK2SKyrteheEL/ismexpybIufunMs6iJgkhDndbOfv8ia13yZgUVqeakMdhRKYwK1A==",
+      "requires": {
+        "@babel/runtime": "7.3.1",
+        "css-vendor": "2.0.2",
+        "jss": "10.0.0-alpha.16"
+      },
+      "dependencies": {
+        "css-vendor": {
+          "version": "2.0.2",
+          "resolved": "https://registry.npmjs.org/css-vendor/-/css-vendor-2.0.2.tgz",
+          "integrity": "sha512-Xn5ZAlI00d8HaQ8/oQ8d+iBzSF//NCc77LPzsucM32X/R/yTqmXy6otVsAM0XleXk6HjPuXoVZwXsayky/fsFQ==",
+          "requires": {
+            "@babel/runtime": "7.3.1",
+            "is-in-browser": "1.1.3"
+          }
+        },
+        "jss": {
+          "version": "10.0.0-alpha.16",
+          "resolved": "https://registry.npmjs.org/jss/-/jss-10.0.0-alpha.16.tgz",
+          "integrity": "sha512-HmKNNnr82TR5jkWjBcbrx/uim2ief588pWp7zsf4GQpL125zRkEaWYL1SXv5bR6bBvAoTtvJsTAOxDIlLxUNZg==",
+          "requires": {
+            "@babel/runtime": "7.3.1",
+            "is-in-browser": "1.1.3",
+            "tiny-warning": "1.0.2"
+          }
+        }
       }
     },
     "jss-props-sort": {
@@ -6380,6 +6759,23 @@
         "type-check": "0.3.2"
       }
     },
+    "linebreak": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/linebreak/-/linebreak-0.3.0.tgz",
+      "integrity": "sha1-BSZICmLAW9Z58+nZmDDgnGp9DtY=",
+      "requires": {
+        "base64-js": "0.0.8",
+        "brfs": "1.6.1",
+        "unicode-trie": "0.3.1"
+      },
+      "dependencies": {
+        "base64-js": {
+          "version": "0.0.8",
+          "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz",
+          "integrity": "sha1-EQHpVE9KdrG8OybUUsqW16NeeXg="
+        }
+      }
+    },
     "load-json-file": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
@@ -6594,6 +6990,14 @@
       "resolved": "https://registry.npmjs.org/macaddress/-/macaddress-0.2.8.tgz",
       "integrity": "sha1-WQTcU3w57G2+/q6QIycTX6hRHxI="
     },
+    "magic-string": {
+      "version": "0.22.5",
+      "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz",
+      "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==",
+      "requires": {
+        "vlq": "0.2.3"
+      }
+    },
     "make-dir": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.1.0.tgz",
@@ -6703,6 +7107,21 @@
       "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
       "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
     },
+    "merge-source-map": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz",
+      "integrity": "sha1-pd5GU42uhNQRTMXqArR3KmNGcB8=",
+      "requires": {
+        "source-map": "0.5.7"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.5.7",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+        }
+      }
+    },
     "methods": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
@@ -7199,12 +7618,12 @@
       "dependencies": {
         "minimist": {
           "version": "1.2.0",
-          "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+          "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
           "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
         },
         "pretty-bytes": {
           "version": "1.0.4",
-          "resolved": "http://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz",
+          "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz",
           "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=",
           "requires": {
             "get-stdin": "4.0.1",
@@ -7243,6 +7662,11 @@
       "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.2.0.tgz",
       "integrity": "sha512-smRWXzkvxw72VquyZ0wggySl7PFUtoDhvhpdwgESXxUrH7vVhhp9asfup1+rVLrhsl7L45Ee1Q/l5R2Ul4MwUg=="
     },
+    "object-inspect": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.4.1.tgz",
+      "integrity": "sha512-wqdhLpfCUbEsoEwl3FXwGyv8ief1k/1aUdIPCqVnupM6e8l63BEJdiF/0swtn04/8p05tG/T0FrpTlfwvljOdw=="
+    },
     "object-keys": {
       "version": "1.0.11",
       "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz",
@@ -7547,6 +7971,38 @@
         "sha.js": "2.4.10"
       }
     },
+    "pdfkit": {
+      "version": "0.9.1",
+      "resolved": "https://registry.npmjs.org/pdfkit/-/pdfkit-0.9.1.tgz",
+      "integrity": "sha512-45X/NjaynHVNd/866ETK9KmblL8Sqwmah1RPz04IzmZoEO+cvPid2UvkVfZQcS4Jeq/uWY+99qAq04NoigzWSA==",
+      "requires": {
+        "crypto-js": "3.1.9-1",
+        "fontkit": "1.8.0",
+        "linebreak": "0.3.0",
+        "png-js": "0.1.1",
+        "saslprep": "1.0.1"
+      }
+    },
+    "pdfmake": {
+      "version": "0.1.56",
+      "resolved": "https://registry.npmjs.org/pdfmake/-/pdfmake-0.1.56.tgz",
+      "integrity": "sha512-c5fSj16VTQCrmTw02Mc+Oj3boRG+PGJuu7cGXAXXljI3bMNDifwmUs+3opEwRZbTWu9WhFKYbrs2Iq136UN/NQ==",
+      "requires": {
+        "iconv-lite": "0.4.24",
+        "linebreak": "0.3.0",
+        "pdfkit": "0.9.1"
+      },
+      "dependencies": {
+        "iconv-lite": {
+          "version": "0.4.24",
+          "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+          "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+          "requires": {
+            "safer-buffer": "2.1.2"
+          }
+        }
+      }
+    },
     "pend": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
@@ -7588,10 +8044,15 @@
       "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz",
       "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow=="
     },
+    "png-js": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/png-js/-/png-js-0.1.1.tgz",
+      "integrity": "sha1-HMfCEjA6yr50Jj7DrHgAlYAkLZM="
+    },
     "popper.js": {
-      "version": "1.14.5",
-      "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.14.5.tgz",
-      "integrity": "sha512-fs4Sd8bZLgEzrk8aS7Em1qh+wcawtE87kRUJQhK6+LndyV1HerX7+LURzAylVaTyWIn5NTB/lyjnWqw/AZ6Yrw=="
+      "version": "1.15.0",
+      "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.15.0.tgz",
+      "integrity": "sha512-w010cY1oCUmI+9KwwlWki+r5jxKfTFDVoadl7MSrIujHU5MJ5OR6HTDj6Xo8aoR/QsA56x8jKjA59qGH4ELtrA=="
     },
     "portfinder": {
       "version": "1.0.13",
@@ -8933,6 +9394,59 @@
       "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-0.0.4.tgz",
       "integrity": "sha1-DPf4T5Rj/wrlHExLFC2VvjdyTZw="
     },
+    "quote-stream": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz",
+      "integrity": "sha1-hJY/jJwmuULhU/7rU6rnRlK34LI=",
+      "requires": {
+        "buffer-equal": "0.0.1",
+        "minimist": "1.2.0",
+        "through2": "2.0.5"
+      },
+      "dependencies": {
+        "minimist": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+          "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
+        },
+        "process-nextick-args": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+          "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
+        },
+        "readable-stream": {
+          "version": "2.3.6",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+          "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+          "requires": {
+            "core-util-is": "1.0.2",
+            "inherits": "2.0.3",
+            "isarray": "1.0.0",
+            "process-nextick-args": "2.0.0",
+            "safe-buffer": "5.1.1",
+            "string_decoder": "1.1.1",
+            "util-deprecate": "1.0.2"
+          }
+        },
+        "string_decoder": {
+          "version": "1.1.1",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+          "requires": {
+            "safe-buffer": "5.1.1"
+          }
+        },
+        "through2": {
+          "version": "2.0.5",
+          "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
+          "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+          "requires": {
+            "readable-stream": "2.3.6",
+            "xtend": "4.0.1"
+          }
+        }
+      }
+    },
     "raf": {
       "version": "3.4.0",
       "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.0.tgz",
@@ -9030,24 +9544,40 @@
       }
     },
     "react": {
-      "version": "16.6.3",
-      "resolved": "https://registry.npmjs.org/react/-/react-16.6.3.tgz",
-      "integrity": "sha512-zCvmH2vbEolgKxtqXL2wmGCUxUyNheYn/C+PD1YAjfxHC54+MhdruyhO7QieQrYsYeTxrn93PM2y0jRH1zEExw==",
+      "version": "16.8.6",
+      "resolved": "https://registry.npmjs.org/react/-/react-16.8.6.tgz",
+      "integrity": "sha512-pC0uMkhLaHm11ZSJULfOBqV4tIZkx87ZLvbbQYunNixAAvjnC+snJCg0XQXn9VIsttVsbZP/H/ewzgsd5fxKXw==",
       "requires": {
         "loose-envify": "1.3.1",
         "object-assign": "4.1.1",
-        "prop-types": "15.6.2",
-        "scheduler": "0.11.2"
+        "prop-types": "15.7.2",
+        "scheduler": "0.13.6"
       },
       "dependencies": {
         "prop-types": {
-          "version": "15.6.2",
-          "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz",
-          "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==",
+          "version": "15.7.2",
+          "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
+          "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
           "requires": {
-            "loose-envify": "1.3.1",
-            "object-assign": "4.1.1"
+            "loose-envify": "1.4.0",
+            "object-assign": "4.1.1",
+            "react-is": "16.8.6"
+          },
+          "dependencies": {
+            "loose-envify": {
+              "version": "1.4.0",
+              "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+              "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+              "requires": {
+                "js-tokens": "3.0.2"
+              }
+            }
           }
+        },
+        "react-is": {
+          "version": "16.8.6",
+          "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz",
+          "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA=="
         }
       }
     },
@@ -9077,53 +9607,69 @@
       }
     },
     "react-devtools": {
-      "version": "3.4.3",
-      "resolved": "https://registry.npmjs.org/react-devtools/-/react-devtools-3.4.3.tgz",
-      "integrity": "sha512-LVinDD/pdm/WqmjJfyEc5ngv/JTcYaKCLSPeUZXwpjNpbI/w4ewuWklOLBuILOUlX1V9VYDaYRivz3j0DH2Lyw==",
+      "version": "3.6.1",
+      "resolved": "https://registry.npmjs.org/react-devtools/-/react-devtools-3.6.1.tgz",
+      "integrity": "sha512-28hOmfrp5SfFpzZ4jg5lTg/NliAgbyvAxQ3fscUaKeiUPWi9y1aMs82bVYjYTHUG8mEDv55AjTNblyVyE2+Ftw==",
       "requires": {
         "cross-spawn": "5.1.0",
         "electron": "1.8.8",
         "ip": "1.1.5",
         "minimist": "1.2.0",
-        "react-devtools-core": "3.4.3",
+        "react-devtools-core": "3.6.1",
         "update-notifier": "2.3.0"
       },
       "dependencies": {
         "minimist": {
           "version": "1.2.0",
-          "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+          "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
           "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
         }
       }
     },
     "react-devtools-core": {
-      "version": "3.4.3",
-      "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-3.4.3.tgz",
-      "integrity": "sha512-t3f6cRH5YSKv8qjRl1Z+1e0OwBZwJSdOAhJ9QAJdVKML7SmqAKKv3DxF+Ue03pE1N2UipPsLmaNcPzzMjIdZQg==",
+      "version": "3.6.1",
+      "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-3.6.1.tgz",
+      "integrity": "sha512-I/LSX+tpeTrGKaF1wXSfJ/kP+6iaP2JfshEjW8LtQBdz6c6HhzOJtjZXhqOUrAdysuey8M1/JgPY1flSVVt8Ig==",
       "requires": {
         "shell-quote": "1.6.1",
         "ws": "3.3.3"
       }
     },
     "react-dom": {
-      "version": "16.6.3",
-      "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.6.3.tgz",
-      "integrity": "sha512-8ugJWRCWLGXy+7PmNh8WJz3g1TaTUt1XyoIcFN+x0Zbkoz+KKdUyx1AQLYJdbFXjuF41Nmjn5+j//rxvhFjgSQ==",
+      "version": "16.8.6",
+      "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.8.6.tgz",
+      "integrity": "sha512-1nL7PIq9LTL3fthPqwkvr2zY7phIPjYrT0jp4HjyEQrEROnw4dG41VVwi/wfoCneoleqrNX7iAD+pXebJZwrwA==",
       "requires": {
         "loose-envify": "1.3.1",
         "object-assign": "4.1.1",
-        "prop-types": "15.6.2",
-        "scheduler": "0.11.2"
+        "prop-types": "15.7.2",
+        "scheduler": "0.13.6"
       },
       "dependencies": {
         "prop-types": {
-          "version": "15.6.2",
-          "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz",
-          "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==",
+          "version": "15.7.2",
+          "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
+          "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
           "requires": {
-            "loose-envify": "1.3.1",
-            "object-assign": "4.1.1"
+            "loose-envify": "1.4.0",
+            "object-assign": "4.1.1",
+            "react-is": "16.8.6"
+          },
+          "dependencies": {
+            "loose-envify": {
+              "version": "1.4.0",
+              "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+              "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+              "requires": {
+                "js-tokens": "3.0.2"
+              }
+            }
           }
+        },
+        "react-is": {
+          "version": "16.8.6",
+          "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz",
+          "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA=="
         }
       }
     },
@@ -9133,23 +9679,13 @@
       "integrity": "sha512-FlsPxavEyMuR6TjVbSSywovXSEyOg6ZDj5+Z8nbsRl9EkOzAhEIcS+GLoQDC5fz/t9suhUXWmUrOBrgeUvrMxw=="
     },
     "react-event-listener": {
-      "version": "0.6.4",
-      "resolved": "https://registry.npmjs.org/react-event-listener/-/react-event-listener-0.6.4.tgz",
-      "integrity": "sha512-t7VSjIuUFmN+GeyKb+wm025YLeojVB85kJL6sSs0wEBJddfmKBEQz+CNBZ2zBLKVWkPy/fZXM6U5yvojjYBVYQ==",
+      "version": "0.6.6",
+      "resolved": "https://registry.npmjs.org/react-event-listener/-/react-event-listener-0.6.6.tgz",
+      "integrity": "sha512-+hCNqfy7o9wvO6UgjqFmBzARJS7qrNoda0VqzvOuioEpoEXKutiKuv92dSz6kP7rYLmyHPyYNLesi5t/aH1gfw==",
       "requires": {
-        "@babel/runtime": "7.0.0",
+        "@babel/runtime": "7.3.1",
         "prop-types": "15.6.0",
-        "warning": "4.0.2"
-      },
-      "dependencies": {
-        "warning": {
-          "version": "4.0.2",
-          "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.2.tgz",
-          "integrity": "sha512-wbTp09q/9C+jJn4KKJfJfoS6VleK/Dti0yqWSm6KMvJ4MRCXFQNapHuJXutJIrWV0Cf4AhTdeIe4qdKHR1+Hug==",
-          "requires": {
-            "loose-envify": "1.3.1"
-          }
-        }
+        "warning": "4.0.3"
       }
     },
     "react-is": {
@@ -9221,7 +9757,7 @@
       "resolved": "https://registry.npmjs.org/react-router/-/react-router-4.3.1.tgz",
       "integrity": "sha512-yrvL8AogDh2X42Dt9iknk4wF4V8bWREPirFfS9gLU1huk6qK41sg7Z/1S81jjTrGHxa3B8R3J6xIkDAA6CVarg==",
       "requires": {
-        "history": "4.7.2",
+        "history": "4.9.0",
         "hoist-non-react-statics": "2.5.4",
         "invariant": "2.2.4",
         "loose-envify": "1.3.1",
@@ -9268,7 +9804,7 @@
       "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-4.3.1.tgz",
       "integrity": "sha512-c/MlywfxDdCp7EnB7YfPMOfMD3tOtIjrQlj/CKfNMBxdmpJP8xcz5P/UAFn3JbnQCNUxsHyVVqllF9LhgVyFCA==",
       "requires": {
-        "history": "4.7.2",
+        "history": "4.9.0",
         "invariant": "2.2.4",
         "loose-envify": "1.3.1",
         "prop-types": "15.6.1",
@@ -9309,7 +9845,7 @@
       "resolved": "https://registry.npmjs.org/react-router-redux/-/react-router-redux-5.0.0-alpha.9.tgz",
       "integrity": "sha512-euSgNIANnRXr4GydIuwA7RZCefrLQzIw5WdXspS8NPYbV+FxrKSS9MKG7U9vb6vsKHONnA4VxrVNWfnMUnUQAw==",
       "requires": {
-        "history": "4.7.2",
+        "history": "4.9.0",
         "prop-types": "15.6.0",
         "react-router": "4.3.1"
       }
@@ -9382,13 +9918,13 @@
       }
     },
     "react-transition-group": {
-      "version": "2.5.0",
-      "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.5.0.tgz",
-      "integrity": "sha512-qYB3JBF+9Y4sE4/Mg/9O6WFpdoYjeeYqx0AFb64PTazVy8RPMiE3A47CG9QmM4WJ/mzDiZYslV+Uly6O1Erlgw==",
+      "version": "2.9.0",
+      "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz",
+      "integrity": "sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==",
       "requires": {
         "dom-helpers": "3.4.0",
         "loose-envify": "1.4.0",
-        "prop-types": "15.6.2",
+        "prop-types": "15.7.2",
         "react-lifecycles-compat": "3.0.4"
       },
       "dependencies": {
@@ -9401,13 +9937,19 @@
           }
         },
         "prop-types": {
-          "version": "15.6.2",
-          "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz",
-          "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==",
+          "version": "15.7.2",
+          "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
+          "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
           "requires": {
             "loose-envify": "1.4.0",
-            "object-assign": "4.1.1"
+            "object-assign": "4.1.1",
+            "react-is": "16.8.6"
           }
+        },
+        "react-is": {
+          "version": "16.8.6",
+          "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz",
+          "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA=="
         }
       }
     },
@@ -9479,12 +10021,19 @@
       "resolved": "https://registry.npmjs.org/recompose/-/recompose-0.30.0.tgz",
       "integrity": "sha512-ZTrzzUDa9AqUIhRk4KmVFihH0rapdCSMFXjhHbNrjAWxBuUD/guYlyysMnuHjlZC/KRiOKRtB4jf96yYSkKE8w==",
       "requires": {
-        "@babel/runtime": "7.0.0",
+        "@babel/runtime": "7.3.1",
         "change-emitter": "0.1.6",
         "fbjs": "0.8.16",
         "hoist-non-react-statics": "2.5.5",
         "react-lifecycles-compat": "3.0.4",
         "symbol-observable": "1.2.0"
+      },
+      "dependencies": {
+        "hoist-non-react-statics": {
+          "version": "2.5.5",
+          "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz",
+          "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw=="
+        }
       }
     },
     "recursive-readdir": {
@@ -9802,6 +10351,14 @@
         "signal-exit": "3.0.2"
       }
     },
+    "restructure": {
+      "version": "0.5.4",
+      "resolved": "https://registry.npmjs.org/restructure/-/restructure-0.5.4.tgz",
+      "integrity": "sha1-9U591WNZD7NP1r9Vh2EJrsyyjeg=",
+      "requires": {
+        "browserify-optional": "1.0.1"
+      }
+    },
     "right-align": {
       "version": "0.1.3",
       "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
@@ -9853,6 +10410,11 @@
       "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
       "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
     },
+    "safer-buffer": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+    },
     "sane": {
       "version": "1.6.0",
       "resolved": "https://registry.npmjs.org/sane/-/sane-1.6.0.tgz",
@@ -9890,6 +10452,11 @@
         }
       }
     },
+    "saslprep": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.1.tgz",
+      "integrity": "sha512-ntN6SbE3hRqd45PKKadRPgA+xHPWg5lPSj2JWJdJvjTwXDDfkPVtXWvP8jJojvnm+rAsZ2b299C5NwZqq818EA=="
+    },
     "sass-graph": {
       "version": "2.2.4",
       "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz",
@@ -9907,9 +10474,9 @@
       "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
     },
     "scheduler": {
-      "version": "0.11.2",
-      "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.11.2.tgz",
-      "integrity": "sha512-+WCP3s3wOaW4S7C1tl3TEXp4l9lJn0ZK8G3W3WKRWmw77Z2cIFUW2MiNTMHn5sCjxN+t7N43HAOOgMjyAg5hlg==",
+      "version": "0.13.6",
+      "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.6.tgz",
+      "integrity": "sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ==",
       "requires": {
         "loose-envify": "1.3.1",
         "object-assign": "4.1.1"
@@ -10060,6 +10627,11 @@
         "safe-buffer": "5.1.1"
       }
     },
+    "shallow-copy": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz",
+      "integrity": "sha1-QV9CcC1z2BAzApLMXuhurhoRoXA="
+    },
     "shebang-command": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
@@ -10291,6 +10863,75 @@
         "tweetnacl": "0.14.5"
       }
     },
+    "static-eval": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.2.tgz",
+      "integrity": "sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==",
+      "requires": {
+        "escodegen": "1.9.0"
+      }
+    },
+    "static-module": {
+      "version": "2.2.5",
+      "resolved": "https://registry.npmjs.org/static-module/-/static-module-2.2.5.tgz",
+      "integrity": "sha512-D8vv82E/Kpmz3TXHKG8PPsCPg+RAX6cbCOyvjM6x04qZtQ47EtJFVwRsdov3n5d6/6ynrOY9XB4JkaZwB2xoRQ==",
+      "requires": {
+        "concat-stream": "1.6.0",
+        "convert-source-map": "1.5.1",
+        "duplexer2": "0.1.4",
+        "escodegen": "1.9.0",
+        "falafel": "2.1.0",
+        "has": "1.0.1",
+        "magic-string": "0.22.5",
+        "merge-source-map": "1.0.4",
+        "object-inspect": "1.4.1",
+        "quote-stream": "1.0.2",
+        "readable-stream": "2.3.3",
+        "shallow-copy": "0.0.1",
+        "static-eval": "2.0.2",
+        "through2": "2.0.5"
+      },
+      "dependencies": {
+        "process-nextick-args": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+          "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
+        },
+        "string_decoder": {
+          "version": "1.1.1",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+          "requires": {
+            "safe-buffer": "5.1.1"
+          }
+        },
+        "through2": {
+          "version": "2.0.5",
+          "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
+          "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+          "requires": {
+            "readable-stream": "2.3.6",
+            "xtend": "4.0.1"
+          },
+          "dependencies": {
+            "readable-stream": {
+              "version": "2.3.6",
+              "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+              "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+              "requires": {
+                "core-util-is": "1.0.2",
+                "inherits": "2.0.3",
+                "isarray": "1.0.0",
+                "process-nextick-args": "2.0.0",
+                "safe-buffer": "5.1.1",
+                "string_decoder": "1.1.1",
+                "util-deprecate": "1.0.2"
+              }
+            }
+          }
+        }
+      }
+    },
     "statuses": {
       "version": "1.3.1",
       "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
@@ -10585,7 +11226,7 @@
     },
     "through2": {
       "version": "0.2.3",
-      "resolved": "http://registry.npmjs.org/through2/-/through2-0.2.3.tgz",
+      "resolved": "https://registry.npmjs.org/through2/-/through2-0.2.3.tgz",
       "integrity": "sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=",
       "requires": {
         "readable-stream": "1.1.14",
@@ -10604,7 +11245,7 @@
         },
         "readable-stream": {
           "version": "1.1.14",
-          "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
           "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
           "requires": {
             "core-util-is": "1.0.2",
@@ -10615,7 +11256,7 @@
         },
         "string_decoder": {
           "version": "0.10.31",
-          "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
           "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
         },
         "xtend": {
@@ -10657,6 +11298,21 @@
       "integrity": "sha512-2NM0auVBGft5tee/OxP4PI3d8WItkDM+fPnaRAVo6xTDI2knbz9eC5ArWGqtGlYqiH3RU5yMpdyTTO7MguC4ow==",
       "optional": true
     },
+    "tiny-inflate": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.2.tgz",
+      "integrity": "sha1-k9nez/yIBb1X6uQxDwt0Xptvs6c="
+    },
+    "tiny-invariant": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.0.4.tgz",
+      "integrity": "sha512-lMhRd/djQJ3MoaHEBrw8e2/uM4rs9YMNk0iOr8rHQ0QdbM7D4l0gFl3szKdeixrlyfm9Zqi4dxHCM2qVG8ND5g=="
+    },
+    "tiny-warning": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.2.tgz",
+      "integrity": "sha512-rru86D9CpQRLvsFG5XFdy0KdLAvjdQDyZCsRcuu60WtzFylDM3eAWSxEVz5kzL2Gp544XiUvPbVKtOA/txLi9Q=="
+    },
     "tmp": {
       "version": "0.0.33",
       "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
@@ -10851,6 +11507,31 @@
       "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz",
       "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og=="
     },
+    "unicode-properties": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.1.0.tgz",
+      "integrity": "sha1-epbu9J91aC6mnSMV7smsQ//fAME=",
+      "requires": {
+        "brfs": "1.6.1",
+        "unicode-trie": "0.3.1"
+      }
+    },
+    "unicode-trie": {
+      "version": "0.3.1",
+      "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-0.3.1.tgz",
+      "integrity": "sha1-1nHd3YkQGgi6w3tqUWEBBgIFIIU=",
+      "requires": {
+        "pako": "0.2.9",
+        "tiny-inflate": "1.0.2"
+      },
+      "dependencies": {
+        "pako": {
+          "version": "0.2.9",
+          "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
+          "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU="
+        }
+      }
+    },
     "uniq": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
@@ -11057,6 +11738,11 @@
         "extsprintf": "1.3.0"
       }
     },
+    "vlq": {
+      "version": "0.2.3",
+      "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz",
+      "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow=="
+    },
     "vm-browserify": {
       "version": "0.0.4",
       "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz",
@@ -11074,9 +11760,9 @@
       }
     },
     "warning": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz",
-      "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=",
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz",
+      "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==",
       "requires": {
         "loose-envify": "1.3.1"
       }
diff --git a/MCSLA/mcsla-ui/package.json b/MCSLA/mcsla-ui/package.json
index 3acc26e203a6e0775f9b5c377abed1ed3b3a96b4..4b2cf7ef4bf5de0f064dd1b4c07120d715ca59f8 100644
--- a/MCSLA/mcsla-ui/package.json
+++ b/MCSLA/mcsla-ui/package.json
@@ -1,16 +1,18 @@
 {
   "name": "mcsla-ui",
-  "version": "0.4.0",
+  "version": "0.7.0",
   "private": true,
   "dependencies": {
-    "@material-ui/core": "^3.6.0",
-    "@material-ui/icons": "^3.0.1",
-    "@material-ui/lab": "^3.0.0-alpha.24",
-    "history": "^4.7.2",
+    "@material-ui/core": "^3.9.3",
+    "@material-ui/icons": "^3.0.2",
+    "@material-ui/lab": "^3.0.0-alpha.30",
+    "@material-ui/styles": "^4.0.0",
+    "history": "^4.9.0",
     "node-sass-chokidar": "0.0.3",
-    "react": "^16.6.3",
-    "react-devtools": "^3.4.3",
-    "react-dom": "^16.6.3",
+    "pdfmake": "^0.1.56",
+    "react": "^16.8.6",
+    "react-devtools": "^3.6.1",
+    "react-dom": "^16.8.6",
     "react-redux": "^5.1.1",
     "react-router": "^4.3.1",
     "react-router-dom": "^4.3.1",
diff --git a/MCSLA/mcsla-ui/src/PdfExport.js b/MCSLA/mcsla-ui/src/PdfExport.js
new file mode 100644
index 0000000000000000000000000000000000000000..d05988329864f4e00b5f2b6010bfc90e34139dae
--- /dev/null
+++ b/MCSLA/mcsla-ui/src/PdfExport.js
@@ -0,0 +1,59 @@
+import pdfMake from 'pdfmake/build/pdfmake';
+import vfsFonts from 'pdfmake/build/vfs_fonts'
+import {generatePdf} from "./PdfGenerator";
+import {PdfRenderer} from "./PdfRenderer";
+
+var docDefinition = {
+    pageSize: 'A4',
+    pageMargins: [85, 60, 85, 60],
+    fontSize: 11,
+    styles: {
+        title: {
+            fontSize: 22,
+            bold: true,
+            lineHeight: 2
+        },
+        subtitle: {
+            fontSize: 20,
+            lineHeight: 2
+        },
+        header: {
+            fontSize: 16,
+            italics: true
+        },
+        header2: {
+            fontSize: 14,
+            margin: [0, 0, 0, 10]
+        },
+        header3: {
+            fontSize: 12,
+            margin: [0, 0, 0, 10]
+        }
+    },
+    header: {},
+    content: "Placeholder",
+    footer: {}
+};
+
+export function createPdf(appName, mcsla) {
+
+    pdfMake.vfs = vfsFonts.pdfMake.vfs;
+    docDefinition.content = createContentFrom(mcsla);
+    pdfMake.createPdf(docDefinition).download(appName + '-mcsla.pdf');
+
+    return true;
+}
+
+function createContentFrom(mcsla) {
+    return [
+        { columns: [
+                { text: "Application Multi-Cloud Service Level Agreement", style: 'title' }
+            ],
+            columnGap: 10
+        },
+        { text: "Overview", style: 'subtitle' },
+        { text: mcsla.name, style: 'title' },
+        generatePdf(mcsla, PdfRenderer)
+    ]
+}
+
diff --git a/MCSLA/mcsla-ui/src/PdfGenerator.js b/MCSLA/mcsla-ui/src/PdfGenerator.js
new file mode 100644
index 0000000000000000000000000000000000000000..16a245adb3ebbf22211e6b7f3d00de1fdfbc8e93
--- /dev/null
+++ b/MCSLA/mcsla-ui/src/PdfGenerator.js
@@ -0,0 +1,2 @@
+export function generatePdf(mcsla, renderer) {
+}
\ No newline at end of file
diff --git a/MCSLA/mcsla-ui/src/PdfRenderer.js b/MCSLA/mcsla-ui/src/PdfRenderer.js
new file mode 100644
index 0000000000000000000000000000000000000000..11e894fb8be0014108f21dd2374000f79facf094
--- /dev/null
+++ b/MCSLA/mcsla-ui/src/PdfRenderer.js
@@ -0,0 +1,10 @@
+export class PdfRenderer {
+
+    static commonDescription(mcsla) {
+        return [];
+    }
+
+    static serviceObjective(key, serviceObjectives) {
+        return [];
+    }
+}
\ No newline at end of file
diff --git a/MCSLA/mcsla-ui/src/components/McslaView.js b/MCSLA/mcsla-ui/src/components/McslaView.js
index 0cf5c1e54ed6e9ce479e90247f11583886c22389..fe2e72edde033ae0284774d820c45e972b4815b9 100644
--- a/MCSLA/mcsla-ui/src/components/McslaView.js
+++ b/MCSLA/mcsla-ui/src/components/McslaView.js
@@ -13,7 +13,7 @@ import FormControlLabel from '@material-ui/core/FormControlLabel';
 import Checkbox from '@material-ui/core/Checkbox';
 import VisibilityIcon from '@material-ui/icons/Visibility';
 import VisibilityOffIcon from '@material-ui/icons/VisibilityOff';
-import Grid from "@material-ui/core/Grid";
+import Grid from '@material-ui/core/Grid';
 import Divider from "@material-ui/core/Divider";
 import { setSlaDescription, setSlaValidity, setSlaVisibility, addCoveredService, addObjective, deleteObjective } from "../actions/editmcsla";
 import { updateMcslaRequest } from '../actions/mcsla';
@@ -127,6 +127,10 @@ class McslaView extends Component {
         this.props.deleteObjective(termName);
     }
 
+    handleExport() {
+
+    }
+
     render() {
         const { classes, sla, csSlas } = this.props;
         const { open } = this.state;
@@ -134,16 +138,21 @@ class McslaView extends Component {
         return (
             <div>
                 <Grid container spacing={24}>
-                    <Grid item md={12}>
+                    <Grid item md={2}>
+                        <Button variant="raised" color="default" className={classes.button} onClick={() => this.handleExport()}>PDF Export</Button>
+                    </Grid>
+                    <Grid item md={8}>
                         <div className={classes.row}>
-                            <Typography color="textSecondary" variant="headline" paragraph={true}>Application Multi-Cloud SLA</Typography>
+                            <Typography color="textSecondary" variant="h4" gutterBottom>Application Multi-Cloud SLA</Typography>
                         </div>
                     </Grid>
+                    <Grid item md={2}>
+                    </Grid>
                     <Grid item md={6}>
                         <TextField fullWidth multiline rowsMax="4" label="Description" value={sla.description} margin="normal" onChange={event => this.handleChangeDescription(event)} />
                         <CoveredServices coveredServices={sla.coveredServices} />
                     </Grid>
-                    <Grid item md={2} />
+                    <Grid item md={3} />
                     <Grid item md={3}>
                         <FormGroup >
                             <FormControl margin="normal">
diff --git a/OPTIMUS/ACSmI-client/.classpath b/OPTIMUS/ACSmI-client/.classpath
deleted file mode 100644
index 4b1e0b42b1c0b7e3dc507d83210e27533f780ed4..0000000000000000000000000000000000000000
--- a/OPTIMUS/ACSmI-client/.classpath
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src/gen/java"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7">
-		<attributes>
-			<attribute name="maven.pomderived" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
-		<attributes>
-			<attribute name="maven.pomderived" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="output" path="target/classes"/>
-</classpath>
diff --git a/OPTIMUS/ACSmI-client/.project b/OPTIMUS/ACSmI-client/.project
deleted file mode 100644
index 3c91b8ee53d725d0df1f1b42b5670e1836cdc8b6..0000000000000000000000000000000000000000
--- a/OPTIMUS/ACSmI-client/.project
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>ACSmI-client</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.m2e.core.maven2Builder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.eclipse.m2e.core.maven2Nature</nature>
-	</natures>
-</projectDescription>
diff --git a/OPTIMUS/ACSmI-client/.settings/org.eclipse.core.resources.prefs b/OPTIMUS/ACSmI-client/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index 4824b8026319a8fb303971008a7d59a816d58bd6..0000000000000000000000000000000000000000
--- a/OPTIMUS/ACSmI-client/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,2 +0,0 @@
-eclipse.preferences.version=1
-encoding/<project>=UTF-8
diff --git a/OPTIMUS/ACSmI-client/.settings/org.eclipse.jdt.core.prefs b/OPTIMUS/ACSmI-client/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index bbcbc93486d53c73668b275ea5daf41b66ba9c41..0000000000000000000000000000000000000000
--- a/OPTIMUS/ACSmI-client/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,5 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
-org.eclipse.jdt.core.compiler.compliance=1.7
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
-org.eclipse.jdt.core.compiler.source=1.7
diff --git a/OPTIMUS/ACSmI-client/.settings/org.eclipse.m2e.core.prefs b/OPTIMUS/ACSmI-client/.settings/org.eclipse.m2e.core.prefs
deleted file mode 100644
index 14b697b7bbb0d85e8d8ee19141a2a92d9ce211be..0000000000000000000000000000000000000000
--- a/OPTIMUS/ACSmI-client/.settings/org.eclipse.m2e.core.prefs
+++ /dev/null
@@ -1,4 +0,0 @@
-activeProfiles=
-eclipse.preferences.version=1
-resolveWorkspaceProjects=true
-version=1
diff --git a/OPTIMUS/ACSmI-client/.swagger-codegen-ignore b/OPTIMUS/ACSmI-client/.swagger-codegen-ignore
deleted file mode 100644
index c5fa491b4c557bf997d5dd21797de782545dc9e5..0000000000000000000000000000000000000000
--- a/OPTIMUS/ACSmI-client/.swagger-codegen-ignore
+++ /dev/null
@@ -1,23 +0,0 @@
-# Swagger Codegen Ignore
-# Generated by swagger-codegen https://github.com/swagger-api/swagger-codegen
-
-# Use this file to prevent files from being overwritten by the generator.
-# The patterns follow closely to .gitignore or .dockerignore.
-
-# As an example, the C# client generator defines ApiClient.cs.
-# You can make changes and tell Swagger Codgen to ignore just this file by uncommenting the following line:
-#ApiClient.cs
-
-# You can match any string of characters against a directory, file or extension with a single asterisk (*):
-#foo/*/qux
-# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux
-
-# You can recursively match patterns against a directory, file or extension with a double asterisk (**):
-#foo/**/qux
-# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux
-
-# You can also negate patterns with an exclamation (!).
-# For example, you can ignore all files in a docs folder with the file extension .md:
-#docs/*.md
-# Then explicitly reverse the ignore rule for a single file:
-#!docs/README.md
diff --git a/OPTIMUS/ACSmI-client/.swagger-codegen/VERSION b/OPTIMUS/ACSmI-client/.swagger-codegen/VERSION
deleted file mode 100644
index a6254504e40175d135cea7feb34ad31fa0d0bca3..0000000000000000000000000000000000000000
--- a/OPTIMUS/ACSmI-client/.swagger-codegen/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-2.3.1
\ No newline at end of file
diff --git a/OPTIMUS/ACSmI-client/pom.xml b/OPTIMUS/ACSmI-client/pom.xml
deleted file mode 100644
index d18f48c66c83bf95a95fde0e41ffb8449921812b..0000000000000000000000000000000000000000
--- a/OPTIMUS/ACSmI-client/pom.xml
+++ /dev/null
@@ -1,179 +0,0 @@
-<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/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-<!--   <groupId>io.swagger</groupId> -->
-<!--   <artifactId>swagger-jaxrs-client</artifactId> -->
-<!--   <packaging>jar</packaging> -->
-<!--   <name>swagger-jaxrs-client</name> -->
-<!--   <description>ACSmI Services API documentation</description> -->
-<!--   <version>1.0.0</version> -->
-  <groupId>eu.decideh2020</groupId>
-  <artifactId>ACSmI-client</artifactId>
-  <packaging>jar</packaging>
-  <version>2.0.0</version>
-  <build>
-    <sourceDirectory>src/main/java</sourceDirectory>
-    <plugins>
-      <plugin>
-        <artifactId>maven-failsafe-plugin</artifactId>
-        <version>2.6</version>
-        <executions>
-          <execution>
-            <goals>
-              <goal>integration-test</goal>
-              <goal>verify</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-      <!--plugin>
-        <groupId>org.eclipse.jetty</groupId>
-        <artifactId>jetty-maven-plugin</artifactId>
-        <version>${jetty-version}</version>
-        <configuration>
-          <webApp>
-            <contextPath>/</contextPath>
-          </webApp>
-          <webAppSourceDirectory>target/${project.artifactId}-${project.version}</webAppSourceDirectory>
-          <stopPort>8079</stopPort>
-          <stopKey>stopit</stopKey>
-          <httpConnector>
-            <port></port>
-            <idleTimeout>60000</idleTimeout>
-          </httpConnector>
-        </configuration>
-        <executions>
-          <execution>
-            <id>start-jetty</id>
-            <phase>pre-integration-test</phase>
-            <goals>
-              <goal>start</goal>
-            </goals>
-            <configuration>
-              <scanIntervalSeconds>0</scanIntervalSeconds>
-              <daemon>true</daemon>
-            </configuration>
-          </execution>
-          <execution>
-            <id>stop-jetty</id>
-            <phase>post-integration-test</phase>
-            <goals>
-              <goal>stop</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin-->
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>build-helper-maven-plugin</artifactId>
-        <version>1.9.1</version>
-        <executions>
-          <execution>
-            <id>add-source</id>
-            <phase>generate-sources</phase>
-            <goals>
-              <goal>add-source</goal>
-            </goals>
-            <configuration>
-              <sources>
-                <source>src/gen/java</source>
-              </sources>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-  <dependencies>
-    <dependency>
-      <groupId>io.swagger</groupId>
-      <artifactId>swagger-jaxrs</artifactId>
-      <scope>compile</scope>
-      <version>${swagger-core-version}</version>
-    </dependency>
-    <dependency>
-      <groupId>ch.qos.logback</groupId>
-      <artifactId>logback-classic</artifactId>
-      <version>${logback-version}</version>
-      <scope>compile</scope>
-    </dependency>
-    <dependency>
-      <groupId>ch.qos.logback</groupId>
-      <artifactId>logback-core</artifactId>
-      <version>${logback-version}</version>
-      <scope>compile</scope>
-    </dependency>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <version>${junit-version}</version>
-      <scope>test</scope>
-    </dependency>
-    <!-- CXF Client -->
-    <dependency>
-        <groupId>org.apache.cxf</groupId>
-        <artifactId>cxf-rt-rs-client</artifactId>
-        <version>${cxf-version}</version>
-        <scope>test</scope>
-    </dependency>
-    
-     <!-- CXF server -->
-    <dependency>
-        <groupId>org.apache.cxf</groupId>
-        <artifactId>cxf-rt-frontend-jaxrs</artifactId>
-        <version>${cxf-version}</version>
-        <scope>compile</scope>
-    </dependency>
-    <dependency>
-        <groupId>org.apache.cxf</groupId>
-        <artifactId>cxf-rt-rs-service-description</artifactId>
-        <version>${cxf-version}</version>
-        <scope>compile</scope>
-    </dependency>
-    <dependency>
-        <groupId>org.apache.cxf</groupId>
-        <artifactId>cxf-rt-ws-policy</artifactId>
-        <version>${cxf-version}</version>
-        <scope>compile</scope>
-    </dependency>
-    <dependency>
-        <groupId>org.apache.cxf</groupId>
-        <artifactId>cxf-rt-wsdl</artifactId>
-        <version>${cxf-version}</version>
-        <scope>compile</scope>
-    </dependency>
-    <dependency>
-        <groupId>com.fasterxml.jackson.jaxrs</groupId>
-        <artifactId>jackson-jaxrs-json-provider</artifactId>
-        <version>${jackson-jaxrs-version}</version>
-        <scope>compile</scope>
-    </dependency>
-    <dependency>
-       <groupId>com.fasterxml.jackson.datatype</groupId>
-       <artifactId>jackson-datatype-joda</artifactId>
-       <version>${jackson-jaxrs-version}</version>
-       <scope>compile</scope>
-    </dependency>
-  </dependencies>
-  <repositories>
-    <repository>
-      <id>sonatype-snapshots</id>
-      <url>https://oss.sonatype.org/content/repositories/snapshots</url>
-      <snapshots>
-        <enabled>true</enabled>
-      </snapshots>
-    </repository>
-  </repositories>
-  <properties>
-    <java.version>1.7</java.version>
-    <maven.compiler.source>${java.version}</maven.compiler.source>
-    <maven.compiler.target>${java.version}</maven.compiler.target>
-    <swagger-core-version>1.5.15</swagger-core-version>
-    <jetty-version>9.2.9.v20150224</jetty-version>
-    <junit-version>4.12</junit-version>
-    <logback-version>1.1.7</logback-version>
-    <servlet-api-version>2.5</servlet-api-version>
-    <cxf-version>3.1.11</cxf-version>
-    <jackson-jaxrs-version>2.8.9</jackson-jaxrs-version>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-  </properties>
-</project>
diff --git a/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/api/ServiceAttributeTypeResourceApi.java b/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/api/ServiceAttributeTypeResourceApi.java
deleted file mode 100644
index d2c8ed3fc7271e871fd53ce4da59babe289253bf..0000000000000000000000000000000000000000
--- a/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/api/ServiceAttributeTypeResourceApi.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package eu.decideh2020.acsmi.client.api;
-
-import eu.decideh2020.acsmi.client.model.ServiceAttributeType;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.List;
-import java.util.Map;
-import javax.ws.rs.*;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.MediaType;
-import org.apache.cxf.jaxrs.ext.multipart.*;
-
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiResponses;
-import io.swagger.annotations.ApiResponse;
-import io.swagger.jaxrs.PATCH;
-
-/**
- * acsmiservices API
- *
- * <p>acsmiservices API documentation
- *
- */
-@Path("/")
-@Api(value = "/", description = "")
-public interface ServiceAttributeTypeResourceApi  {
-
-    /**
-     * findServiceAttributeTypes
-     *
-     */
-    @GET
-    @Path("/api/service-attribute-types")
-    @Consumes({ "application/json" })
-    @Produces({ "*/*" })
-    @ApiOperation(value = "findServiceAttributeTypes", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK", response = ServiceAttributeType.class, responseContainer = "array"),
-        @ApiResponse(code = 401, message = "Unauthorized", response = void.class),
-        @ApiResponse(code = 403, message = "Forbidden", response = void.class),
-        @ApiResponse(code = 404, message = "Not Found", response = void.class) })
-    public List<ServiceAttributeType> findServiceAttributeTypesUsingGET(@QueryParam("classid")String classid);
-
-    /**
-     * getServiceAttributeType
-     *
-     */
-    @GET
-    @Path("/api/service-attribute-types/{id}")
-    @Consumes({ "application/json" })
-    @Produces({ "*/*" })
-    @ApiOperation(value = "getServiceAttributeType", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK", response = ServiceAttributeType.class),
-        @ApiResponse(code = 401, message = "Unauthorized", response = void.class),
-        @ApiResponse(code = 403, message = "Forbidden", response = void.class),
-        @ApiResponse(code = 404, message = "Not Found", response = void.class) })
-    public ServiceAttributeType getServiceAttributeTypeUsingGET(@PathParam("id") Long id);
-}
-
diff --git a/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/api/ServiceAttributeValueResourceApi.java b/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/api/ServiceAttributeValueResourceApi.java
deleted file mode 100644
index 6958862be61b328e111781c01805554c3930d854..0000000000000000000000000000000000000000
--- a/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/api/ServiceAttributeValueResourceApi.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package eu.decideh2020.acsmi.client.api;
-
-import eu.decideh2020.acsmi.client.model.ServiceAttributeValue;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.List;
-import java.util.Map;
-import javax.ws.rs.*;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.MediaType;
-import org.apache.cxf.jaxrs.ext.multipart.*;
-
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiResponses;
-import io.swagger.annotations.ApiResponse;
-import io.swagger.jaxrs.PATCH;
-
-/**
- * acsmiservices API
- *
- * <p>acsmiservices API documentation
- *
- */
-@Path("/")
-@Api(value = "/", description = "")
-public interface ServiceAttributeValueResourceApi  {
-
-    /**
-     * createServiceAttributeValue
-     *
-     */
-    @POST
-    @Path("/api/service-attribute-values")
-    @Consumes({ "application/json" })
-    @Produces({ "*/*" })
-    @ApiOperation(value = "createServiceAttributeValue", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK", response = ServiceAttributeValue.class),
-        @ApiResponse(code = 201, message = "Created", response = void.class),
-        @ApiResponse(code = 401, message = "Unauthorized", response = void.class),
-        @ApiResponse(code = 403, message = "Forbidden", response = void.class),
-        @ApiResponse(code = 404, message = "Not Found", response = void.class) })
-    public ServiceAttributeValue createServiceAttributeValueUsingPOST(ServiceAttributeValue serviceAttributeValue);
-
-    /**
-     * deleteServiceAttributeValue
-     *
-     */
-    @DELETE
-    @Path("/api/service-attribute-values/{id}")
-    @Consumes({ "application/json" })
-    @Produces({ "*/*" })
-    @ApiOperation(value = "deleteServiceAttributeValue", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK", response = void.class),
-        @ApiResponse(code = 204, message = "No Content", response = void.class),
-        @ApiResponse(code = 401, message = "Unauthorized", response = void.class),
-        @ApiResponse(code = 403, message = "Forbidden", response = void.class) })
-    public void deleteServiceAttributeValueUsingDELETE(@PathParam("id") Long id, @QueryParam("forcedelete")String forcedelete);
-
-    /**
-     * getServiceAttributeValue
-     *
-     */
-    @GET
-    @Path("/api/service-attribute-values/{id}")
-    @Consumes({ "application/json" })
-    @Produces({ "*/*" })
-    @ApiOperation(value = "getServiceAttributeValue", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK", response = ServiceAttributeValue.class),
-        @ApiResponse(code = 401, message = "Unauthorized", response = void.class),
-        @ApiResponse(code = 403, message = "Forbidden", response = void.class),
-        @ApiResponse(code = 404, message = "Not Found", response = void.class) })
-    public ServiceAttributeValue getServiceAttributeValueUsingGET(@PathParam("id") Long id);
-
-    /**
-     * updateServiceAttributeValue
-     *
-     */
-    @PUT
-    @Path("/api/service-attribute-values")
-    @Consumes({ "application/json" })
-    @Produces({ "*/*" })
-    @ApiOperation(value = "updateServiceAttributeValue", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK", response = ServiceAttributeValue.class),
-        @ApiResponse(code = 201, message = "Created", response = void.class),
-        @ApiResponse(code = 401, message = "Unauthorized", response = void.class),
-        @ApiResponse(code = 403, message = "Forbidden", response = void.class),
-        @ApiResponse(code = 404, message = "Not Found", response = void.class) })
-    public ServiceAttributeValue updateServiceAttributeValueUsingPUT(ServiceAttributeValue serviceAttributeValue);
-}
-
diff --git a/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/api/ServiceClassAttributeResourceApi.java b/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/api/ServiceClassAttributeResourceApi.java
deleted file mode 100644
index 8bafeac9d62195fa0bda5c771342a30a20152264..0000000000000000000000000000000000000000
--- a/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/api/ServiceClassAttributeResourceApi.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package eu.decideh2020.acsmi.client.api;
-
-import eu.decideh2020.acsmi.client.model.ServiceClassAttribute;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.List;
-import java.util.Map;
-import javax.ws.rs.*;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.MediaType;
-import org.apache.cxf.jaxrs.ext.multipart.*;
-
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiResponses;
-import io.swagger.annotations.ApiResponse;
-import io.swagger.jaxrs.PATCH;
-
-/**
- * acsmiservices API
- *
- * <p>acsmiservices API documentation
- *
- */
-@Path("/")
-@Api(value = "/", description = "")
-public interface ServiceClassAttributeResourceApi  {
-
-    /**
-     * getAllServiceClassAttributes
-     *
-     */
-    @GET
-    @Path("/api/service-class-attributes")
-    @Consumes({ "application/json" })
-    @Produces({ "*/*" })
-    @ApiOperation(value = "getAllServiceClassAttributes", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK", response = ServiceClassAttribute.class, responseContainer = "array"),
-        @ApiResponse(code = 401, message = "Unauthorized", response = void.class),
-        @ApiResponse(code = 403, message = "Forbidden", response = void.class),
-        @ApiResponse(code = 404, message = "Not Found", response = void.class) })
-    public List<ServiceClassAttribute> getAllServiceClassAttributesUsingGET(@QueryParam("classid")String classid);
-
-    /**
-     * getServiceClassAttribute
-     *
-     */
-    @GET
-    @Path("/api/service-class-attributes/{id}")
-    @Consumes({ "application/json" })
-    @Produces({ "*/*" })
-    @ApiOperation(value = "getServiceClassAttribute", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK", response = ServiceClassAttribute.class),
-        @ApiResponse(code = 401, message = "Unauthorized", response = void.class),
-        @ApiResponse(code = 403, message = "Forbidden", response = void.class),
-        @ApiResponse(code = 404, message = "Not Found", response = void.class) })
-    public ServiceClassAttribute getServiceClassAttributeUsingGET(@PathParam("id") Long id);
-}
-
diff --git a/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/api/ServiceClassResourceApi.java b/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/api/ServiceClassResourceApi.java
deleted file mode 100644
index 0b3243abb17cd40b27142a46c6cbf33ead701da8..0000000000000000000000000000000000000000
--- a/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/api/ServiceClassResourceApi.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package eu.decideh2020.acsmi.client.api;
-
-import eu.decideh2020.acsmi.client.model.ServiceClass;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.List;
-import java.util.Map;
-import javax.ws.rs.*;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.MediaType;
-import org.apache.cxf.jaxrs.ext.multipart.*;
-
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiResponses;
-import io.swagger.annotations.ApiResponse;
-import io.swagger.jaxrs.PATCH;
-
-/**
- * acsmiservices API
- *
- * <p>acsmiservices API documentation
- *
- */
-@Path("/")
-@Api(value = "/", description = "")
-public interface ServiceClassResourceApi  {
-
-    /**
-     * getAllServiceClassesFullInfo
-     *
-     */
-    @GET
-    @Path("/api/service-classes/full")
-    @Consumes({ "application/json" })
-    @Produces({ "*/*" })
-    @ApiOperation(value = "getAllServiceClassesFullInfo", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK", response = ServiceClass.class, responseContainer = "array"),
-        @ApiResponse(code = 401, message = "Unauthorized", response = void.class),
-        @ApiResponse(code = 403, message = "Forbidden", response = void.class),
-        @ApiResponse(code = 404, message = "Not Found", response = void.class) })
-    public List<ServiceClass> getAllServiceClassesFullInfoUsingGET();
-
-    /**
-     * getAllServiceClasses
-     *
-     */
-    @GET
-    @Path("/api/service-classes")
-    @Consumes({ "application/json" })
-    @Produces({ "*/*" })
-    @ApiOperation(value = "getAllServiceClasses", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK", response = ServiceClass.class, responseContainer = "array"),
-        @ApiResponse(code = 401, message = "Unauthorized", response = void.class),
-        @ApiResponse(code = 403, message = "Forbidden", response = void.class),
-        @ApiResponse(code = 404, message = "Not Found", response = void.class) })
-    public List<ServiceClass> getAllServiceClassesUsingGET();
-
-    /**
-     * getServiceClass
-     *
-     */
-    @GET
-    @Path("/api/service-classes/{id}")
-    @Consumes({ "application/json" })
-    @Produces({ "*/*" })
-    @ApiOperation(value = "getServiceClass", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK", response = ServiceClass.class),
-        @ApiResponse(code = 401, message = "Unauthorized", response = void.class),
-        @ApiResponse(code = 403, message = "Forbidden", response = void.class),
-        @ApiResponse(code = 404, message = "Not Found", response = void.class) })
-    public ServiceClass getServiceClassUsingGET(@PathParam("id") Long id);
-}
-
diff --git a/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/api/ServiceIncidenceResourceApi.java b/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/api/ServiceIncidenceResourceApi.java
deleted file mode 100644
index be2653ef899fa5dc20bfda9ec30ba928151f29f6..0000000000000000000000000000000000000000
--- a/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/api/ServiceIncidenceResourceApi.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package eu.decideh2020.acsmi.client.api;
-
-import eu.decideh2020.acsmi.client.model.ServiceIncidence;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.List;
-import java.util.Map;
-import javax.ws.rs.*;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.MediaType;
-import org.apache.cxf.jaxrs.ext.multipart.*;
-
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiResponses;
-import io.swagger.annotations.ApiResponse;
-import io.swagger.jaxrs.PATCH;
-
-/**
- * acsmiservices API
- *
- * <p>acsmiservices API documentation
- *
- */
-@Path("/")
-@Api(value = "/", description = "")
-public interface ServiceIncidenceResourceApi  {
-
-    /**
-     * createServiceIncidence
-     *
-     */
-    @POST
-    @Path("/api/service-incidences")
-    @Consumes({ "application/json" })
-    @Produces({ "*/*" })
-    @ApiOperation(value = "createServiceIncidence", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK", response = ServiceIncidence.class),
-        @ApiResponse(code = 201, message = "Created", response = void.class),
-        @ApiResponse(code = 401, message = "Unauthorized", response = void.class),
-        @ApiResponse(code = 403, message = "Forbidden", response = void.class),
-        @ApiResponse(code = 404, message = "Not Found", response = void.class) })
-    public ServiceIncidence createServiceIncidenceUsingPOST(ServiceIncidence serviceIncidence);
-
-    /**
-     * getAllServiceIncidences
-     *
-     */
-    @GET
-    @Path("/api/service-incidences/{id}")
-    @Consumes({ "application/json" })
-    @Produces({ "*/*" })
-    @ApiOperation(value = "getAllServiceIncidences", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK", response = ServiceIncidence.class, responseContainer = "array"),
-        @ApiResponse(code = 401, message = "Unauthorized", response = void.class),
-        @ApiResponse(code = 403, message = "Forbidden", response = void.class),
-        @ApiResponse(code = 404, message = "Not Found", response = void.class) })
-    public List<ServiceIncidence> getAllServiceIncidencesUsingGET(@PathParam("id") Long id);
-}
-
diff --git a/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/api/ServiceResourceApi.java b/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/api/ServiceResourceApi.java
deleted file mode 100644
index f5a464b296b250614e158a9cb01611c81e78450c..0000000000000000000000000000000000000000
--- a/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/api/ServiceResourceApi.java
+++ /dev/null
@@ -1,178 +0,0 @@
-package eu.decideh2020.acsmi.client.api;
-
-import eu.decideh2020.acsmi.client.model.Service;
-import eu.decideh2020.acsmi.client.model.ServiceDevOpsInfoVO;
-import eu.decideh2020.acsmi.client.model.ServiceNFRInfoVO;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.List;
-import java.util.Map;
-import javax.ws.rs.*;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.MediaType;
-import org.apache.cxf.jaxrs.ext.multipart.*;
-
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiResponses;
-import io.swagger.annotations.ApiResponse;
-import io.swagger.jaxrs.PATCH;
-
-/**
- * acsmiservices API
- *
- * <p>acsmiservices API documentation
- *
- */
-@Path("/")
-@Api(value = "/", description = "")
-public interface ServiceResourceApi  {
-
-    /**
-     * createService
-     *
-     */
-    @POST
-    @Path("/api/services")
-    @Consumes({ "application/json" })
-    @Produces({ "*/*" })
-    @ApiOperation(value = "createService", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK", response = Service.class),
-        @ApiResponse(code = 201, message = "Created", response = void.class),
-        @ApiResponse(code = 401, message = "Unauthorized", response = void.class),
-        @ApiResponse(code = 403, message = "Forbidden", response = void.class),
-        @ApiResponse(code = 404, message = "Not Found", response = void.class) })
-    public Service createServiceUsingPOST(Service service, @QueryParam("attributes")List<String> attributes);
-
-    /**
-     * deleteService
-     *
-     */
-    @DELETE
-    @Path("/api/services/{id}")
-    @Consumes({ "application/json" })
-    @Produces({ "*/*" })
-    @ApiOperation(value = "deleteService", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK", response = void.class),
-        @ApiResponse(code = 204, message = "No Content", response = void.class),
-        @ApiResponse(code = 401, message = "Unauthorized", response = void.class),
-        @ApiResponse(code = 403, message = "Forbidden", response = void.class) })
-    public void deleteServiceUsingDELETE(@PathParam("id") Long id, @QueryParam("forcedelete")String forcedelete);
-
-    /**
-     * findServices
-     *
-     */
-    @GET
-    @Path("/api/services/find")
-    @Consumes({ "application/json" })
-    @Produces({ "application/json" })
-    @ApiOperation(value = "findServices", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK", response = Service.class, responseContainer = "array"),
-        @ApiResponse(code = 401, message = "Unauthorized", response = void.class),
-        @ApiResponse(code = 403, message = "Forbidden", response = void.class),
-        @ApiResponse(code = 404, message = "Not Found", response = void.class) })
-    public List<Service> findServicesUsingGET(@QueryParam("filter")String filter);
-
-    /**
-     * getAllServices
-     *
-     */
-    @GET
-    @Path("/api/services")
-    @Consumes({ "application/json" })
-    @Produces({ "*/*" })
-    @ApiOperation(value = "getAllServices", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK", response = Service.class, responseContainer = "array"),
-        @ApiResponse(code = 401, message = "Unauthorized", response = void.class),
-        @ApiResponse(code = 403, message = "Forbidden", response = void.class),
-        @ApiResponse(code = 404, message = "Not Found", response = void.class) })
-    public List<Service> getAllServicesUsingGET();
-
-    /**
-     * getDevOpsInfo
-     *
-     */
-    @GET
-    @Path("/api/services/devops")
-    @Consumes({ "application/json" })
-    @Produces({ "*/*" })
-    @ApiOperation(value = "getDevOpsInfo", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK", response = ServiceDevOpsInfoVO.class, responseContainer = "array"),
-        @ApiResponse(code = 401, message = "Unauthorized", response = void.class),
-        @ApiResponse(code = 403, message = "Forbidden", response = void.class),
-        @ApiResponse(code = 404, message = "Not Found", response = void.class) })
-    public List<ServiceDevOpsInfoVO> getDevOpsInfoUsingGET();
-
-    /**
-     * getOptimusInfo
-     *
-     */
-    @GET
-    @Path("/api/services/optimus")
-    @Consumes({ "application/json" })
-    @Produces({ "*/*" })
-    @ApiOperation(value = "getOptimusInfo", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK", response = Service.class, responseContainer = "array"),
-        @ApiResponse(code = 401, message = "Unauthorized", response = void.class),
-        @ApiResponse(code = 403, message = "Forbidden", response = void.class),
-        @ApiResponse(code = 404, message = "Not Found", response = void.class) })
-    public List<Service> getOptimusInfoUsingGET(@QueryParam("serviceids")List<Long> serviceids);
-
-    /**
-     * getServiceNfrInfo
-     *
-     */
-    @GET
-    @Path("/api/services/nfr")
-    @Consumes({ "application/json" })
-    @Produces({ "*/*" })
-    @ApiOperation(value = "getServiceNfrInfo", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK", response = ServiceNFRInfoVO.class, responseContainer = "array"),
-        @ApiResponse(code = 401, message = "Unauthorized", response = void.class),
-        @ApiResponse(code = 403, message = "Forbidden", response = void.class),
-        @ApiResponse(code = 404, message = "Not Found", response = void.class) })
-    public List<ServiceNFRInfoVO> getServiceNfrInfoUsingGET(@QueryParam("serviceids")List<Long> serviceids);
-
-    /**
-     * getService
-     *
-     */
-    @GET
-    @Path("/api/services/{id}")
-    @Consumes({ "application/json" })
-    @Produces({ "*/*" })
-    @ApiOperation(value = "getService", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK", response = Service.class),
-        @ApiResponse(code = 401, message = "Unauthorized", response = void.class),
-        @ApiResponse(code = 403, message = "Forbidden", response = void.class),
-        @ApiResponse(code = 404, message = "Not Found", response = void.class) })
-    public Service getServiceUsingGET(@PathParam("id") Long id);
-
-    /**
-     * updateService
-     *
-     */
-    @PUT
-    @Path("/api/services")
-    @Consumes({ "application/json" })
-    @Produces({ "*/*" })
-    @ApiOperation(value = "updateService", tags={  })
-    @ApiResponses(value = { 
-        @ApiResponse(code = 200, message = "OK", response = Service.class),
-        @ApiResponse(code = 201, message = "Created", response = void.class),
-        @ApiResponse(code = 401, message = "Unauthorized", response = void.class),
-        @ApiResponse(code = 403, message = "Forbidden", response = void.class),
-        @ApiResponse(code = 404, message = "Not Found", response = void.class) })
-    public Service updateServiceUsingPUT(Service service, @QueryParam("attributes")List<String> attributes);
-}
-
diff --git a/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/model/AttributeVO.java b/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/model/AttributeVO.java
deleted file mode 100644
index 155c15d055ae540659c838a9f644cd4d90f218d2..0000000000000000000000000000000000000000
--- a/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/model/AttributeVO.java
+++ /dev/null
@@ -1,498 +0,0 @@
-package eu.decideh2020.acsmi.client.model;
-
-
-import io.swagger.annotations.ApiModelProperty;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlType;
-import javax.xml.bind.annotation.XmlEnum;
-import javax.xml.bind.annotation.XmlEnumValue;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public class AttributeVO  {
-  
-  @ApiModelProperty(value = "")
-  private String checklistevalrule = null;
-
-  @ApiModelProperty(value = "")
-  private String checklistvalue = null;
-
-  @ApiModelProperty(value = "")
-  private Long childid = null;
-
-  @ApiModelProperty(value = "")
-  private Long classattributeid = null;
-
-  @ApiModelProperty(value = "")
-  private String human = null;
-
-  @ApiModelProperty(value = "")
-  private Boolean ischecklist = null;
-
-  @ApiModelProperty(value = "")
-  private Boolean iscommon = null;
-
-  @ApiModelProperty(value = "")
-  private Boolean isenumeration = null;
-
-  @ApiModelProperty(value = "")
-  private Boolean isfunctionalrequirement = null;
-
-  @ApiModelProperty(value = "")
-  private Boolean ismandatory = null;
-
-  @ApiModelProperty(value = "")
-  private String name = null;
-
-  @ApiModelProperty(value = "")
-  private String nfrname = null;
-
-  @ApiModelProperty(value = "")
-  private Long parentid = null;
-
-  @ApiModelProperty(value = "")
-  private Long typeid = null;
-
-  @ApiModelProperty(value = "")
-  private String unitfactor = null;
-
-  @ApiModelProperty(value = "")
-  private String unitrule = null;
-
-  @ApiModelProperty(value = "")
-  private String units = null;
-
-  @ApiModelProperty(value = "")
-  private String unitvalue = null;
-
-  @ApiModelProperty(value = "")
-  private String value = null;
-
-  @ApiModelProperty(value = "")
-  private Long valueid = null;
-
-  @ApiModelProperty(value = "")
-  private Integer weight = null;
- /**
-   * Get checklistevalrule
-   * @return checklistevalrule
-  **/
-  @JsonProperty("checklistevalrule")
-  public String getChecklistevalrule() {
-    return checklistevalrule;
-  }
-
-  public void setChecklistevalrule(String checklistevalrule) {
-    this.checklistevalrule = checklistevalrule;
-  }
-
-  public AttributeVO checklistevalrule(String checklistevalrule) {
-    this.checklistevalrule = checklistevalrule;
-    return this;
-  }
-
- /**
-   * Get checklistvalue
-   * @return checklistvalue
-  **/
-  @JsonProperty("checklistvalue")
-  public String getChecklistvalue() {
-    return checklistvalue;
-  }
-
-  public void setChecklistvalue(String checklistvalue) {
-    this.checklistvalue = checklistvalue;
-  }
-
-  public AttributeVO checklistvalue(String checklistvalue) {
-    this.checklistvalue = checklistvalue;
-    return this;
-  }
-
- /**
-   * Get childid
-   * @return childid
-  **/
-  @JsonProperty("childid")
-  public Long getChildid() {
-    return childid;
-  }
-
-  public void setChildid(Long childid) {
-    this.childid = childid;
-  }
-
-  public AttributeVO childid(Long childid) {
-    this.childid = childid;
-    return this;
-  }
-
- /**
-   * Get classattributeid
-   * @return classattributeid
-  **/
-  @JsonProperty("classattributeid")
-  public Long getClassattributeid() {
-    return classattributeid;
-  }
-
-  public void setClassattributeid(Long classattributeid) {
-    this.classattributeid = classattributeid;
-  }
-
-  public AttributeVO classattributeid(Long classattributeid) {
-    this.classattributeid = classattributeid;
-    return this;
-  }
-
- /**
-   * Get human
-   * @return human
-  **/
-  @JsonProperty("human")
-  public String getHuman() {
-    return human;
-  }
-
-  public void setHuman(String human) {
-    this.human = human;
-  }
-
-  public AttributeVO human(String human) {
-    this.human = human;
-    return this;
-  }
-
- /**
-   * Get ischecklist
-   * @return ischecklist
-  **/
-  @JsonProperty("ischecklist")
-  public Boolean isIschecklist() {
-    return ischecklist;
-  }
-
-  public void setIschecklist(Boolean ischecklist) {
-    this.ischecklist = ischecklist;
-  }
-
-  public AttributeVO ischecklist(Boolean ischecklist) {
-    this.ischecklist = ischecklist;
-    return this;
-  }
-
- /**
-   * Get iscommon
-   * @return iscommon
-  **/
-  @JsonProperty("iscommon")
-  public Boolean isIscommon() {
-    return iscommon;
-  }
-
-  public void setIscommon(Boolean iscommon) {
-    this.iscommon = iscommon;
-  }
-
-  public AttributeVO iscommon(Boolean iscommon) {
-    this.iscommon = iscommon;
-    return this;
-  }
-
- /**
-   * Get isenumeration
-   * @return isenumeration
-  **/
-  @JsonProperty("isenumeration")
-  public Boolean isIsenumeration() {
-    return isenumeration;
-  }
-
-  public void setIsenumeration(Boolean isenumeration) {
-    this.isenumeration = isenumeration;
-  }
-
-  public AttributeVO isenumeration(Boolean isenumeration) {
-    this.isenumeration = isenumeration;
-    return this;
-  }
-
- /**
-   * Get isfunctionalrequirement
-   * @return isfunctionalrequirement
-  **/
-  @JsonProperty("isfunctionalrequirement")
-  public Boolean isIsfunctionalrequirement() {
-    return isfunctionalrequirement;
-  }
-
-  public void setIsfunctionalrequirement(Boolean isfunctionalrequirement) {
-    this.isfunctionalrequirement = isfunctionalrequirement;
-  }
-
-  public AttributeVO isfunctionalrequirement(Boolean isfunctionalrequirement) {
-    this.isfunctionalrequirement = isfunctionalrequirement;
-    return this;
-  }
-
- /**
-   * Get ismandatory
-   * @return ismandatory
-  **/
-  @JsonProperty("ismandatory")
-  public Boolean isIsmandatory() {
-    return ismandatory;
-  }
-
-  public void setIsmandatory(Boolean ismandatory) {
-    this.ismandatory = ismandatory;
-  }
-
-  public AttributeVO ismandatory(Boolean ismandatory) {
-    this.ismandatory = ismandatory;
-    return this;
-  }
-
- /**
-   * Get name
-   * @return name
-  **/
-  @JsonProperty("name")
-  public String getName() {
-    return name;
-  }
-
-  public void setName(String name) {
-    this.name = name;
-  }
-
-  public AttributeVO name(String name) {
-    this.name = name;
-    return this;
-  }
-
- /**
-   * Get nfrname
-   * @return nfrname
-  **/
-  @JsonProperty("nfrname")
-  public String getNfrname() {
-    return nfrname;
-  }
-
-  public void setNfrname(String nfrname) {
-    this.nfrname = nfrname;
-  }
-
-  public AttributeVO nfrname(String nfrname) {
-    this.nfrname = nfrname;
-    return this;
-  }
-
- /**
-   * Get parentid
-   * @return parentid
-  **/
-  @JsonProperty("parentid")
-  public Long getParentid() {
-    return parentid;
-  }
-
-  public void setParentid(Long parentid) {
-    this.parentid = parentid;
-  }
-
-  public AttributeVO parentid(Long parentid) {
-    this.parentid = parentid;
-    return this;
-  }
-
- /**
-   * Get typeid
-   * @return typeid
-  **/
-  @JsonProperty("typeid")
-  public Long getTypeid() {
-    return typeid;
-  }
-
-  public void setTypeid(Long typeid) {
-    this.typeid = typeid;
-  }
-
-  public AttributeVO typeid(Long typeid) {
-    this.typeid = typeid;
-    return this;
-  }
-
- /**
-   * Get unitfactor
-   * @return unitfactor
-  **/
-  @JsonProperty("unitfactor")
-  public String getUnitfactor() {
-    return unitfactor;
-  }
-
-  public void setUnitfactor(String unitfactor) {
-    this.unitfactor = unitfactor;
-  }
-
-  public AttributeVO unitfactor(String unitfactor) {
-    this.unitfactor = unitfactor;
-    return this;
-  }
-
- /**
-   * Get unitrule
-   * @return unitrule
-  **/
-  @JsonProperty("unitrule")
-  public String getUnitrule() {
-    return unitrule;
-  }
-
-  public void setUnitrule(String unitrule) {
-    this.unitrule = unitrule;
-  }
-
-  public AttributeVO unitrule(String unitrule) {
-    this.unitrule = unitrule;
-    return this;
-  }
-
- /**
-   * Get units
-   * @return units
-  **/
-  @JsonProperty("units")
-  public String getUnits() {
-    return units;
-  }
-
-  public void setUnits(String units) {
-    this.units = units;
-  }
-
-  public AttributeVO units(String units) {
-    this.units = units;
-    return this;
-  }
-
- /**
-   * Get unitvalue
-   * @return unitvalue
-  **/
-  @JsonProperty("unitvalue")
-  public String getUnitvalue() {
-    return unitvalue;
-  }
-
-  public void setUnitvalue(String unitvalue) {
-    this.unitvalue = unitvalue;
-  }
-
-  public AttributeVO unitvalue(String unitvalue) {
-    this.unitvalue = unitvalue;
-    return this;
-  }
-
- /**
-   * Get value
-   * @return value
-  **/
-  @JsonProperty("value")
-  public String getValue() {
-    return value;
-  }
-
-  public void setValue(String value) {
-    this.value = value;
-  }
-
-  public AttributeVO value(String value) {
-    this.value = value;
-    return this;
-  }
-
- /**
-   * Get valueid
-   * @return valueid
-  **/
-  @JsonProperty("valueid")
-  public Long getValueid() {
-    return valueid;
-  }
-
-  public void setValueid(Long valueid) {
-    this.valueid = valueid;
-  }
-
-  public AttributeVO valueid(Long valueid) {
-    this.valueid = valueid;
-    return this;
-  }
-
- /**
-   * Get weight
-   * @return weight
-  **/
-  @JsonProperty("weight")
-  public Integer getWeight() {
-    return weight;
-  }
-
-  public void setWeight(Integer weight) {
-    this.weight = weight;
-  }
-
-  public AttributeVO weight(Integer weight) {
-    this.weight = weight;
-    return this;
-  }
-
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("class AttributeVO {\n");
-    
-    sb.append("    checklistevalrule: ").append(toIndentedString(checklistevalrule)).append("\n");
-    sb.append("    checklistvalue: ").append(toIndentedString(checklistvalue)).append("\n");
-    sb.append("    childid: ").append(toIndentedString(childid)).append("\n");
-    sb.append("    classattributeid: ").append(toIndentedString(classattributeid)).append("\n");
-    sb.append("    human: ").append(toIndentedString(human)).append("\n");
-    sb.append("    ischecklist: ").append(toIndentedString(ischecklist)).append("\n");
-    sb.append("    iscommon: ").append(toIndentedString(iscommon)).append("\n");
-    sb.append("    isenumeration: ").append(toIndentedString(isenumeration)).append("\n");
-    sb.append("    isfunctionalrequirement: ").append(toIndentedString(isfunctionalrequirement)).append("\n");
-    sb.append("    ismandatory: ").append(toIndentedString(ismandatory)).append("\n");
-    sb.append("    name: ").append(toIndentedString(name)).append("\n");
-    sb.append("    nfrname: ").append(toIndentedString(nfrname)).append("\n");
-    sb.append("    parentid: ").append(toIndentedString(parentid)).append("\n");
-    sb.append("    typeid: ").append(toIndentedString(typeid)).append("\n");
-    sb.append("    unitfactor: ").append(toIndentedString(unitfactor)).append("\n");
-    sb.append("    unitrule: ").append(toIndentedString(unitrule)).append("\n");
-    sb.append("    units: ").append(toIndentedString(units)).append("\n");
-    sb.append("    unitvalue: ").append(toIndentedString(unitvalue)).append("\n");
-    sb.append("    value: ").append(toIndentedString(value)).append("\n");
-    sb.append("    valueid: ").append(toIndentedString(valueid)).append("\n");
-    sb.append("    weight: ").append(toIndentedString(weight)).append("\n");
-    sb.append("}");
-    return sb.toString();
-  }
-
-  /**
-   * Convert the given object to string with each line indented by 4 spaces
-   * (except the first line).
-   */
-  private static String toIndentedString(java.lang.Object o) {
-    if (o == null) {
-      return "null";
-    }
-    return o.toString().replace("\n", "\n    ");
-  }
-}
-
diff --git a/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/model/ProfileInfoVM.java b/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/model/ProfileInfoVM.java
deleted file mode 100644
index a6f40bf49de66fe4600167cdbc8a23e704b26d2a..0000000000000000000000000000000000000000
--- a/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/model/ProfileInfoVM.java
+++ /dev/null
@@ -1,87 +0,0 @@
-package eu.decideh2020.acsmi.client.model;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import io.swagger.annotations.ApiModelProperty;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlType;
-import javax.xml.bind.annotation.XmlEnum;
-import javax.xml.bind.annotation.XmlEnumValue;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public class ProfileInfoVM  {
-  
-  @ApiModelProperty(value = "")
-  private List<String> activeProfiles = null;
-
-  @ApiModelProperty(value = "")
-  private String ribbonEnv = null;
- /**
-   * Get activeProfiles
-   * @return activeProfiles
-  **/
-  @JsonProperty("activeProfiles")
-  public List<String> getActiveProfiles() {
-    return activeProfiles;
-  }
-
-  public void setActiveProfiles(List<String> activeProfiles) {
-    this.activeProfiles = activeProfiles;
-  }
-
-  public ProfileInfoVM activeProfiles(List<String> activeProfiles) {
-    this.activeProfiles = activeProfiles;
-    return this;
-  }
-
-  public ProfileInfoVM addActiveProfilesItem(String activeProfilesItem) {
-    this.activeProfiles.add(activeProfilesItem);
-    return this;
-  }
-
- /**
-   * Get ribbonEnv
-   * @return ribbonEnv
-  **/
-  @JsonProperty("ribbonEnv")
-  public String getRibbonEnv() {
-    return ribbonEnv;
-  }
-
-  public void setRibbonEnv(String ribbonEnv) {
-    this.ribbonEnv = ribbonEnv;
-  }
-
-  public ProfileInfoVM ribbonEnv(String ribbonEnv) {
-    this.ribbonEnv = ribbonEnv;
-    return this;
-  }
-
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("class ProfileInfoVM {\n");
-    
-    sb.append("    activeProfiles: ").append(toIndentedString(activeProfiles)).append("\n");
-    sb.append("    ribbonEnv: ").append(toIndentedString(ribbonEnv)).append("\n");
-    sb.append("}");
-    return sb.toString();
-  }
-
-  /**
-   * Convert the given object to string with each line indented by 4 spaces
-   * (except the first line).
-   */
-  private static String toIndentedString(java.lang.Object o) {
-    if (o == null) {
-      return "null";
-    }
-    return o.toString().replace("\n", "\n    ");
-  }
-}
-
diff --git a/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/model/Service.java b/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/model/Service.java
deleted file mode 100644
index 27896b4849365bd094bbdc802660c6995da2f8da..0000000000000000000000000000000000000000
--- a/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/model/Service.java
+++ /dev/null
@@ -1,380 +0,0 @@
-package eu.decideh2020.acsmi.client.model;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-
-import io.swagger.annotations.ApiModelProperty;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlType;
-import javax.xml.bind.annotation.XmlEnum;
-import javax.xml.bind.annotation.XmlEnumValue;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-import eu.decideh2020.acsmi.client.model.AttributeVO;
-import eu.decideh2020.acsmi.client.model.ServiceIncidence;
-
-public class Service  {
-  
-  @ApiModelProperty(value = "")
-  private List<AttributeVO> attributes = null;
-
-  @ApiModelProperty(value = "")
-  private Date createdDate = null;
-
-  @ApiModelProperty(value = "")
-  private Date deleteddate = null;
-
-  @ApiModelProperty(value = "")
-  private List<byte[]> firstcontract = null;
-
-  @ApiModelProperty(value = "")
-  private Long id = null;
-
-  @ApiModelProperty(value = "")
-  private List<ServiceIncidence> incidences = null;
-
-  @ApiModelProperty(value = "")
-  private Date lastModifiedDate = null;
-
-  @ApiModelProperty(value = "")
-  private Double match = null;
-
-  @ApiModelProperty(value = "")
-  private List<String> matchingattributelist = null;
-
-  @ApiModelProperty(value = "")
-  private List<byte[]> secondcontract = null;
-
-  @ApiModelProperty(required = true, value = "")
-  private Long serviceclassid = null;
-
-  @ApiModelProperty(value = "")
-  private String serviceclassname = null;
-
-  @ApiModelProperty(required = true, value = "")
-  private String servicename = null;
-
-  @ApiModelProperty(value = "")
-  private List<byte[]> thirdcontract = null;
- /**
-   * Get attributes
-   * @return attributes
-  **/
-  @JsonProperty("attributes")
-  public List<AttributeVO> getAttributes() {
-    return attributes;
-  }
-
-  public void setAttributes(List<AttributeVO> attributes) {
-    this.attributes = attributes;
-  }
-
-  public Service attributes(List<AttributeVO> attributes) {
-    this.attributes = attributes;
-    return this;
-  }
-
-  public Service addAttributesItem(AttributeVO attributesItem) {
-    this.attributes.add(attributesItem);
-    return this;
-  }
-
- /**
-   * Get createdDate
-   * @return createdDate
-  **/
-  @JsonProperty("createdDate")
-  public Date getCreatedDate() {
-    return createdDate;
-  }
-
-  public void setCreatedDate(Date createdDate) {
-    this.createdDate = createdDate;
-  }
-
-  public Service createdDate(Date createdDate) {
-    this.createdDate = createdDate;
-    return this;
-  }
-
- /**
-   * Get deleteddate
-   * @return deleteddate
-  **/
-  @JsonProperty("deleteddate")
-  public Date getDeleteddate() {
-    return deleteddate;
-  }
-
-  public void setDeleteddate(Date deleteddate) {
-    this.deleteddate = deleteddate;
-  }
-
-  public Service deleteddate(Date deleteddate) {
-    this.deleteddate = deleteddate;
-    return this;
-  }
-
- /**
-   * Get firstcontract
-   * @return firstcontract
-  **/
-  @JsonProperty("firstcontract")
-  public List<byte[]> getFirstcontract() {
-    return firstcontract;
-  }
-
-  public void setFirstcontract(List<byte[]> firstcontract) {
-    this.firstcontract = firstcontract;
-  }
-
-  public Service firstcontract(List<byte[]> firstcontract) {
-    this.firstcontract = firstcontract;
-    return this;
-  }
-
-  public Service addFirstcontractItem(byte[] firstcontractItem) {
-    this.firstcontract.add(firstcontractItem);
-    return this;
-  }
-
- /**
-   * Get id
-   * @return id
-  **/
-  @JsonProperty("id")
-  public Long getId() {
-    return id;
-  }
-
-  public void setId(Long id) {
-    this.id = id;
-  }
-
-  public Service id(Long id) {
-    this.id = id;
-    return this;
-  }
-
- /**
-   * Get incidences
-   * @return incidences
-  **/
-  @JsonProperty("incidences")
-  public List<ServiceIncidence> getIncidences() {
-    return incidences;
-  }
-
-  public void setIncidences(List<ServiceIncidence> incidences) {
-    this.incidences = incidences;
-  }
-
-  public Service incidences(List<ServiceIncidence> incidences) {
-    this.incidences = incidences;
-    return this;
-  }
-
-  public Service addIncidencesItem(ServiceIncidence incidencesItem) {
-    this.incidences.add(incidencesItem);
-    return this;
-  }
-
- /**
-   * Get lastModifiedDate
-   * @return lastModifiedDate
-  **/
-  @JsonProperty("lastModifiedDate")
-  public Date getLastModifiedDate() {
-    return lastModifiedDate;
-  }
-
-  public void setLastModifiedDate(Date lastModifiedDate) {
-    this.lastModifiedDate = lastModifiedDate;
-  }
-
-  public Service lastModifiedDate(Date lastModifiedDate) {
-    this.lastModifiedDate = lastModifiedDate;
-    return this;
-  }
-
- /**
-   * Get match
-   * @return match
-  **/
-  @JsonProperty("match")
-  public Double getMatch() {
-    return match;
-  }
-
-  public void setMatch(Double match) {
-    this.match = match;
-  }
-
-  public Service match(Double match) {
-    this.match = match;
-    return this;
-  }
-
- /**
-   * Get matchingattributelist
-   * @return matchingattributelist
-  **/
-  @JsonProperty("matchingattributelist")
-  public List<String> getMatchingattributelist() {
-    return matchingattributelist;
-  }
-
-  public void setMatchingattributelist(List<String> matchingattributelist) {
-    this.matchingattributelist = matchingattributelist;
-  }
-
-  public Service matchingattributelist(List<String> matchingattributelist) {
-    this.matchingattributelist = matchingattributelist;
-    return this;
-  }
-
-  public Service addMatchingattributelistItem(String matchingattributelistItem) {
-    this.matchingattributelist.add(matchingattributelistItem);
-    return this;
-  }
-
- /**
-   * Get secondcontract
-   * @return secondcontract
-  **/
-  @JsonProperty("secondcontract")
-  public List<byte[]> getSecondcontract() {
-    return secondcontract;
-  }
-
-  public void setSecondcontract(List<byte[]> secondcontract) {
-    this.secondcontract = secondcontract;
-  }
-
-  public Service secondcontract(List<byte[]> secondcontract) {
-    this.secondcontract = secondcontract;
-    return this;
-  }
-
-  public Service addSecondcontractItem(byte[] secondcontractItem) {
-    this.secondcontract.add(secondcontractItem);
-    return this;
-  }
-
- /**
-   * Get serviceclassid
-   * @return serviceclassid
-  **/
-  @JsonProperty("serviceclassid")
-  public Long getServiceclassid() {
-    return serviceclassid;
-  }
-
-  public void setServiceclassid(Long serviceclassid) {
-    this.serviceclassid = serviceclassid;
-  }
-
-  public Service serviceclassid(Long serviceclassid) {
-    this.serviceclassid = serviceclassid;
-    return this;
-  }
-
- /**
-   * Get serviceclassname
-   * @return serviceclassname
-  **/
-  @JsonProperty("serviceclassname")
-  public String getServiceclassname() {
-    return serviceclassname;
-  }
-
-  public void setServiceclassname(String serviceclassname) {
-    this.serviceclassname = serviceclassname;
-  }
-
-  public Service serviceclassname(String serviceclassname) {
-    this.serviceclassname = serviceclassname;
-    return this;
-  }
-
- /**
-   * Get servicename
-   * @return servicename
-  **/
-  @JsonProperty("servicename")
-  public String getServicename() {
-    return servicename;
-  }
-
-  public void setServicename(String servicename) {
-    this.servicename = servicename;
-  }
-
-  public Service servicename(String servicename) {
-    this.servicename = servicename;
-    return this;
-  }
-
- /**
-   * Get thirdcontract
-   * @return thirdcontract
-  **/
-  @JsonProperty("thirdcontract")
-  public List<byte[]> getThirdcontract() {
-    return thirdcontract;
-  }
-
-  public void setThirdcontract(List<byte[]> thirdcontract) {
-    this.thirdcontract = thirdcontract;
-  }
-
-  public Service thirdcontract(List<byte[]> thirdcontract) {
-    this.thirdcontract = thirdcontract;
-    return this;
-  }
-
-  public Service addThirdcontractItem(byte[] thirdcontractItem) {
-    this.thirdcontract.add(thirdcontractItem);
-    return this;
-  }
-
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("class Service {\n");
-    
-    sb.append("    attributes: ").append(toIndentedString(attributes)).append("\n");
-    sb.append("    createdDate: ").append(toIndentedString(createdDate)).append("\n");
-    sb.append("    deleteddate: ").append(toIndentedString(deleteddate)).append("\n");
-    sb.append("    firstcontract: ").append(toIndentedString(firstcontract)).append("\n");
-    sb.append("    id: ").append(toIndentedString(id)).append("\n");
-    sb.append("    incidences: ").append(toIndentedString(incidences)).append("\n");
-    sb.append("    lastModifiedDate: ").append(toIndentedString(lastModifiedDate)).append("\n");
-    sb.append("    match: ").append(toIndentedString(match)).append("\n");
-    sb.append("    matchingattributelist: ").append(toIndentedString(matchingattributelist)).append("\n");
-    sb.append("    secondcontract: ").append(toIndentedString(secondcontract)).append("\n");
-    sb.append("    serviceclassid: ").append(toIndentedString(serviceclassid)).append("\n");
-    sb.append("    serviceclassname: ").append(toIndentedString(serviceclassname)).append("\n");
-    sb.append("    servicename: ").append(toIndentedString(servicename)).append("\n");
-    sb.append("    thirdcontract: ").append(toIndentedString(thirdcontract)).append("\n");
-    sb.append("}");
-    return sb.toString();
-  }
-
-  /**
-   * Convert the given object to string with each line indented by 4 spaces
-   * (except the first line).
-   */
-  private static String toIndentedString(java.lang.Object o) {
-    if (o == null) {
-      return "null";
-    }
-    return o.toString().replace("\n", "\n    ");
-  }
-}
-
diff --git a/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/model/ServiceAttributeType.java b/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/model/ServiceAttributeType.java
deleted file mode 100644
index 4d19c28bf8f27d73ed28feadfa0b484d4e4c7785..0000000000000000000000000000000000000000
--- a/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/model/ServiceAttributeType.java
+++ /dev/null
@@ -1,389 +0,0 @@
-package eu.decideh2020.acsmi.client.model;
-
-import java.util.Date;
-
-import io.swagger.annotations.ApiModelProperty;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlType;
-import javax.xml.bind.annotation.XmlEnum;
-import javax.xml.bind.annotation.XmlEnumValue;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public class ServiceAttributeType  {
-  
-  @ApiModelProperty(value = "")
-  private String checklistevalrule = null;
-
-  @ApiModelProperty(value = "")
-  private Long childid = null;
-
-  @ApiModelProperty(value = "")
-  private Date createdDate = null;
-
-  @ApiModelProperty(value = "")
-  private Date deleteddate = null;
-
-  @ApiModelProperty(value = "")
-  private Long id = null;
-
-  @ApiModelProperty(required = true, value = "")
-  private Boolean ischecklist = null;
-
-  @ApiModelProperty(required = true, value = "")
-  private Boolean iscommon = null;
-
-  @ApiModelProperty(required = true, value = "")
-  private Boolean isenumeration = null;
-
-  @ApiModelProperty(required = true, value = "")
-  private Boolean isfunctionalrequirement = null;
-
-  @ApiModelProperty(value = "")
-  private Date lastModifiedDate = null;
-
-  @ApiModelProperty(required = true, value = "")
-  private String name = null;
-
-  @ApiModelProperty(value = "")
-  private String nfrname = null;
-
-  @ApiModelProperty(value = "")
-  private Long parentid = null;
-
-  @ApiModelProperty(value = "")
-  private String unitfactor = null;
-
-  @ApiModelProperty(value = "")
-  private String unitrule = null;
-
-  @ApiModelProperty(value = "")
-  private String units = null;
- /**
-   * Get checklistevalrule
-   * @return checklistevalrule
-  **/
-  @JsonProperty("checklistevalrule")
-  public String getChecklistevalrule() {
-    return checklistevalrule;
-  }
-
-  public void setChecklistevalrule(String checklistevalrule) {
-    this.checklistevalrule = checklistevalrule;
-  }
-
-  public ServiceAttributeType checklistevalrule(String checklistevalrule) {
-    this.checklistevalrule = checklistevalrule;
-    return this;
-  }
-
- /**
-   * Get childid
-   * @return childid
-  **/
-  @JsonProperty("childid")
-  public Long getChildid() {
-    return childid;
-  }
-
-  public void setChildid(Long childid) {
-    this.childid = childid;
-  }
-
-  public ServiceAttributeType childid(Long childid) {
-    this.childid = childid;
-    return this;
-  }
-
- /**
-   * Get createdDate
-   * @return createdDate
-  **/
-  @JsonProperty("createdDate")
-  public Date getCreatedDate() {
-    return createdDate;
-  }
-
-  public void setCreatedDate(Date createdDate) {
-    this.createdDate = createdDate;
-  }
-
-  public ServiceAttributeType createdDate(Date createdDate) {
-    this.createdDate = createdDate;
-    return this;
-  }
-
- /**
-   * Get deleteddate
-   * @return deleteddate
-  **/
-  @JsonProperty("deleteddate")
-  public Date getDeleteddate() {
-    return deleteddate;
-  }
-
-  public void setDeleteddate(Date deleteddate) {
-    this.deleteddate = deleteddate;
-  }
-
-  public ServiceAttributeType deleteddate(Date deleteddate) {
-    this.deleteddate = deleteddate;
-    return this;
-  }
-
- /**
-   * Get id
-   * @return id
-  **/
-  @JsonProperty("id")
-  public Long getId() {
-    return id;
-  }
-
-  public void setId(Long id) {
-    this.id = id;
-  }
-
-  public ServiceAttributeType id(Long id) {
-    this.id = id;
-    return this;
-  }
-
- /**
-   * Get ischecklist
-   * @return ischecklist
-  **/
-  @JsonProperty("ischecklist")
-  public Boolean isIschecklist() {
-    return ischecklist;
-  }
-
-  public void setIschecklist(Boolean ischecklist) {
-    this.ischecklist = ischecklist;
-  }
-
-  public ServiceAttributeType ischecklist(Boolean ischecklist) {
-    this.ischecklist = ischecklist;
-    return this;
-  }
-
- /**
-   * Get iscommon
-   * @return iscommon
-  **/
-  @JsonProperty("iscommon")
-  public Boolean isIscommon() {
-    return iscommon;
-  }
-
-  public void setIscommon(Boolean iscommon) {
-    this.iscommon = iscommon;
-  }
-
-  public ServiceAttributeType iscommon(Boolean iscommon) {
-    this.iscommon = iscommon;
-    return this;
-  }
-
- /**
-   * Get isenumeration
-   * @return isenumeration
-  **/
-  @JsonProperty("isenumeration")
-  public Boolean isIsenumeration() {
-    return isenumeration;
-  }
-
-  public void setIsenumeration(Boolean isenumeration) {
-    this.isenumeration = isenumeration;
-  }
-
-  public ServiceAttributeType isenumeration(Boolean isenumeration) {
-    this.isenumeration = isenumeration;
-    return this;
-  }
-
- /**
-   * Get isfunctionalrequirement
-   * @return isfunctionalrequirement
-  **/
-  @JsonProperty("isfunctionalrequirement")
-  public Boolean isIsfunctionalrequirement() {
-    return isfunctionalrequirement;
-  }
-
-  public void setIsfunctionalrequirement(Boolean isfunctionalrequirement) {
-    this.isfunctionalrequirement = isfunctionalrequirement;
-  }
-
-  public ServiceAttributeType isfunctionalrequirement(Boolean isfunctionalrequirement) {
-    this.isfunctionalrequirement = isfunctionalrequirement;
-    return this;
-  }
-
- /**
-   * Get lastModifiedDate
-   * @return lastModifiedDate
-  **/
-  @JsonProperty("lastModifiedDate")
-  public Date getLastModifiedDate() {
-    return lastModifiedDate;
-  }
-
-  public void setLastModifiedDate(Date lastModifiedDate) {
-    this.lastModifiedDate = lastModifiedDate;
-  }
-
-  public ServiceAttributeType lastModifiedDate(Date lastModifiedDate) {
-    this.lastModifiedDate = lastModifiedDate;
-    return this;
-  }
-
- /**
-   * Get name
-   * @return name
-  **/
-  @JsonProperty("name")
-  public String getName() {
-    return name;
-  }
-
-  public void setName(String name) {
-    this.name = name;
-  }
-
-  public ServiceAttributeType name(String name) {
-    this.name = name;
-    return this;
-  }
-
- /**
-   * Get nfrname
-   * @return nfrname
-  **/
-  @JsonProperty("nfrname")
-  public String getNfrname() {
-    return nfrname;
-  }
-
-  public void setNfrname(String nfrname) {
-    this.nfrname = nfrname;
-  }
-
-  public ServiceAttributeType nfrname(String nfrname) {
-    this.nfrname = nfrname;
-    return this;
-  }
-
- /**
-   * Get parentid
-   * @return parentid
-  **/
-  @JsonProperty("parentid")
-  public Long getParentid() {
-    return parentid;
-  }
-
-  public void setParentid(Long parentid) {
-    this.parentid = parentid;
-  }
-
-  public ServiceAttributeType parentid(Long parentid) {
-    this.parentid = parentid;
-    return this;
-  }
-
- /**
-   * Get unitfactor
-   * @return unitfactor
-  **/
-  @JsonProperty("unitfactor")
-  public String getUnitfactor() {
-    return unitfactor;
-  }
-
-  public void setUnitfactor(String unitfactor) {
-    this.unitfactor = unitfactor;
-  }
-
-  public ServiceAttributeType unitfactor(String unitfactor) {
-    this.unitfactor = unitfactor;
-    return this;
-  }
-
- /**
-   * Get unitrule
-   * @return unitrule
-  **/
-  @JsonProperty("unitrule")
-  public String getUnitrule() {
-    return unitrule;
-  }
-
-  public void setUnitrule(String unitrule) {
-    this.unitrule = unitrule;
-  }
-
-  public ServiceAttributeType unitrule(String unitrule) {
-    this.unitrule = unitrule;
-    return this;
-  }
-
- /**
-   * Get units
-   * @return units
-  **/
-  @JsonProperty("units")
-  public String getUnits() {
-    return units;
-  }
-
-  public void setUnits(String units) {
-    this.units = units;
-  }
-
-  public ServiceAttributeType units(String units) {
-    this.units = units;
-    return this;
-  }
-
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("class ServiceAttributeType {\n");
-    
-    sb.append("    checklistevalrule: ").append(toIndentedString(checklistevalrule)).append("\n");
-    sb.append("    childid: ").append(toIndentedString(childid)).append("\n");
-    sb.append("    createdDate: ").append(toIndentedString(createdDate)).append("\n");
-    sb.append("    deleteddate: ").append(toIndentedString(deleteddate)).append("\n");
-    sb.append("    id: ").append(toIndentedString(id)).append("\n");
-    sb.append("    ischecklist: ").append(toIndentedString(ischecklist)).append("\n");
-    sb.append("    iscommon: ").append(toIndentedString(iscommon)).append("\n");
-    sb.append("    isenumeration: ").append(toIndentedString(isenumeration)).append("\n");
-    sb.append("    isfunctionalrequirement: ").append(toIndentedString(isfunctionalrequirement)).append("\n");
-    sb.append("    lastModifiedDate: ").append(toIndentedString(lastModifiedDate)).append("\n");
-    sb.append("    name: ").append(toIndentedString(name)).append("\n");
-    sb.append("    nfrname: ").append(toIndentedString(nfrname)).append("\n");
-    sb.append("    parentid: ").append(toIndentedString(parentid)).append("\n");
-    sb.append("    unitfactor: ").append(toIndentedString(unitfactor)).append("\n");
-    sb.append("    unitrule: ").append(toIndentedString(unitrule)).append("\n");
-    sb.append("    units: ").append(toIndentedString(units)).append("\n");
-    sb.append("}");
-    return sb.toString();
-  }
-
-  /**
-   * Convert the given object to string with each line indented by 4 spaces
-   * (except the first line).
-   */
-  private static String toIndentedString(java.lang.Object o) {
-    if (o == null) {
-      return "null";
-    }
-    return o.toString().replace("\n", "\n    ");
-  }
-}
-
diff --git a/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/model/ServiceAttributeValue.java b/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/model/ServiceAttributeValue.java
deleted file mode 100644
index b3580d163bd96d1c7f979bbe23a7e3c895b82008..0000000000000000000000000000000000000000
--- a/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/model/ServiceAttributeValue.java
+++ /dev/null
@@ -1,235 +0,0 @@
-package eu.decideh2020.acsmi.client.model;
-
-import java.util.Date;
-
-import io.swagger.annotations.ApiModelProperty;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlType;
-import javax.xml.bind.annotation.XmlEnum;
-import javax.xml.bind.annotation.XmlEnumValue;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public class ServiceAttributeValue  {
-  
-  @ApiModelProperty(value = "")
-  private String checklistvalue = null;
-
-  @ApiModelProperty(value = "")
-  private Date createdDate = null;
-
-  @ApiModelProperty(value = "")
-  private Date deleteddate = null;
-
-  @ApiModelProperty(value = "")
-  private Long id = null;
-
-  @ApiModelProperty(value = "")
-  private Date lastModifiedDate = null;
-
-  @ApiModelProperty(required = true, value = "")
-  private Long serviceattributetypeid = null;
-
-  @ApiModelProperty(value = "")
-  private String serviceattributevalue = null;
-
-  @ApiModelProperty(required = true, value = "")
-  private Long serviceid = null;
-
-  @ApiModelProperty(value = "")
-  private String unitvalue = null;
- /**
-   * Get checklistvalue
-   * @return checklistvalue
-  **/
-  @JsonProperty("checklistvalue")
-  public String getChecklistvalue() {
-    return checklistvalue;
-  }
-
-  public void setChecklistvalue(String checklistvalue) {
-    this.checklistvalue = checklistvalue;
-  }
-
-  public ServiceAttributeValue checklistvalue(String checklistvalue) {
-    this.checklistvalue = checklistvalue;
-    return this;
-  }
-
- /**
-   * Get createdDate
-   * @return createdDate
-  **/
-  @JsonProperty("createdDate")
-  public Date getCreatedDate() {
-    return createdDate;
-  }
-
-  public void setCreatedDate(Date createdDate) {
-    this.createdDate = createdDate;
-  }
-
-  public ServiceAttributeValue createdDate(Date createdDate) {
-    this.createdDate = createdDate;
-    return this;
-  }
-
- /**
-   * Get deleteddate
-   * @return deleteddate
-  **/
-  @JsonProperty("deleteddate")
-  public Date getDeleteddate() {
-    return deleteddate;
-  }
-
-  public void setDeleteddate(Date deleteddate) {
-    this.deleteddate = deleteddate;
-  }
-
-  public ServiceAttributeValue deleteddate(Date deleteddate) {
-    this.deleteddate = deleteddate;
-    return this;
-  }
-
- /**
-   * Get id
-   * @return id
-  **/
-  @JsonProperty("id")
-  public Long getId() {
-    return id;
-  }
-
-  public void setId(Long id) {
-    this.id = id;
-  }
-
-  public ServiceAttributeValue id(Long id) {
-    this.id = id;
-    return this;
-  }
-
- /**
-   * Get lastModifiedDate
-   * @return lastModifiedDate
-  **/
-  @JsonProperty("lastModifiedDate")
-  public Date getLastModifiedDate() {
-    return lastModifiedDate;
-  }
-
-  public void setLastModifiedDate(Date lastModifiedDate) {
-    this.lastModifiedDate = lastModifiedDate;
-  }
-
-  public ServiceAttributeValue lastModifiedDate(Date lastModifiedDate) {
-    this.lastModifiedDate = lastModifiedDate;
-    return this;
-  }
-
- /**
-   * Get serviceattributetypeid
-   * @return serviceattributetypeid
-  **/
-  @JsonProperty("serviceattributetypeid")
-  public Long getServiceattributetypeid() {
-    return serviceattributetypeid;
-  }
-
-  public void setServiceattributetypeid(Long serviceattributetypeid) {
-    this.serviceattributetypeid = serviceattributetypeid;
-  }
-
-  public ServiceAttributeValue serviceattributetypeid(Long serviceattributetypeid) {
-    this.serviceattributetypeid = serviceattributetypeid;
-    return this;
-  }
-
- /**
-   * Get serviceattributevalue
-   * @return serviceattributevalue
-  **/
-  @JsonProperty("serviceattributevalue")
-  public String getServiceattributevalue() {
-    return serviceattributevalue;
-  }
-
-  public void setServiceattributevalue(String serviceattributevalue) {
-    this.serviceattributevalue = serviceattributevalue;
-  }
-
-  public ServiceAttributeValue serviceattributevalue(String serviceattributevalue) {
-    this.serviceattributevalue = serviceattributevalue;
-    return this;
-  }
-
- /**
-   * Get serviceid
-   * @return serviceid
-  **/
-  @JsonProperty("serviceid")
-  public Long getServiceid() {
-    return serviceid;
-  }
-
-  public void setServiceid(Long serviceid) {
-    this.serviceid = serviceid;
-  }
-
-  public ServiceAttributeValue serviceid(Long serviceid) {
-    this.serviceid = serviceid;
-    return this;
-  }
-
- /**
-   * Get unitvalue
-   * @return unitvalue
-  **/
-  @JsonProperty("unitvalue")
-  public String getUnitvalue() {
-    return unitvalue;
-  }
-
-  public void setUnitvalue(String unitvalue) {
-    this.unitvalue = unitvalue;
-  }
-
-  public ServiceAttributeValue unitvalue(String unitvalue) {
-    this.unitvalue = unitvalue;
-    return this;
-  }
-
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("class ServiceAttributeValue {\n");
-    
-    sb.append("    checklistvalue: ").append(toIndentedString(checklistvalue)).append("\n");
-    sb.append("    createdDate: ").append(toIndentedString(createdDate)).append("\n");
-    sb.append("    deleteddate: ").append(toIndentedString(deleteddate)).append("\n");
-    sb.append("    id: ").append(toIndentedString(id)).append("\n");
-    sb.append("    lastModifiedDate: ").append(toIndentedString(lastModifiedDate)).append("\n");
-    sb.append("    serviceattributetypeid: ").append(toIndentedString(serviceattributetypeid)).append("\n");
-    sb.append("    serviceattributevalue: ").append(toIndentedString(serviceattributevalue)).append("\n");
-    sb.append("    serviceid: ").append(toIndentedString(serviceid)).append("\n");
-    sb.append("    unitvalue: ").append(toIndentedString(unitvalue)).append("\n");
-    sb.append("}");
-    return sb.toString();
-  }
-
-  /**
-   * Convert the given object to string with each line indented by 4 spaces
-   * (except the first line).
-   */
-  private static String toIndentedString(java.lang.Object o) {
-    if (o == null) {
-      return "null";
-    }
-    return o.toString().replace("\n", "\n    ");
-  }
-}
-
diff --git a/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/model/ServiceClass.java b/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/model/ServiceClass.java
deleted file mode 100644
index 1c247c3d261df0d54647b52f93fc4266bd1ab8f7..0000000000000000000000000000000000000000
--- a/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/model/ServiceClass.java
+++ /dev/null
@@ -1,232 +0,0 @@
-package eu.decideh2020.acsmi.client.model;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-
-import io.swagger.annotations.ApiModelProperty;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlType;
-import javax.xml.bind.annotation.XmlEnum;
-import javax.xml.bind.annotation.XmlEnumValue;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-import eu.decideh2020.acsmi.client.model.AttributeVO;
-
-public class ServiceClass  {
-  
-  @ApiModelProperty(value = "")
-  private List<AttributeVO> commonattributes = null;
-
-  @ApiModelProperty(value = "")
-  private Date createdDate = null;
-
-  @ApiModelProperty(value = "")
-  private Date deleteddate = null;
-
-  @ApiModelProperty(value = "")
-  private List<AttributeVO> functionalattributes = null;
-
-  @ApiModelProperty(value = "")
-  private Long id = null;
-
-  @ApiModelProperty(value = "")
-  private Date lastModifiedDate = null;
-
-  @ApiModelProperty(value = "")
-  private List<AttributeVO> nonfunctionalattributes = null;
-
-  @ApiModelProperty(required = true, value = "")
-  private String serviceclassname = null;
- /**
-   * Get commonattributes
-   * @return commonattributes
-  **/
-  @JsonProperty("commonattributes")
-  public List<AttributeVO> getCommonattributes() {
-    return commonattributes;
-  }
-
-  public void setCommonattributes(List<AttributeVO> commonattributes) {
-    this.commonattributes = commonattributes;
-  }
-
-  public ServiceClass commonattributes(List<AttributeVO> commonattributes) {
-    this.commonattributes = commonattributes;
-    return this;
-  }
-
-  public ServiceClass addCommonattributesItem(AttributeVO commonattributesItem) {
-    this.commonattributes.add(commonattributesItem);
-    return this;
-  }
-
- /**
-   * Get createdDate
-   * @return createdDate
-  **/
-  @JsonProperty("createdDate")
-  public Date getCreatedDate() {
-    return createdDate;
-  }
-
-  public void setCreatedDate(Date createdDate) {
-    this.createdDate = createdDate;
-  }
-
-  public ServiceClass createdDate(Date createdDate) {
-    this.createdDate = createdDate;
-    return this;
-  }
-
- /**
-   * Get deleteddate
-   * @return deleteddate
-  **/
-  @JsonProperty("deleteddate")
-  public Date getDeleteddate() {
-    return deleteddate;
-  }
-
-  public void setDeleteddate(Date deleteddate) {
-    this.deleteddate = deleteddate;
-  }
-
-  public ServiceClass deleteddate(Date deleteddate) {
-    this.deleteddate = deleteddate;
-    return this;
-  }
-
- /**
-   * Get functionalattributes
-   * @return functionalattributes
-  **/
-  @JsonProperty("functionalattributes")
-  public List<AttributeVO> getFunctionalattributes() {
-    return functionalattributes;
-  }
-
-  public void setFunctionalattributes(List<AttributeVO> functionalattributes) {
-    this.functionalattributes = functionalattributes;
-  }
-
-  public ServiceClass functionalattributes(List<AttributeVO> functionalattributes) {
-    this.functionalattributes = functionalattributes;
-    return this;
-  }
-
-  public ServiceClass addFunctionalattributesItem(AttributeVO functionalattributesItem) {
-    this.functionalattributes.add(functionalattributesItem);
-    return this;
-  }
-
- /**
-   * Get id
-   * @return id
-  **/
-  @JsonProperty("id")
-  public Long getId() {
-    return id;
-  }
-
-  public void setId(Long id) {
-    this.id = id;
-  }
-
-  public ServiceClass id(Long id) {
-    this.id = id;
-    return this;
-  }
-
- /**
-   * Get lastModifiedDate
-   * @return lastModifiedDate
-  **/
-  @JsonProperty("lastModifiedDate")
-  public Date getLastModifiedDate() {
-    return lastModifiedDate;
-  }
-
-  public void setLastModifiedDate(Date lastModifiedDate) {
-    this.lastModifiedDate = lastModifiedDate;
-  }
-
-  public ServiceClass lastModifiedDate(Date lastModifiedDate) {
-    this.lastModifiedDate = lastModifiedDate;
-    return this;
-  }
-
- /**
-   * Get nonfunctionalattributes
-   * @return nonfunctionalattributes
-  **/
-  @JsonProperty("nonfunctionalattributes")
-  public List<AttributeVO> getNonfunctionalattributes() {
-    return nonfunctionalattributes;
-  }
-
-  public void setNonfunctionalattributes(List<AttributeVO> nonfunctionalattributes) {
-    this.nonfunctionalattributes = nonfunctionalattributes;
-  }
-
-  public ServiceClass nonfunctionalattributes(List<AttributeVO> nonfunctionalattributes) {
-    this.nonfunctionalattributes = nonfunctionalattributes;
-    return this;
-  }
-
-  public ServiceClass addNonfunctionalattributesItem(AttributeVO nonfunctionalattributesItem) {
-    this.nonfunctionalattributes.add(nonfunctionalattributesItem);
-    return this;
-  }
-
- /**
-   * Get serviceclassname
-   * @return serviceclassname
-  **/
-  @JsonProperty("serviceclassname")
-  public String getServiceclassname() {
-    return serviceclassname;
-  }
-
-  public void setServiceclassname(String serviceclassname) {
-    this.serviceclassname = serviceclassname;
-  }
-
-  public ServiceClass serviceclassname(String serviceclassname) {
-    this.serviceclassname = serviceclassname;
-    return this;
-  }
-
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("class ServiceClass {\n");
-    
-    sb.append("    commonattributes: ").append(toIndentedString(commonattributes)).append("\n");
-    sb.append("    createdDate: ").append(toIndentedString(createdDate)).append("\n");
-    sb.append("    deleteddate: ").append(toIndentedString(deleteddate)).append("\n");
-    sb.append("    functionalattributes: ").append(toIndentedString(functionalattributes)).append("\n");
-    sb.append("    id: ").append(toIndentedString(id)).append("\n");
-    sb.append("    lastModifiedDate: ").append(toIndentedString(lastModifiedDate)).append("\n");
-    sb.append("    nonfunctionalattributes: ").append(toIndentedString(nonfunctionalattributes)).append("\n");
-    sb.append("    serviceclassname: ").append(toIndentedString(serviceclassname)).append("\n");
-    sb.append("}");
-    return sb.toString();
-  }
-
-  /**
-   * Convert the given object to string with each line indented by 4 spaces
-   * (except the first line).
-   */
-  private static String toIndentedString(java.lang.Object o) {
-    if (o == null) {
-      return "null";
-    }
-    return o.toString().replace("\n", "\n    ");
-  }
-}
-
diff --git a/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/model/ServiceClassAttribute.java b/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/model/ServiceClassAttribute.java
deleted file mode 100644
index 47dd786d1b2c86f4365f2fdd1dcfa905db12c98e..0000000000000000000000000000000000000000
--- a/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/model/ServiceClassAttribute.java
+++ /dev/null
@@ -1,345 +0,0 @@
-package eu.decideh2020.acsmi.client.model;
-
-import java.util.Date;
-
-import io.swagger.annotations.ApiModelProperty;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlType;
-import javax.xml.bind.annotation.XmlEnum;
-import javax.xml.bind.annotation.XmlEnumValue;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public class ServiceClassAttribute  {
-  
-  @ApiModelProperty(value = "")
-  private Long childid = null;
-
-  @ApiModelProperty(value = "")
-  private Date createdDate = null;
-
-  @ApiModelProperty(value = "")
-  private Date deleteddate = null;
-
-  @ApiModelProperty(value = "")
-  private Long id = null;
-
-  @ApiModelProperty(value = "")
-  private Boolean ischecklist = null;
-
-  @ApiModelProperty(value = "")
-  private Boolean isenumeration = null;
-
-  @ApiModelProperty(value = "")
-  private Boolean isfunctionalrequirement = null;
-
-  @ApiModelProperty(required = true, value = "")
-  private Boolean ismandatory = null;
-
-  @ApiModelProperty(value = "")
-  private Date lastModifiedDate = null;
-
-  @ApiModelProperty(value = "")
-  private Long parentid = null;
-
-  @ApiModelProperty(required = true, value = "")
-  private Long serviceattributetypeid = null;
-
-  @ApiModelProperty(value = "")
-  private String serviceattributetypename = null;
-
-  @ApiModelProperty(required = true, value = "")
-  private Long serviceclassid = null;
-
-  @ApiModelProperty(required = true, value = "")
-  private Integer weight = null;
- /**
-   * Get childid
-   * @return childid
-  **/
-  @JsonProperty("childid")
-  public Long getChildid() {
-    return childid;
-  }
-
-  public void setChildid(Long childid) {
-    this.childid = childid;
-  }
-
-  public ServiceClassAttribute childid(Long childid) {
-    this.childid = childid;
-    return this;
-  }
-
- /**
-   * Get createdDate
-   * @return createdDate
-  **/
-  @JsonProperty("createdDate")
-  public Date getCreatedDate() {
-    return createdDate;
-  }
-
-  public void setCreatedDate(Date createdDate) {
-    this.createdDate = createdDate;
-  }
-
-  public ServiceClassAttribute createdDate(Date createdDate) {
-    this.createdDate = createdDate;
-    return this;
-  }
-
- /**
-   * Get deleteddate
-   * @return deleteddate
-  **/
-  @JsonProperty("deleteddate")
-  public Date getDeleteddate() {
-    return deleteddate;
-  }
-
-  public void setDeleteddate(Date deleteddate) {
-    this.deleteddate = deleteddate;
-  }
-
-  public ServiceClassAttribute deleteddate(Date deleteddate) {
-    this.deleteddate = deleteddate;
-    return this;
-  }
-
- /**
-   * Get id
-   * @return id
-  **/
-  @JsonProperty("id")
-  public Long getId() {
-    return id;
-  }
-
-  public void setId(Long id) {
-    this.id = id;
-  }
-
-  public ServiceClassAttribute id(Long id) {
-    this.id = id;
-    return this;
-  }
-
- /**
-   * Get ischecklist
-   * @return ischecklist
-  **/
-  @JsonProperty("ischecklist")
-  public Boolean isIschecklist() {
-    return ischecklist;
-  }
-
-  public void setIschecklist(Boolean ischecklist) {
-    this.ischecklist = ischecklist;
-  }
-
-  public ServiceClassAttribute ischecklist(Boolean ischecklist) {
-    this.ischecklist = ischecklist;
-    return this;
-  }
-
- /**
-   * Get isenumeration
-   * @return isenumeration
-  **/
-  @JsonProperty("isenumeration")
-  public Boolean isIsenumeration() {
-    return isenumeration;
-  }
-
-  public void setIsenumeration(Boolean isenumeration) {
-    this.isenumeration = isenumeration;
-  }
-
-  public ServiceClassAttribute isenumeration(Boolean isenumeration) {
-    this.isenumeration = isenumeration;
-    return this;
-  }
-
- /**
-   * Get isfunctionalrequirement
-   * @return isfunctionalrequirement
-  **/
-  @JsonProperty("isfunctionalrequirement")
-  public Boolean isIsfunctionalrequirement() {
-    return isfunctionalrequirement;
-  }
-
-  public void setIsfunctionalrequirement(Boolean isfunctionalrequirement) {
-    this.isfunctionalrequirement = isfunctionalrequirement;
-  }
-
-  public ServiceClassAttribute isfunctionalrequirement(Boolean isfunctionalrequirement) {
-    this.isfunctionalrequirement = isfunctionalrequirement;
-    return this;
-  }
-
- /**
-   * Get ismandatory
-   * @return ismandatory
-  **/
-  @JsonProperty("ismandatory")
-  public Boolean isIsmandatory() {
-    return ismandatory;
-  }
-
-  public void setIsmandatory(Boolean ismandatory) {
-    this.ismandatory = ismandatory;
-  }
-
-  public ServiceClassAttribute ismandatory(Boolean ismandatory) {
-    this.ismandatory = ismandatory;
-    return this;
-  }
-
- /**
-   * Get lastModifiedDate
-   * @return lastModifiedDate
-  **/
-  @JsonProperty("lastModifiedDate")
-  public Date getLastModifiedDate() {
-    return lastModifiedDate;
-  }
-
-  public void setLastModifiedDate(Date lastModifiedDate) {
-    this.lastModifiedDate = lastModifiedDate;
-  }
-
-  public ServiceClassAttribute lastModifiedDate(Date lastModifiedDate) {
-    this.lastModifiedDate = lastModifiedDate;
-    return this;
-  }
-
- /**
-   * Get parentid
-   * @return parentid
-  **/
-  @JsonProperty("parentid")
-  public Long getParentid() {
-    return parentid;
-  }
-
-  public void setParentid(Long parentid) {
-    this.parentid = parentid;
-  }
-
-  public ServiceClassAttribute parentid(Long parentid) {
-    this.parentid = parentid;
-    return this;
-  }
-
- /**
-   * Get serviceattributetypeid
-   * @return serviceattributetypeid
-  **/
-  @JsonProperty("serviceattributetypeid")
-  public Long getServiceattributetypeid() {
-    return serviceattributetypeid;
-  }
-
-  public void setServiceattributetypeid(Long serviceattributetypeid) {
-    this.serviceattributetypeid = serviceattributetypeid;
-  }
-
-  public ServiceClassAttribute serviceattributetypeid(Long serviceattributetypeid) {
-    this.serviceattributetypeid = serviceattributetypeid;
-    return this;
-  }
-
- /**
-   * Get serviceattributetypename
-   * @return serviceattributetypename
-  **/
-  @JsonProperty("serviceattributetypename")
-  public String getServiceattributetypename() {
-    return serviceattributetypename;
-  }
-
-  public void setServiceattributetypename(String serviceattributetypename) {
-    this.serviceattributetypename = serviceattributetypename;
-  }
-
-  public ServiceClassAttribute serviceattributetypename(String serviceattributetypename) {
-    this.serviceattributetypename = serviceattributetypename;
-    return this;
-  }
-
- /**
-   * Get serviceclassid
-   * @return serviceclassid
-  **/
-  @JsonProperty("serviceclassid")
-  public Long getServiceclassid() {
-    return serviceclassid;
-  }
-
-  public void setServiceclassid(Long serviceclassid) {
-    this.serviceclassid = serviceclassid;
-  }
-
-  public ServiceClassAttribute serviceclassid(Long serviceclassid) {
-    this.serviceclassid = serviceclassid;
-    return this;
-  }
-
- /**
-   * Get weight
-   * @return weight
-  **/
-  @JsonProperty("weight")
-  public Integer getWeight() {
-    return weight;
-  }
-
-  public void setWeight(Integer weight) {
-    this.weight = weight;
-  }
-
-  public ServiceClassAttribute weight(Integer weight) {
-    this.weight = weight;
-    return this;
-  }
-
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("class ServiceClassAttribute {\n");
-    
-    sb.append("    childid: ").append(toIndentedString(childid)).append("\n");
-    sb.append("    createdDate: ").append(toIndentedString(createdDate)).append("\n");
-    sb.append("    deleteddate: ").append(toIndentedString(deleteddate)).append("\n");
-    sb.append("    id: ").append(toIndentedString(id)).append("\n");
-    sb.append("    ischecklist: ").append(toIndentedString(ischecklist)).append("\n");
-    sb.append("    isenumeration: ").append(toIndentedString(isenumeration)).append("\n");
-    sb.append("    isfunctionalrequirement: ").append(toIndentedString(isfunctionalrequirement)).append("\n");
-    sb.append("    ismandatory: ").append(toIndentedString(ismandatory)).append("\n");
-    sb.append("    lastModifiedDate: ").append(toIndentedString(lastModifiedDate)).append("\n");
-    sb.append("    parentid: ").append(toIndentedString(parentid)).append("\n");
-    sb.append("    serviceattributetypeid: ").append(toIndentedString(serviceattributetypeid)).append("\n");
-    sb.append("    serviceattributetypename: ").append(toIndentedString(serviceattributetypename)).append("\n");
-    sb.append("    serviceclassid: ").append(toIndentedString(serviceclassid)).append("\n");
-    sb.append("    weight: ").append(toIndentedString(weight)).append("\n");
-    sb.append("}");
-    return sb.toString();
-  }
-
-  /**
-   * Convert the given object to string with each line indented by 4 spaces
-   * (except the first line).
-   */
-  private static String toIndentedString(java.lang.Object o) {
-    if (o == null) {
-      return "null";
-    }
-    return o.toString().replace("\n", "\n    ");
-  }
-}
-
diff --git a/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/model/ServiceDevOpsInfoVO.java b/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/model/ServiceDevOpsInfoVO.java
deleted file mode 100644
index bf006c106c09aeae553be2100294c7b324defc17..0000000000000000000000000000000000000000
--- a/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/model/ServiceDevOpsInfoVO.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package eu.decideh2020.acsmi.client.model;
-
-
-import io.swagger.annotations.ApiModelProperty;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlType;
-import javax.xml.bind.annotation.XmlEnum;
-import javax.xml.bind.annotation.XmlEnumValue;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public class ServiceDevOpsInfoVO  {
-  
-  @ApiModelProperty(value = "")
-  private Integer numservices = null;
-
-  @ApiModelProperty(value = "")
-  private String providername = null;
-
-  @ApiModelProperty(value = "")
-  private String serviceclassname = null;
- /**
-   * Get numservices
-   * @return numservices
-  **/
-  @JsonProperty("numservices")
-  public Integer getNumservices() {
-    return numservices;
-  }
-
-  public void setNumservices(Integer numservices) {
-    this.numservices = numservices;
-  }
-
-  public ServiceDevOpsInfoVO numservices(Integer numservices) {
-    this.numservices = numservices;
-    return this;
-  }
-
- /**
-   * Get providername
-   * @return providername
-  **/
-  @JsonProperty("providername")
-  public String getProvidername() {
-    return providername;
-  }
-
-  public void setProvidername(String providername) {
-    this.providername = providername;
-  }
-
-  public ServiceDevOpsInfoVO providername(String providername) {
-    this.providername = providername;
-    return this;
-  }
-
- /**
-   * Get serviceclassname
-   * @return serviceclassname
-  **/
-  @JsonProperty("serviceclassname")
-  public String getServiceclassname() {
-    return serviceclassname;
-  }
-
-  public void setServiceclassname(String serviceclassname) {
-    this.serviceclassname = serviceclassname;
-  }
-
-  public ServiceDevOpsInfoVO serviceclassname(String serviceclassname) {
-    this.serviceclassname = serviceclassname;
-    return this;
-  }
-
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("class ServiceDevOpsInfoVO {\n");
-    
-    sb.append("    numservices: ").append(toIndentedString(numservices)).append("\n");
-    sb.append("    providername: ").append(toIndentedString(providername)).append("\n");
-    sb.append("    serviceclassname: ").append(toIndentedString(serviceclassname)).append("\n");
-    sb.append("}");
-    return sb.toString();
-  }
-
-  /**
-   * Convert the given object to string with each line indented by 4 spaces
-   * (except the first line).
-   */
-  private static String toIndentedString(java.lang.Object o) {
-    if (o == null) {
-      return "null";
-    }
-    return o.toString().replace("\n", "\n    ");
-  }
-}
-
diff --git a/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/model/ServiceNFRInfoVO.java b/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/model/ServiceNFRInfoVO.java
deleted file mode 100644
index 80a7c2e2913fb895ffed41ce5bb9209b4d2c957d..0000000000000000000000000000000000000000
--- a/OPTIMUS/ACSmI-client/src/gen/java/eu/decideh2020/acsmi/client/model/ServiceNFRInfoVO.java
+++ /dev/null
@@ -1,168 +0,0 @@
-package eu.decideh2020.acsmi.client.model;
-
-
-import io.swagger.annotations.ApiModelProperty;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlType;
-import javax.xml.bind.annotation.XmlEnum;
-import javax.xml.bind.annotation.XmlEnumValue;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public class ServiceNFRInfoVO  {
-  
-  @ApiModelProperty(value = "")
-  private String nfrmetric = null;
-
-  @ApiModelProperty(value = "")
-  private String nfrname = null;
-
-  @ApiModelProperty(value = "")
-  private String nfrvalue = null;
-
-  @ApiModelProperty(value = "")
-  private String serviceclassname = null;
-
-  @ApiModelProperty(value = "")
-  private Long serviceid = null;
-
-  @ApiModelProperty(value = "")
-  private String servicename = null;
- /**
-   * Get nfrmetric
-   * @return nfrmetric
-  **/
-  @JsonProperty("nfrmetric")
-  public String getNfrmetric() {
-    return nfrmetric;
-  }
-
-  public void setNfrmetric(String nfrmetric) {
-    this.nfrmetric = nfrmetric;
-  }
-
-  public ServiceNFRInfoVO nfrmetric(String nfrmetric) {
-    this.nfrmetric = nfrmetric;
-    return this;
-  }
-
- /**
-   * Get nfrname
-   * @return nfrname
-  **/
-  @JsonProperty("nfrname")
-  public String getNfrname() {
-    return nfrname;
-  }
-
-  public void setNfrname(String nfrname) {
-    this.nfrname = nfrname;
-  }
-
-  public ServiceNFRInfoVO nfrname(String nfrname) {
-    this.nfrname = nfrname;
-    return this;
-  }
-
- /**
-   * Get nfrvalue
-   * @return nfrvalue
-  **/
-  @JsonProperty("nfrvalue")
-  public String getNfrvalue() {
-    return nfrvalue;
-  }
-
-  public void setNfrvalue(String nfrvalue) {
-    this.nfrvalue = nfrvalue;
-  }
-
-  public ServiceNFRInfoVO nfrvalue(String nfrvalue) {
-    this.nfrvalue = nfrvalue;
-    return this;
-  }
-
- /**
-   * Get serviceclassname
-   * @return serviceclassname
-  **/
-  @JsonProperty("serviceclassname")
-  public String getServiceclassname() {
-    return serviceclassname;
-  }
-
-  public void setServiceclassname(String serviceclassname) {
-    this.serviceclassname = serviceclassname;
-  }
-
-  public ServiceNFRInfoVO serviceclassname(String serviceclassname) {
-    this.serviceclassname = serviceclassname;
-    return this;
-  }
-
- /**
-   * Get serviceid
-   * @return serviceid
-  **/
-  @JsonProperty("serviceid")
-  public Long getServiceid() {
-    return serviceid;
-  }
-
-  public void setServiceid(Long serviceid) {
-    this.serviceid = serviceid;
-  }
-
-  public ServiceNFRInfoVO serviceid(Long serviceid) {
-    this.serviceid = serviceid;
-    return this;
-  }
-
- /**
-   * Get servicename
-   * @return servicename
-  **/
-  @JsonProperty("servicename")
-  public String getServicename() {
-    return servicename;
-  }
-
-  public void setServicename(String servicename) {
-    this.servicename = servicename;
-  }
-
-  public ServiceNFRInfoVO servicename(String servicename) {
-    this.servicename = servicename;
-    return this;
-  }
-
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("class ServiceNFRInfoVO {\n");
-    
-    sb.append("    nfrmetric: ").append(toIndentedString(nfrmetric)).append("\n");
-    sb.append("    nfrname: ").append(toIndentedString(nfrname)).append("\n");
-    sb.append("    nfrvalue: ").append(toIndentedString(nfrvalue)).append("\n");
-    sb.append("    serviceclassname: ").append(toIndentedString(serviceclassname)).append("\n");
-    sb.append("    serviceid: ").append(toIndentedString(serviceid)).append("\n");
-    sb.append("    servicename: ").append(toIndentedString(servicename)).append("\n");
-    sb.append("}");
-    return sb.toString();
-  }
-
-  /**
-   * Convert the given object to string with each line indented by 4 spaces
-   * (except the first line).
-   */
-  private static String toIndentedString(java.lang.Object o) {
-    if (o == null) {
-      return "null";
-    }
-    return o.toString().replace("\n", "\n    ");
-  }
-}
-
diff --git a/OPTIMUS/ACSmI-client/target/ACSmI-client-2.0.0.jar b/OPTIMUS/ACSmI-client/target/ACSmI-client-2.0.0.jar
deleted file mode 100644
index e46f94756e638b24413effea3f47f7618b123827..0000000000000000000000000000000000000000
Binary files a/OPTIMUS/ACSmI-client/target/ACSmI-client-2.0.0.jar and /dev/null differ
diff --git a/OPTIMUS/ACSmI-client/target/classes/META-INF/MANIFEST.MF b/OPTIMUS/ACSmI-client/target/classes/META-INF/MANIFEST.MF
deleted file mode 100644
index 204c769a2421d82529aa95dc6fcc15fb30a5f7cf..0000000000000000000000000000000000000000
--- a/OPTIMUS/ACSmI-client/target/classes/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,5 +0,0 @@
-Manifest-Version: 1.0
-Built-By: 106819
-Build-Jdk: 1.8.0_144
-Created-By: Maven Integration for Eclipse
-
diff --git a/OPTIMUS/ACSmI-client/target/classes/META-INF/maven/eu.decideh2020/ACSmI-client/pom.properties b/OPTIMUS/ACSmI-client/target/classes/META-INF/maven/eu.decideh2020/ACSmI-client/pom.properties
deleted file mode 100644
index 2bc6ac029c68566acc022e9a0d6a228e3c8a2504..0000000000000000000000000000000000000000
--- a/OPTIMUS/ACSmI-client/target/classes/META-INF/maven/eu.decideh2020/ACSmI-client/pom.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-#Generated by Maven Integration for Eclipse
-#Thu Nov 22 16:06:07 CET 2018
-version=2.0.0
-groupId=eu.decideh2020
-m2e.projectName=ACSmI-client
-m2e.projectLocation=D\:\\W\\2017-Decide\\workspace\\ACSmIDiscovery\\jaxrs-cxf-client-client
-artifactId=ACSmI-client
diff --git a/OPTIMUS/ACSmI-client/target/classes/META-INF/maven/eu.decideh2020/ACSmI-client/pom.xml b/OPTIMUS/ACSmI-client/target/classes/META-INF/maven/eu.decideh2020/ACSmI-client/pom.xml
deleted file mode 100644
index d18f48c66c83bf95a95fde0e41ffb8449921812b..0000000000000000000000000000000000000000
--- a/OPTIMUS/ACSmI-client/target/classes/META-INF/maven/eu.decideh2020/ACSmI-client/pom.xml
+++ /dev/null
@@ -1,179 +0,0 @@
-<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/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-<!--   <groupId>io.swagger</groupId> -->
-<!--   <artifactId>swagger-jaxrs-client</artifactId> -->
-<!--   <packaging>jar</packaging> -->
-<!--   <name>swagger-jaxrs-client</name> -->
-<!--   <description>ACSmI Services API documentation</description> -->
-<!--   <version>1.0.0</version> -->
-  <groupId>eu.decideh2020</groupId>
-  <artifactId>ACSmI-client</artifactId>
-  <packaging>jar</packaging>
-  <version>2.0.0</version>
-  <build>
-    <sourceDirectory>src/main/java</sourceDirectory>
-    <plugins>
-      <plugin>
-        <artifactId>maven-failsafe-plugin</artifactId>
-        <version>2.6</version>
-        <executions>
-          <execution>
-            <goals>
-              <goal>integration-test</goal>
-              <goal>verify</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-      <!--plugin>
-        <groupId>org.eclipse.jetty</groupId>
-        <artifactId>jetty-maven-plugin</artifactId>
-        <version>${jetty-version}</version>
-        <configuration>
-          <webApp>
-            <contextPath>/</contextPath>
-          </webApp>
-          <webAppSourceDirectory>target/${project.artifactId}-${project.version}</webAppSourceDirectory>
-          <stopPort>8079</stopPort>
-          <stopKey>stopit</stopKey>
-          <httpConnector>
-            <port></port>
-            <idleTimeout>60000</idleTimeout>
-          </httpConnector>
-        </configuration>
-        <executions>
-          <execution>
-            <id>start-jetty</id>
-            <phase>pre-integration-test</phase>
-            <goals>
-              <goal>start</goal>
-            </goals>
-            <configuration>
-              <scanIntervalSeconds>0</scanIntervalSeconds>
-              <daemon>true</daemon>
-            </configuration>
-          </execution>
-          <execution>
-            <id>stop-jetty</id>
-            <phase>post-integration-test</phase>
-            <goals>
-              <goal>stop</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin-->
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>build-helper-maven-plugin</artifactId>
-        <version>1.9.1</version>
-        <executions>
-          <execution>
-            <id>add-source</id>
-            <phase>generate-sources</phase>
-            <goals>
-              <goal>add-source</goal>
-            </goals>
-            <configuration>
-              <sources>
-                <source>src/gen/java</source>
-              </sources>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-  <dependencies>
-    <dependency>
-      <groupId>io.swagger</groupId>
-      <artifactId>swagger-jaxrs</artifactId>
-      <scope>compile</scope>
-      <version>${swagger-core-version}</version>
-    </dependency>
-    <dependency>
-      <groupId>ch.qos.logback</groupId>
-      <artifactId>logback-classic</artifactId>
-      <version>${logback-version}</version>
-      <scope>compile</scope>
-    </dependency>
-    <dependency>
-      <groupId>ch.qos.logback</groupId>
-      <artifactId>logback-core</artifactId>
-      <version>${logback-version}</version>
-      <scope>compile</scope>
-    </dependency>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <version>${junit-version}</version>
-      <scope>test</scope>
-    </dependency>
-    <!-- CXF Client -->
-    <dependency>
-        <groupId>org.apache.cxf</groupId>
-        <artifactId>cxf-rt-rs-client</artifactId>
-        <version>${cxf-version}</version>
-        <scope>test</scope>
-    </dependency>
-    
-     <!-- CXF server -->
-    <dependency>
-        <groupId>org.apache.cxf</groupId>
-        <artifactId>cxf-rt-frontend-jaxrs</artifactId>
-        <version>${cxf-version}</version>
-        <scope>compile</scope>
-    </dependency>
-    <dependency>
-        <groupId>org.apache.cxf</groupId>
-        <artifactId>cxf-rt-rs-service-description</artifactId>
-        <version>${cxf-version}</version>
-        <scope>compile</scope>
-    </dependency>
-    <dependency>
-        <groupId>org.apache.cxf</groupId>
-        <artifactId>cxf-rt-ws-policy</artifactId>
-        <version>${cxf-version}</version>
-        <scope>compile</scope>
-    </dependency>
-    <dependency>
-        <groupId>org.apache.cxf</groupId>
-        <artifactId>cxf-rt-wsdl</artifactId>
-        <version>${cxf-version}</version>
-        <scope>compile</scope>
-    </dependency>
-    <dependency>
-        <groupId>com.fasterxml.jackson.jaxrs</groupId>
-        <artifactId>jackson-jaxrs-json-provider</artifactId>
-        <version>${jackson-jaxrs-version}</version>
-        <scope>compile</scope>
-    </dependency>
-    <dependency>
-       <groupId>com.fasterxml.jackson.datatype</groupId>
-       <artifactId>jackson-datatype-joda</artifactId>
-       <version>${jackson-jaxrs-version}</version>
-       <scope>compile</scope>
-    </dependency>
-  </dependencies>
-  <repositories>
-    <repository>
-      <id>sonatype-snapshots</id>
-      <url>https://oss.sonatype.org/content/repositories/snapshots</url>
-      <snapshots>
-        <enabled>true</enabled>
-      </snapshots>
-    </repository>
-  </repositories>
-  <properties>
-    <java.version>1.7</java.version>
-    <maven.compiler.source>${java.version}</maven.compiler.source>
-    <maven.compiler.target>${java.version}</maven.compiler.target>
-    <swagger-core-version>1.5.15</swagger-core-version>
-    <jetty-version>9.2.9.v20150224</jetty-version>
-    <junit-version>4.12</junit-version>
-    <logback-version>1.1.7</logback-version>
-    <servlet-api-version>2.5</servlet-api-version>
-    <cxf-version>3.1.11</cxf-version>
-    <jackson-jaxrs-version>2.8.9</jackson-jaxrs-version>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-  </properties>
-</project>
diff --git a/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/api/DefinitionResourceApi.class b/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/api/DefinitionResourceApi.class
deleted file mode 100644
index 400de40293c1ee425d99fee0e8f2d6d6bc0b5535..0000000000000000000000000000000000000000
Binary files a/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/api/DefinitionResourceApi.class and /dev/null differ
diff --git a/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/api/ProfileInfoResourceApi.class b/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/api/ProfileInfoResourceApi.class
deleted file mode 100644
index c4113013c9f0dc0ccde2783d0f8d0ab9c3f68f89..0000000000000000000000000000000000000000
Binary files a/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/api/ProfileInfoResourceApi.class and /dev/null differ
diff --git a/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/api/ServiceAttributeTypeResourceApi.class b/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/api/ServiceAttributeTypeResourceApi.class
deleted file mode 100644
index 84efb2181387114a662dfba582bc53de62c04a5e..0000000000000000000000000000000000000000
Binary files a/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/api/ServiceAttributeTypeResourceApi.class and /dev/null differ
diff --git a/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/api/ServiceAttributeValueResourceApi.class b/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/api/ServiceAttributeValueResourceApi.class
deleted file mode 100644
index 6f0d711c978a9a10b1e35c74d3831554dd73c98c..0000000000000000000000000000000000000000
Binary files a/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/api/ServiceAttributeValueResourceApi.class and /dev/null differ
diff --git a/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/api/ServiceClassAttributeResourceApi.class b/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/api/ServiceClassAttributeResourceApi.class
deleted file mode 100644
index 41c95125a75137424fbeb8f88deb35871b24ec5c..0000000000000000000000000000000000000000
Binary files a/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/api/ServiceClassAttributeResourceApi.class and /dev/null differ
diff --git a/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/api/ServiceClassResourceApi.class b/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/api/ServiceClassResourceApi.class
deleted file mode 100644
index 304b3d22d28069b04eb58743c6263047eb7955a2..0000000000000000000000000000000000000000
Binary files a/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/api/ServiceClassResourceApi.class and /dev/null differ
diff --git a/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/api/ServiceIncidenceResourceApi.class b/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/api/ServiceIncidenceResourceApi.class
deleted file mode 100644
index 9735a06809907c61fbeae59edddc8b5f52424215..0000000000000000000000000000000000000000
Binary files a/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/api/ServiceIncidenceResourceApi.class and /dev/null differ
diff --git a/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/api/ServiceResourceApi.class b/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/api/ServiceResourceApi.class
deleted file mode 100644
index 86af599c87b0530242d9c8eae7f5d669e3b9a430..0000000000000000000000000000000000000000
Binary files a/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/api/ServiceResourceApi.class and /dev/null differ
diff --git a/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/model/AttributeVO.class b/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/model/AttributeVO.class
deleted file mode 100644
index 833d53ed017146c43d5dc561723af8fab113aeb7..0000000000000000000000000000000000000000
Binary files a/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/model/AttributeVO.class and /dev/null differ
diff --git a/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/model/Definition.class b/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/model/Definition.class
deleted file mode 100644
index 6e5aaab8a225cb74b94763b6263cd3c121c84821..0000000000000000000000000000000000000000
Binary files a/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/model/Definition.class and /dev/null differ
diff --git a/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/model/ProfileInfoVM.class b/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/model/ProfileInfoVM.class
deleted file mode 100644
index 370caa68b9d13be617b2f9383c68410c5b232ce1..0000000000000000000000000000000000000000
Binary files a/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/model/ProfileInfoVM.class and /dev/null differ
diff --git a/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/model/Service.class b/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/model/Service.class
deleted file mode 100644
index 8a3b2f90e07388c80e521d6fd92cbbd112401ed9..0000000000000000000000000000000000000000
Binary files a/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/model/Service.class and /dev/null differ
diff --git a/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/model/ServiceAttributeType.class b/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/model/ServiceAttributeType.class
deleted file mode 100644
index e642c4289e8f5344572c3be43607b7a91c546e41..0000000000000000000000000000000000000000
Binary files a/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/model/ServiceAttributeType.class and /dev/null differ
diff --git a/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/model/ServiceAttributeValue.class b/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/model/ServiceAttributeValue.class
deleted file mode 100644
index 758868a19a7843a5016f6ad1c49e66ac8aa14b17..0000000000000000000000000000000000000000
Binary files a/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/model/ServiceAttributeValue.class and /dev/null differ
diff --git a/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/model/ServiceClass.class b/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/model/ServiceClass.class
deleted file mode 100644
index d86b533f5a1999e83558ff5dda1c1e0909e0f5ad..0000000000000000000000000000000000000000
Binary files a/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/model/ServiceClass.class and /dev/null differ
diff --git a/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/model/ServiceClassAttribute.class b/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/model/ServiceClassAttribute.class
deleted file mode 100644
index f48744de5ae664ed7e6db9672700ff3721194041..0000000000000000000000000000000000000000
Binary files a/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/model/ServiceClassAttribute.class and /dev/null differ
diff --git a/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/model/ServiceDevOpsInfoVO.class b/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/model/ServiceDevOpsInfoVO.class
deleted file mode 100644
index a96b94ffd30692b19110b2b8d3b53396e0a56a74..0000000000000000000000000000000000000000
Binary files a/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/model/ServiceDevOpsInfoVO.class and /dev/null differ
diff --git a/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/model/ServiceIncidence.class b/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/model/ServiceIncidence.class
deleted file mode 100644
index 6d858751fdad7c1259e4d01d4a4ee8a44312edf7..0000000000000000000000000000000000000000
Binary files a/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/model/ServiceIncidence.class and /dev/null differ
diff --git a/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/model/ServiceNFRInfoVO.class b/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/model/ServiceNFRInfoVO.class
deleted file mode 100644
index 7b345f31f43b2185ee522e7866f2e15735dc68df..0000000000000000000000000000000000000000
Binary files a/OPTIMUS/ACSmI-client/target/classes/eu/decideh2020/acsmi/client/model/ServiceNFRInfoVO.class and /dev/null differ
diff --git a/OPTIMUS/ACSmI-client/target/maven-archiver/pom.properties b/OPTIMUS/ACSmI-client/target/maven-archiver/pom.properties
deleted file mode 100644
index c1a3352716cff11e007c138fb5487b3477fb00ba..0000000000000000000000000000000000000000
--- a/OPTIMUS/ACSmI-client/target/maven-archiver/pom.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-#Generated by Maven
-#Mon Nov 12 16:46:40 CET 2018
-version=2.0.0
-groupId=eu.decideh2020
-artifactId=ACSmI-client
diff --git a/OPTIMUS/ACSmI-client/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/OPTIMUS/ACSmI-client/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
deleted file mode 100644
index 9db8b3ecc5792ba1c599732aa86a6b05bee62d4f..0000000000000000000000000000000000000000
--- a/OPTIMUS/ACSmI-client/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
+++ /dev/null
@@ -1,19 +0,0 @@
-eu\decideh2020\acsmi\client\model\ServiceDevOpsInfoVO.class
-eu\decideh2020\acsmi\client\api\DefinitionResourceApi.class
-eu\decideh2020\acsmi\client\model\ServiceIncidence.class
-eu\decideh2020\acsmi\client\api\ServiceClassResourceApi.class
-eu\decideh2020\acsmi\client\api\ServiceAttributeTypeResourceApi.class
-eu\decideh2020\acsmi\client\api\ServiceResourceApi.class
-eu\decideh2020\acsmi\client\model\Service.class
-eu\decideh2020\acsmi\client\model\AttributeVO.class
-eu\decideh2020\acsmi\client\model\ServiceAttributeType.class
-eu\decideh2020\acsmi\client\model\Definition.class
-eu\decideh2020\acsmi\client\model\ServiceAttributeValue.class
-eu\decideh2020\acsmi\client\api\ServiceAttributeValueResourceApi.class
-eu\decideh2020\acsmi\client\model\ProfileInfoVM.class
-eu\decideh2020\acsmi\client\model\ServiceClass.class
-eu\decideh2020\acsmi\client\model\ServiceNFRInfoVO.class
-eu\decideh2020\acsmi\client\model\ServiceClassAttribute.class
-eu\decideh2020\acsmi\client\api\ProfileInfoResourceApi.class
-eu\decideh2020\acsmi\client\api\ServiceClassAttributeResourceApi.class
-eu\decideh2020\acsmi\client\api\ServiceIncidenceResourceApi.class
diff --git a/OPTIMUS/ACSmI-client/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/OPTIMUS/ACSmI-client/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
deleted file mode 100644
index 09546fcf501e6017244fdeaa0facc002b2d888e4..0000000000000000000000000000000000000000
--- a/OPTIMUS/ACSmI-client/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
+++ /dev/null
@@ -1,19 +0,0 @@
-D:\W\2017-Decide\workspace\ACSmIDiscovery\jaxrs-cxf-client-client\src\gen\java\eu\decideh2020\acsmi\client\model\ServiceAttributeValue.java
-D:\W\2017-Decide\workspace\ACSmIDiscovery\jaxrs-cxf-client-client\src\gen\java\eu\decideh2020\acsmi\client\model\ServiceClass.java
-D:\W\2017-Decide\workspace\ACSmIDiscovery\jaxrs-cxf-client-client\src\gen\java\eu\decideh2020\acsmi\client\model\Service.java
-D:\W\2017-Decide\workspace\ACSmIDiscovery\jaxrs-cxf-client-client\src\gen\java\eu\decideh2020\acsmi\client\model\ServiceNFRInfoVO.java
-D:\W\2017-Decide\workspace\ACSmIDiscovery\jaxrs-cxf-client-client\src\gen\java\eu\decideh2020\acsmi\client\model\ProfileInfoVM.java
-D:\W\2017-Decide\workspace\ACSmIDiscovery\jaxrs-cxf-client-client\src\gen\java\eu\decideh2020\acsmi\client\api\ServiceResourceApi.java
-D:\W\2017-Decide\workspace\ACSmIDiscovery\jaxrs-cxf-client-client\src\gen\java\eu\decideh2020\acsmi\client\api\ServiceClassAttributeResourceApi.java
-D:\W\2017-Decide\workspace\ACSmIDiscovery\jaxrs-cxf-client-client\src\gen\java\eu\decideh2020\acsmi\client\model\ServiceDevOpsInfoVO.java
-D:\W\2017-Decide\workspace\ACSmIDiscovery\jaxrs-cxf-client-client\src\gen\java\eu\decideh2020\acsmi\client\model\ServiceAttributeType.java
-D:\W\2017-Decide\workspace\ACSmIDiscovery\jaxrs-cxf-client-client\src\gen\java\eu\decideh2020\acsmi\client\model\Definition.java
-D:\W\2017-Decide\workspace\ACSmIDiscovery\jaxrs-cxf-client-client\src\gen\java\eu\decideh2020\acsmi\client\model\ServiceClassAttribute.java
-D:\W\2017-Decide\workspace\ACSmIDiscovery\jaxrs-cxf-client-client\src\gen\java\eu\decideh2020\acsmi\client\api\ProfileInfoResourceApi.java
-D:\W\2017-Decide\workspace\ACSmIDiscovery\jaxrs-cxf-client-client\src\gen\java\eu\decideh2020\acsmi\client\api\ServiceAttributeTypeResourceApi.java
-D:\W\2017-Decide\workspace\ACSmIDiscovery\jaxrs-cxf-client-client\src\gen\java\eu\decideh2020\acsmi\client\api\DefinitionResourceApi.java
-D:\W\2017-Decide\workspace\ACSmIDiscovery\jaxrs-cxf-client-client\src\gen\java\eu\decideh2020\acsmi\client\model\AttributeVO.java
-D:\W\2017-Decide\workspace\ACSmIDiscovery\jaxrs-cxf-client-client\src\gen\java\eu\decideh2020\acsmi\client\api\ServiceAttributeValueResourceApi.java
-D:\W\2017-Decide\workspace\ACSmIDiscovery\jaxrs-cxf-client-client\src\gen\java\eu\decideh2020\acsmi\client\model\ServiceIncidence.java
-D:\W\2017-Decide\workspace\ACSmIDiscovery\jaxrs-cxf-client-client\src\gen\java\eu\decideh2020\acsmi\client\api\ServiceClassResourceApi.java
-D:\W\2017-Decide\workspace\ACSmIDiscovery\jaxrs-cxf-client-client\src\gen\java\eu\decideh2020\acsmi\client\api\ServiceIncidenceResourceApi.java
diff --git a/OPTIMUS/eu.DECIDEh2020.optimus/.classpath b/OPTIMUS/eu.DECIDEh2020.optimus/.classpath
index fb5e1534d90b0d55cc35426e42d6ddf24066f5ff..0d874eec5d7081781f9319dddea2f5ace9bb5a1d 100644
--- a/OPTIMUS/eu.DECIDEh2020.optimus/.classpath
+++ b/OPTIMUS/eu.DECIDEh2020.optimus/.classpath
@@ -1,7 +1,10 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry exported="true" kind="lib" path="libs/app-controller-0.0.16-SNAPSHOT.jar"/>
-	<classpathentry exported="true" kind="lib" path="libs/optimus-client-2.0.0.jar"/>
+	<classpathentry exported="true" kind="lib" path="libs/spring-core-3.1.0.RELEASE.jar"/>
+	<classpathentry exported="true" kind="lib" path="libs/spring-web-5.1.5.RELEASE.jar"/>
+	<classpathentry exported="true" kind="lib" path="libs/spring-beans-5.1.5.RELEASE.jar"/>
+	<classpathentry exported="true" kind="lib" path="libs/spring-vault-core-2.0.1.RELEASE.jar"/>
+	<classpathentry exported="true" kind="lib" path="app-controller-0.0.16-SNAPSHOT.jar"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
 		<attributes>
 			<attribute name="maven.pomderived" value="true"/>
@@ -14,8 +17,8 @@
 			<attribute name="maven.pomderived" value="true"/>
 		</attributes>
 	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/optimuslib"/>
 	<classpathentry combineaccessrules="false" kind="src" path="/eu.DECIDEh2020.architect.plugin"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/libs"/>
-	<classpathentry combineaccessrules="false" kind="src" path="/AppController"/>
+	<classpathentry kind="lib" path="D:/W/2017-Decide/git/WP3/Optimus/eu.DECIDEh2020.optimus/app-controller-0.0.16-SNAPSHOT.jar"/>
 	<classpathentry kind="output" path="target/classes"/>
 </classpath>
diff --git a/OPTIMUS/eu.DECIDEh2020.optimus/META-INF/MANIFEST.MF b/OPTIMUS/eu.DECIDEh2020.optimus/META-INF/MANIFEST.MF
index e9b9edd7f31cd6132bace95cc9086fb1613b8413..5d7d0ffb7d2254030c9fbaa02a9d4618fdb523f2 100644
--- a/OPTIMUS/eu.DECIDEh2020.optimus/META-INF/MANIFEST.MF
+++ b/OPTIMUS/eu.DECIDEh2020.optimus/META-INF/MANIFEST.MF
@@ -67,5 +67,9 @@ Bundle-ClassPath: .,
  libs/jackson-core-2.9.5.jar,
  libs/jackson-annotations-2.9.0.jar,
  libs/optimus-client-2.0.0.jar,
- libs/app-controller-0.0.16-SNAPSHOT.jar
+ app-controller-0.0.16-SNAPSHOT.jar,
+ libs/spring-vault-core-2.0.1.RELEASE.jar,
+ libs/spring-beans-5.1.5.RELEASE.jar,
+ libs/spring-web-5.1.5.RELEASE.jar,
+ libs/spring-core-3.1.0.RELEASE.jar
 Export-Package: com.fasterxml.jackson.databind.node
diff --git a/OPTIMUS/eu.DECIDEh2020.optimus/libs/app-controller-0.0.16-SNAPSHOT.jar b/OPTIMUS/eu.DECIDEh2020.optimus/app-controller-0.0.16-SNAPSHOT.jar
similarity index 81%
rename from OPTIMUS/eu.DECIDEh2020.optimus/libs/app-controller-0.0.16-SNAPSHOT.jar
rename to OPTIMUS/eu.DECIDEh2020.optimus/app-controller-0.0.16-SNAPSHOT.jar
index 00835210029f7819f4ed652e8f8f48205f7e7e00..dc444a95e24347ba671247308465d57d2c88b0cc 100644
Binary files a/OPTIMUS/eu.DECIDEh2020.optimus/libs/app-controller-0.0.16-SNAPSHOT.jar and b/OPTIMUS/eu.DECIDEh2020.optimus/app-controller-0.0.16-SNAPSHOT.jar differ
diff --git a/OPTIMUS/eu.DECIDEh2020.optimus/app-controller-0.0.6.jar b/OPTIMUS/eu.DECIDEh2020.optimus/app-controller-0.0.6.jar
new file mode 100644
index 0000000000000000000000000000000000000000..917eeaa105014b35bcfb970719d853f7e4b1f88c
Binary files /dev/null and b/OPTIMUS/eu.DECIDEh2020.optimus/app-controller-0.0.6.jar differ
diff --git a/OPTIMUS/eu.DECIDEh2020.optimus/build.properties b/OPTIMUS/eu.DECIDEh2020.optimus/build.properties
index b18c4c5379adc1552acf981672a62d1277ba4079..41d5fba913ff4b32a07117128c2f7a9834d5b0fe 100644
--- a/OPTIMUS/eu.DECIDEh2020.optimus/build.properties
+++ b/OPTIMUS/eu.DECIDEh2020.optimus/build.properties
@@ -4,13 +4,11 @@ bin.includes = plugin.xml,\
                icons/,\
                optimus.plugin.properties,\
                .,\
-               libs/,\
-               libs/optimus-client-2.0.0.jar,\
-               libs/app-controller-0.0.16-SNAPSHOT.jar
+               app-controller-0.0.16-SNAPSHOT.jar,\
+               libs/
 jars.compile.order = lib/,\
                      bin/
-src.includes = src/,\
-               eu.decideh2020.optimus.client-2.0.0.jar
+src.includes = src/
 source.. = src/
 
 
diff --git a/OPTIMUS/eu.DECIDEh2020.optimus/eu.decideh2020.ACSmI.discovery.backend.client-1.0.0.jar b/OPTIMUS/eu.DECIDEh2020.optimus/eu.decideh2020.ACSmI.discovery.backend.client-1.0.0.jar
new file mode 100644
index 0000000000000000000000000000000000000000..5d09aa589820eb44adeb0ac1ca143b051651172d
Binary files /dev/null and b/OPTIMUS/eu.DECIDEh2020.optimus/eu.decideh2020.ACSmI.discovery.backend.client-1.0.0.jar differ
diff --git a/OPTIMUS/eu.DECIDEh2020.optimus/libs/app-controller-0.0.15-SNAPSHOT.jar b/OPTIMUS/eu.DECIDEh2020.optimus/libs/app-controller-0.0.15-SNAPSHOT.jar
new file mode 100644
index 0000000000000000000000000000000000000000..baf183d2aeead483252ffa64b8f8075bceb4ba15
Binary files /dev/null and b/OPTIMUS/eu.DECIDEh2020.optimus/libs/app-controller-0.0.15-SNAPSHOT.jar differ
diff --git a/OPTIMUS/eu.DECIDEh2020.optimus/libs/json-20180130.jar b/OPTIMUS/eu.DECIDEh2020.optimus/libs/json-20180130.jar
new file mode 100644
index 0000000000000000000000000000000000000000..bc2cd410353c64fae935d2d954428f81f4368851
Binary files /dev/null and b/OPTIMUS/eu.DECIDEh2020.optimus/libs/json-20180130.jar differ
diff --git a/OPTIMUS/eu.DECIDEh2020.optimus/libs/jsonld-java-0.12.0.jar b/OPTIMUS/eu.DECIDEh2020.optimus/libs/jsonld-java-0.12.0.jar
new file mode 100644
index 0000000000000000000000000000000000000000..6e01fdbc158a66ff764d377280bd4b909bd3b5d8
Binary files /dev/null and b/OPTIMUS/eu.DECIDEh2020.optimus/libs/jsonld-java-0.12.0.jar differ
diff --git a/OPTIMUS/eu.DECIDEh2020.optimus/libs/optimus-client-1.0.0.jar b/OPTIMUS/eu.DECIDEh2020.optimus/libs/optimus-client-1.0.0.jar
new file mode 100644
index 0000000000000000000000000000000000000000..0223b9edf56ac451ac37ac66e3832a321f39ae12
Binary files /dev/null and b/OPTIMUS/eu.DECIDEh2020.optimus/libs/optimus-client-1.0.0.jar differ
diff --git a/OPTIMUS/eu.DECIDEh2020.optimus/libs/optimus-client-2.0.0.jar b/OPTIMUS/eu.DECIDEh2020.optimus/libs/optimus-client-2.0.0.jar
index 1951b7bf72ceb0016a773053faf67fa55c138b6a..ff2eeaf9304ff76a735546b9edd754927cf6077c 100644
Binary files a/OPTIMUS/eu.DECIDEh2020.optimus/libs/optimus-client-2.0.0.jar and b/OPTIMUS/eu.DECIDEh2020.optimus/libs/optimus-client-2.0.0.jar differ
diff --git a/OPTIMUS/eu.DECIDEh2020.optimus/libs/org.eclipse.wst.common.core-1.2.0.v200908251833.jar b/OPTIMUS/eu.DECIDEh2020.optimus/libs/org.eclipse.wst.common.core-1.2.0.v200908251833.jar
new file mode 100644
index 0000000000000000000000000000000000000000..009402acbc355b7d31016dfd29b901a7a11a0ca6
Binary files /dev/null and b/OPTIMUS/eu.DECIDEh2020.optimus/libs/org.eclipse.wst.common.core-1.2.0.v200908251833.jar differ
diff --git a/OPTIMUS/eu.DECIDEh2020.optimus/libs/org.eclipse.wst.common.environment-1.0.400.v200912181831.jar b/OPTIMUS/eu.DECIDEh2020.optimus/libs/org.eclipse.wst.common.environment-1.0.400.v200912181831.jar
new file mode 100644
index 0000000000000000000000000000000000000000..2f1a6b0dbe9cb227ab0162ce8237879d7925f2f2
Binary files /dev/null and b/OPTIMUS/eu.DECIDEh2020.optimus/libs/org.eclipse.wst.common.environment-1.0.400.v200912181831.jar differ
diff --git a/OPTIMUS/eu.DECIDEh2020.optimus/libs/org.eclipse.wst.common.frameworks-1.2.201.v201707201954.jar b/OPTIMUS/eu.DECIDEh2020.optimus/libs/org.eclipse.wst.common.frameworks-1.2.201.v201707201954.jar
new file mode 100644
index 0000000000000000000000000000000000000000..408831b10143eff804c440df8e0b267a5f129d67
Binary files /dev/null and b/OPTIMUS/eu.DECIDEh2020.optimus/libs/org.eclipse.wst.common.frameworks-1.2.201.v201707201954.jar differ
diff --git a/OPTIMUS/eu.DECIDEh2020.optimus/libs/org.eclipse.wst.common.project.facet.core-1.4.300.v201111030423.jar b/OPTIMUS/eu.DECIDEh2020.optimus/libs/org.eclipse.wst.common.project.facet.core-1.4.300.v201111030423.jar
new file mode 100644
index 0000000000000000000000000000000000000000..17f280600de0ee5bb2ede7ee793acb911dbe3341
Binary files /dev/null and b/OPTIMUS/eu.DECIDEh2020.optimus/libs/org.eclipse.wst.common.project.facet.core-1.4.300.v201111030423.jar differ
diff --git a/OPTIMUS/eu.DECIDEh2020.optimus/libs/org.eclipse.wst.common.uriresolver-1.2.300.v201702270556.jar b/OPTIMUS/eu.DECIDEh2020.optimus/libs/org.eclipse.wst.common.uriresolver-1.2.300.v201702270556.jar
new file mode 100644
index 0000000000000000000000000000000000000000..6dfe1525a365fdbe55375dfa7d4839bd1ee9387c
Binary files /dev/null and b/OPTIMUS/eu.DECIDEh2020.optimus/libs/org.eclipse.wst.common.uriresolver-1.2.300.v201702270556.jar differ
diff --git a/OPTIMUS/eu.DECIDEh2020.optimus/libs/org.eclipse.wst.json.core-1.0.100.v201707252002.jar b/OPTIMUS/eu.DECIDEh2020.optimus/libs/org.eclipse.wst.json.core-1.0.100.v201707252002.jar
new file mode 100644
index 0000000000000000000000000000000000000000..a7ebf026753a5da38dd717e5f28ea360205b8dae
Binary files /dev/null and b/OPTIMUS/eu.DECIDEh2020.optimus/libs/org.eclipse.wst.json.core-1.0.100.v201707252002.jar differ
diff --git a/OPTIMUS/eu.DECIDEh2020.optimus/libs/org.eclipse.wst.sse.core-1.1.1002.v201711071507.jar b/OPTIMUS/eu.DECIDEh2020.optimus/libs/org.eclipse.wst.sse.core-1.1.1002.v201711071507.jar
new file mode 100644
index 0000000000000000000000000000000000000000..2a736543f11697b0e346148e35d7f47bbd8f085b
Binary files /dev/null and b/OPTIMUS/eu.DECIDEh2020.optimus/libs/org.eclipse.wst.sse.core-1.1.1002.v201711071507.jar differ
diff --git a/OPTIMUS/eu.DECIDEh2020.optimus/libs/org.eclipse.wst.sse.ui-1.3.600.v201707042340.jar b/OPTIMUS/eu.DECIDEh2020.optimus/libs/org.eclipse.wst.sse.ui-1.3.600.v201707042340.jar
new file mode 100644
index 0000000000000000000000000000000000000000..c168fb8b662d99ac34fe83c6f77a070348a991c2
Binary files /dev/null and b/OPTIMUS/eu.DECIDEh2020.optimus/libs/org.eclipse.wst.sse.ui-1.3.600.v201707042340.jar differ
diff --git a/OPTIMUS/eu.DECIDEh2020.optimus/libs/org.eclipse.wst.validation-1.2.701.v201707142105.jar b/OPTIMUS/eu.DECIDEh2020.optimus/libs/org.eclipse.wst.validation-1.2.701.v201707142105.jar
new file mode 100644
index 0000000000000000000000000000000000000000..b8a3264bb62c57da8560965ff04b49788583ac3b
Binary files /dev/null and b/OPTIMUS/eu.DECIDEh2020.optimus/libs/org.eclipse.wst.validation-1.2.701.v201707142105.jar differ
diff --git a/OPTIMUS/eu.DECIDEh2020.optimus/src/eu/DECIDEh2020/optimus/editors/Classification.java b/OPTIMUS/eu.DECIDEh2020.optimus/src/eu/DECIDEh2020/optimus/editors/Classification.java
index e439e1615df5151f9afb962b6349bfabd2fb6b5a..f8df12c72a546b5f87639ad471a73b20e49678c6 100644
--- a/OPTIMUS/eu.DECIDEh2020.optimus/src/eu/DECIDEh2020/optimus/editors/Classification.java
+++ b/OPTIMUS/eu.DECIDEh2020.optimus/src/eu/DECIDEh2020/optimus/editors/Classification.java
@@ -135,8 +135,8 @@ public class Classification extends Page {
 		y = (120* microservicesNumber);
 		
 		}
-     	mcontainer.requestLayout();
-		
+     	//mcontainer.requestLayout();
+		mcontainer.requestLayout();
 		scrolledComposite.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, true, 1, 1));
 		scrolledComposite.setContent(mcontainer);
 		scrolledComposite.setExpandVertical( true );
diff --git a/OPTIMUS/eu.DECIDEh2020.optimus/src/eu/DECIDEh2020/optimus/editors/Microservice.java b/OPTIMUS/eu.DECIDEh2020.optimus/src/eu/DECIDEh2020/optimus/editors/Microservice.java
deleted file mode 100644
index 4e7ada5e680bd1e929d02ab4e0ca1a6bd7682f8b..0000000000000000000000000000000000000000
--- a/OPTIMUS/eu.DECIDEh2020.optimus/src/eu/DECIDEh2020/optimus/editors/Microservice.java
+++ /dev/null
@@ -1,223 +0,0 @@
-
-/*********************************************************************
-* Copyright (c) 2017 Tecnalia.
-*
-* This program and the accompanying materials are made
-* available under the terms of the Eclipse Public License 2.0
-* which is available at https://www.eclipse.org/legal/epl-2.0/
-*
-* SPDX-License-Identifier: EPL-2.0
-* Contributors (in alphabetical order):
-* Gorka Benguria                            Tecnalia
-* I�aki Etxaniz                             Tecnalia
-* Juncal Alonso                             Tecnalia
-* Leire Orue-Echevarria                     Tecnalia
-* Maria Jose Lopez                          Tecnalia
-* Marisa Escalante                          Tecnalia
-* Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
-**********************************************************************/
-package eu.DECIDEh2020.optimus.editors;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.StyledText;
-import org.eclipse.swt.events.FocusEvent;
-import org.eclipse.swt.events.FocusListener;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.graphics.FontData;
-import org.eclipse.swt.layout.FillLayout;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.FontDialog;
-import org.eclipse.swt.custom.ScrolledComposite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Text;
-import org.json.simple.JSONArray;
-
-import org.json.simple.JSONObject;
-import org.eclipse.swt.widgets.Combo;
-
-
-public class Microservice extends Composite {
-
-	/**
-	 * Create the composite.
-	 * @param parent
-	 * @param style
-	 */
-	/** The text widget used in page 2. */
-	private StyledText text;
-	/** The font chosen in page 1. */
-	private Font font;
-	private Text text_1;
-	private Text text_2;
-	private static JSONObject micros;
-	private JSONArray DetachR;
-	private Text Detach_text;
-	private JSONObject DRes;
-	
-
-	
-	public Microservice(Composite parent, int style, int y) {
-		super(parent, style);
-		
-		Composite compositeMicro = new Composite(this, SWT.NONE);
-		compositeMicro.setBounds(1, 0, 437, 83);
-		DetachR = new JSONArray();
-		
-			Label lblMicroserviceName = new Label(compositeMicro, SWT.NONE);
-			lblMicroserviceName.setBounds(10, 13, 50, 30);
-			lblMicroserviceName.setText("Name");
-			text_2 = new Text(compositeMicro, SWT.BORDER);
-			text_2.setBounds(69, 13, 200, 21);
-			
-			Label microserviceID = new Label(compositeMicro, SWT.NONE);
-			microserviceID.setText("id");
-			microserviceID.setBounds(275, 13, 50, 15);
-			microserviceID.setVisible(false);
-			
-			
-			
-			Combo ms_type = new Combo(compositeMicro, SWT.NONE);
-			ms_type.setItems(new String[] {"Computing", "Computing Public IP"});
-			ms_type.setBounds(331, 10, 91, 23);
-			ms_type.setText("Computing");
-			
-			Combo Detach_type = new Combo(compositeMicro, SWT.NONE);
-			Detach_type.setItems(new String[] {"Storage. DB", "Storage", "Queue System"});
-			Detach_type.setBounds(322, 50, 91, 23);
-			Detach_type.setText("Storage");
-			
-			Button Det_DB = new Button(compositeMicro, SWT.RADIO);
-			Det_DB.setSelection(false);
-			Det_DB.setBounds(277, 53, 90, 16);
-			Det_DB.setText("DB");
-			Det_DB.addFocusListener(new FocusListener(){
-		    	
-
-				@Override
-				public void focusGained(FocusEvent arg0) {
-					// TODO Auto-generated method stub
-					
-				}
-				@Override
-				public void focusLost(FocusEvent arg0) {
-					if (Det_DB.getSelection()) {
-						Detach_type.setText("Storage. DB");
-											} 
-					if (!Det_DB.getSelection()) {Detach_type.setText("Storage");}
-					
-					if (DRes.get(Detach_type)!=Detach_type.getText())
-					{
-						
-						DetachR.remove(DRes);
-						micros.remove(DetachR);
-						optimus.appmicros.remove(micros);
-						DRes.put("Det_type",Detach_type.getText());
-						DetachR.add(DRes);
-						optimus.appmicros.add(micros);
-					}
-					
-					
-
-					
-				}
-			}
-					);
-			
-			Label lblDetachableResource = new Label(compositeMicro, SWT.NONE);
-			lblDetachableResource.setBounds(11, 53, 122, 15);
-			lblDetachableResource.setText("Detachable Resource");
-			Detach_text = new Text(compositeMicro, SWT.BORDER);
-			Detach_text.setBounds(143, 47, 117, 21);
-
-			Detach_text.addFocusListener(new FocusListener(){
-		    	
-
-				@Override
-				public void focusGained(FocusEvent arg0) {
-					// TODO Auto-generated method stub
-					
-				}
-
-				@Override
-				public void focusLost(FocusEvent arg0) {
-					DRes = new JSONObject();
-					for (int i=0; i < optimus.appmicros.size(); i++)
-						{
-						    JSONObject itemArr = (JSONObject)optimus.appmicros.get(i);
-						    if (itemArr.get("id").equals(microserviceID.getText()))
-						    {
-						        break;
-						    }
-					}
-					 
-					DRes.put("DetachableResource",Detach_text.getText());
-					DRes.put("Det_type",Detach_type.getText());
-					
-					DetachR.add(DRes);
-					micros.put("Detachable_resources",DetachR);
-				}
-			});
-						
-			text_2.addFocusListener(new FocusListener() {
-		    	
-
-				@Override
-				public void focusGained(FocusEvent arg0) {
-					// TODO Auto-generated method stub
-					
-				}
-
-				@Override
-				public void focusLost(FocusEvent arg0) {
-					int id = (int) (Math.random()*1000);
-					String idS = String.valueOf(id);
-					micros = new JSONObject();
-
-						for (int i=0; i < optimus.appmicros.size(); i++)
-						{
-						    JSONObject itemArr = (JSONObject)optimus.appmicros.get(i);
-						    if (itemArr.get("id").equals(microserviceID.getText()))
-						    {
-						    	optimus.appmicros.remove(itemArr);
-						    	idS = microserviceID.getText();
-						        break;
-
-						    }
-					}
-					 
-					
-					micros.put("id",idS);
-					micros.put("microname", text_2.getText());
-					micros.put("ms_type", ms_type.getText());
-					optimus.appmicros.add(micros);
-					microserviceID.setText(idS);
-					microserviceID.setVisible(true);
-				}
-
-				private boolean existmicroservice(String text) {
-					JSONObject microstemp = new JSONObject();
-					microstemp.put("id",text);
-					microstemp.put("microname", text_2.getText());
-					if (optimus.appmicros.contains(microstemp)) {
-						return true;
-
-					} else {
-					return false;
-					}
-				}});
-		}
-	//});
-
-	//}
-
-	@Override
-	protected void checkSubclass() {
-		// Disable the check that prevents subclassing of SWT components
-	}
-}
diff --git a/OPTIMUS/eu.DECIDEh2020.optimus/src/eu/DECIDEh2020/optimus/editors/MicroserviceClassification.java b/OPTIMUS/eu.DECIDEh2020.optimus/src/eu/DECIDEh2020/optimus/editors/MicroserviceClassification.java
index 26353ab6ab8bc1185599b4c7584e64b5ec84dbd5..55664af8730b861e0fea1b50154d298ff60c0066 100644
--- a/OPTIMUS/eu.DECIDEh2020.optimus/src/eu/DECIDEh2020/optimus/editors/MicroserviceClassification.java
+++ b/OPTIMUS/eu.DECIDEh2020.optimus/src/eu/DECIDEh2020/optimus/editors/MicroserviceClassification.java
@@ -205,6 +205,9 @@ public class MicroserviceClassification extends Composite {
 				String name = detdet.getName();
 				
 				//detdet.setDb(true);
+				if (detdet.isDb()==null) {
+					detdet.setDb(false);
+				}
 				Boolean isdb =  detdet.isDb();
 				Det_DB.setSelection(isdb);
 				
diff --git a/OPTIMUS/eu.DECIDEh2020.optimus/src/eu/DECIDEh2020/optimus/editors/OptimusContributor.java b/OPTIMUS/eu.DECIDEh2020.optimus/src/eu/DECIDEh2020/optimus/editors/OptimusContributor.java
deleted file mode 100644
index 4638ee53d3411f43e3ccbda48b8db2f41280d968..0000000000000000000000000000000000000000
--- a/OPTIMUS/eu.DECIDEh2020.optimus/src/eu/DECIDEh2020/optimus/editors/OptimusContributor.java
+++ /dev/null
@@ -1,121 +0,0 @@
-
-/*********************************************************************
-* Copyright (c) 2017 Tecnalia.
-*
-* This program and the accompanying materials are made
-* available under the terms of the Eclipse Public License 2.0
-* which is available at https://www.eclipse.org/legal/epl-2.0/
-*
-* SPDX-License-Identifier: EPL-2.0
-* Contributors (in alphabetical order):
-* Gorka Benguria                            Tecnalia
-* I�aki Etxaniz                             Tecnalia
-* Juncal Alonso                             Tecnalia
-* Leire Orue-Echevarria                     Tecnalia
-* Maria Jose Lopez                          Tecnalia
-* Marisa Escalante                          Tecnalia
-* Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
-**********************************************************************/
-package eu.DECIDEh2020.optimus.editors;
-
-import org.eclipse.jface.action.*;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.ui.IActionBars;
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.IWorkbenchActionConstants;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.actions.ActionFactory;
-import org.eclipse.ui.ide.IDE;
-import org.eclipse.ui.ide.IDEActionFactory;
-import org.eclipse.ui.part.MultiPageEditorActionBarContributor;
-import org.eclipse.ui.texteditor.ITextEditor;
-import org.eclipse.ui.texteditor.ITextEditorActionConstants;
-
-/**
- * Manages the installation/deinstallation of global actions for multi-page editors.
- * Responsible for the redirection of global actions to the active editor.
- * Multi-page contributor replaces the contributors for the individual editors in the multi-page editor.
- */
-public class OptimusContributor extends MultiPageEditorActionBarContributor {
-	private IEditorPart activeEditorPart;
-	private Action sampleAction;
-	/**
-	 * Creates a multi-page contributor.
-	 */
-	public OptimusContributor() {
-		super();
-		createActions();
-	}
-	/**
-	 * Returns the action registed with the given text editor.
-	 * @return IAction or null if editor is null.
-	 */
-	protected IAction getAction(ITextEditor editor, String actionID) {
-		return (editor == null ? null : editor.getAction(actionID));
-	}
-	/* (non-JavaDoc)
-	 * Method declared in AbstractMultiPageEditorActionBarContributor.
-	 */
-
-	public void setActivePage(IEditorPart part) {
-		if (activeEditorPart == part)
-			return;
-
-		activeEditorPart = part;
-
-		IActionBars actionBars = getActionBars();
-		if (actionBars != null) {
-
-			ITextEditor editor = (part instanceof ITextEditor) ? (ITextEditor) part : null;
-
-			actionBars.setGlobalActionHandler(
-				ActionFactory.DELETE.getId(),
-				getAction(editor, ITextEditorActionConstants.DELETE));
-			actionBars.setGlobalActionHandler(
-				ActionFactory.UNDO.getId(),
-				getAction(editor, ITextEditorActionConstants.UNDO));
-			actionBars.setGlobalActionHandler(
-				ActionFactory.REDO.getId(),
-				getAction(editor, ITextEditorActionConstants.REDO));
-			actionBars.setGlobalActionHandler(
-				ActionFactory.CUT.getId(),
-				getAction(editor, ITextEditorActionConstants.CUT));
-			actionBars.setGlobalActionHandler(
-				ActionFactory.COPY.getId(),
-				getAction(editor, ITextEditorActionConstants.COPY));
-			actionBars.setGlobalActionHandler(
-				ActionFactory.PASTE.getId(),
-				getAction(editor, ITextEditorActionConstants.PASTE));
-			actionBars.setGlobalActionHandler(
-				ActionFactory.SELECT_ALL.getId(),
-				getAction(editor, ITextEditorActionConstants.SELECT_ALL));
-			actionBars.setGlobalActionHandler(
-				ActionFactory.FIND.getId(),
-				getAction(editor, ITextEditorActionConstants.FIND));
-			actionBars.setGlobalActionHandler(
-				IDEActionFactory.BOOKMARK.getId(),
-				getAction(editor, IDEActionFactory.BOOKMARK.getId()));
-			actionBars.updateActionBars();
-		}
-	}
-	private void createActions() {
-		sampleAction = new Action() {
-			public void run() {
-				MessageDialog.openInformation(null, "Optimus", "Sample Action Executed");
-			}
-		};
-		sampleAction.setText("Sample Action");
-		sampleAction.setToolTipText("Sample Action tool tip");
-		sampleAction.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().
-				getImageDescriptor(IDE.SharedImages.IMG_OBJS_TASK_TSK));
-	}
-	public void contributeToMenu(IMenuManager manager) {
-		IMenuManager menu = new MenuManager("Editor &Menu");
-		manager.prependToGroup(IWorkbenchActionConstants.MB_ADDITIONS, menu);
-		menu.add(sampleAction);
-	}
-	public void contributeToToolBar(IToolBarManager manager) {
-		manager.add(new Separator());
-		manager.add(sampleAction);
-	}
-}
diff --git a/OPTIMUS/eu.DECIDEh2020.optimus/src/eu/DECIDEh2020/optimus/editors/SimulateSchema.java b/OPTIMUS/eu.DECIDEh2020.optimus/src/eu/DECIDEh2020/optimus/editors/SimulateSchema.java
index 46e9f42c97f5a22e7e3a119d6471cb509f70ace3..3a450e1c25bce556db851e9d6688e8811ff7c1bf 100644
--- a/OPTIMUS/eu.DECIDEh2020.optimus/src/eu/DECIDEh2020/optimus/editors/SimulateSchema.java
+++ b/OPTIMUS/eu.DECIDEh2020.optimus/src/eu/DECIDEh2020/optimus/editors/SimulateSchema.java
@@ -19,30 +19,20 @@
 **********************************************************************/
 package eu.DECIDEh2020.optimus.editors;
 
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
+import java.io.DataInputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.io.InputStreamReader;
 import java.nio.file.Paths;
-import java.sql.DriverManager;
-import java.sql.SQLException;
-import java.time.LocalDateTime;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
-import java.util.HashMap;
+import java.util.Date;
 import java.util.List;
-import java.util.Map;
 import java.util.Properties;
-import java.util.concurrent.TimeUnit;
-
 import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.IPath;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.ScrolledComposite;
-import org.eclipse.swt.custom.StyledText;
 import org.eclipse.swt.events.DisposeEvent;
 import org.eclipse.swt.events.DisposeListener;
 import org.eclipse.swt.events.SelectionAdapter;
@@ -56,35 +46,36 @@ import org.eclipse.swt.widgets.Label;
 import org.eclipse.wb.swt.SWTResourceManager;
 //import org.eclipse.swt.widgets.Table;
 import org.json.simple.JSONArray;
-
 import eu.DECIDEh2020.appManager.AppManager;
 import eu.DECIDEh2020.appManager.HistoryManager;
 import eu.DECIDEh2020.appManager.exceptions.AppManagerException;
-import eu.DECIDEh2020.appManager.exceptions.DECIDEValidationException;
+
 
 
 
 //import com.fasterxml.jackson.databind.JsonNode;
 
 import eu.DECIDEh2020.appManager.models.AppDescription;
-import eu.DECIDEh2020.appManager.models.HistoricalDeployment;
 import eu.DECIDEh2020.appManager.models.HistoryEntry;
 import eu.DECIDEh2020.appManager.models.SchemaElement;
 import eu.DECIDEh2020.architect.plugin.editor.Page;
+//import eu.decideh2020.ACSmI.discovery.backend.client.api.ServiceResourceApi;
+//import eu.decideh2020.ACSmI.discovery.backend.client.model.Service;
 //import eu.decideh2020.ACSmI.client.model.Service;
 import eu.decideh2020.optimus.client.api.DefaultApi;
 import eu.decideh2020.optimus.client.model.ReturnedSimulation;
 import eu.decideh2020.optimus.client.model.ReturnedSc;
-import eu.decideh2020.optimus.client.model.ReturnedSchema;
 import eu.decideh2020.optimus.client.model.Simulation;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
 
 //import javax.ws.rs.core.Response;
 import org.apache.cxf.jaxrs.client.JAXRSClientFactory;
-import org.apache.cxf.helpers.IOUtils;
 import org.apache.cxf.jaxrs.client.ClientConfiguration;
 import org.apache.cxf.jaxrs.client.WebClient;
 import org.eclipse.swt.widgets.Text;
+import org.eclipse.swt.widgets.Combo;
 
 
 
@@ -98,6 +89,7 @@ public class SimulateSchema extends Page {
 	 * @param style
 	 */
 	private DefaultApi apiInstance;
+	//private ServiceResourceApi api;
 	private JSONArray NFRs;
 	private AppDescription appdescription;
 	private Text simText;
@@ -129,7 +121,7 @@ public class SimulateSchema extends Page {
 		
 		
 		Button btnSimulate = new Button(group, SWT.NONE);
-		btnSimulate.setBounds(10, 10, 75, 25);
+		btnSimulate.setBounds(10, 8, 75, 25);
 		btnSimulate.setText("Simulate");
 		
 		Composite composite_1 = new Composite(group, SWT.NONE);
@@ -146,22 +138,75 @@ public class SimulateSchema extends Page {
 		
 		this.apiInstance = apiInstance;
         simText.setText("No simulation launched");
+        
+        Label lblProvider = new Label(group, SWT.NONE);
+        lblProvider.setToolTipText("This selects services from a specific provider");
+        lblProvider.setBounds(157, 10, 70, 20);
+        lblProvider.setText("Provider:");
+        
+        Combo comboProviders = new Combo(group, SWT.NONE);
+        comboProviders.setBounds(243, 10, 97, 28);
+        JacksonJsonProvider provider = new JacksonJsonProvider();
+		
+        List providers = new ArrayList();
+        providers.add(provider);
+        
+        //api = JAXRSClientFactory.create("http://85.91.40.245:8087/acsmiservices", ServiceResourceApi.class, providers);
+        //List<String> items = api.definitions-by-attribute("3");
+        String[] items = {"", "Amazon", "Azure", "AIMES", "Arsys"};
+		comboProviders.setItems(items);
+		
+		//testing curl and vault
+		
+//		VaultTemplate vaultTemplate = new VaultTemplate(new VaultEndpoint(),new TokenAuthentication("s.ry9XFWOO7BLZK4XhW4W1m1eg"));
+//		VaultEndpoint endpoint = VaultEndpoint.create("http://85.91.40.245", 8200);
+//		
+//		VaultResponseSupport<Map<String, Object>> response = vaultTemplate.read("v1/secret/testuser/sockshop");
+
+		 Process curlProc;
+		 //String command="curl -X GET --header 'Accept: application/json' 'http://85.91.40.245:8087/acsmiservices/api/services/find?filter=%7B%22classid%22%3A2%2C%22attributes%22%3A%5B%5D%7D'";
+		 //String command = "curl -H �X-Vault-Token: s.ry9XFWOO7BLZK4XhW4W1m1eg� -X GET http://85.91.40.245:8200/v1/secret/testuser/sockshop/s.ry9XFWOO7BLZK4XhW4W1m1eg";
+		 String command = "curl -H 'X-Vault-Token: s.ry9XFWOO7BLZK4XhW4W1m1eg' -X GET http://85.91.40.245:8200/v1/secret/testuser/sockshop";		 
+		 String outputString;
+		 try {
+			curlProc = Runtime.getRuntime().exec(command);
+			DataInputStream curlIn = new DataInputStream(
+	                curlProc.getInputStream());
+			outputString = curlIn.readLine();
+	        while (outputString != null) {
+	            System.out.println(outputString);
+	            outputString = curlIn.readLine();
+	        }
+		} catch (IOException e1) {
+			// TODO Auto-generated catch block
+			e1.printStackTrace();
+		}
+	
+		//end testing curl and vault
 		btnSimulate.addSelectionListener(new SelectionAdapter() {
 		public void widgetSelected(SelectionEvent event) {
 			
 
 			Simulation simL = new Simulation();
-			simL.setAppurl("Appurl");
+			//System.out.println("estoy en el folder: "+System.getProperty("user.dir"));
+					
+			//System.out.println("estoy en el folder: "+ResourcesPlugin.getWorkspace().getRoot().getProject(appd.getName()).getLocation());
 			
+			//simL.setAppurl(ResourcesPlugin.getWorkspace().getRoot().getProject(appd.getName()).getLocation().toString());
+			//simL.setAppurl("https://git.code.tecnalia.com/decide/SockShop_AppDescription.git");
+			
+			//simL.setAppurl("https://github.com/aimesdecide/optimus.git");
+			simL.setAppurl("https://git.code.tecnalia.com/j2018b/106819.git");
+			//simL.setAppurl("https://git.code.tecnalia.com/decide/SockShop_AppDescription.git");
 
 			JacksonJsonProvider provider = new JacksonJsonProvider();
 			
 	        List providers = new ArrayList();
 	        providers.add(provider);
 	        
-	        
-	        apiInstance = JAXRSClientFactory.create("URLoptimusserver", DefaultApi.class, providers);
-	        
+	        apiInstance = JAXRSClientFactory.create("http://localhost:8080/optimussimulation", DefaultApi.class, providers);
+	        //apiInstance = JAXRSClientFactory.create("http://localhost:11080/optimussimulation", DefaultApi.class, providers);
+	        //apiInstance = JAXRSClientFactory.create("http://85.91.40.245:8090/optimussimulation", DefaultApi.class, providers);
 	        
 	        org.apache.cxf.jaxrs.client.Client client = WebClient.client(apiInstance);
 	        
@@ -186,9 +231,15 @@ public class SimulateSchema extends Page {
 	        	response2 = apiInstance.getSimulationUsingGET(id);
 	        	status = response2.get(0).getStatus();
 	        }
+	        //System.out.println("terminada la sim: "+id);
+	        //List<ReturnedSc> rsc = new ArrayList<ReturnedSc>();
 	        List<ReturnedSc> response2 = new ArrayList<ReturnedSc>();
+	        //response2.add(rsc);
+	        //JSONArray jsonArray = new JSONArray();
         	response2 = apiInstance.getSchemaUsingGET(id);
+	        //response2 = apiInstance.getSchemaUsingGET(id);
 	        List<SchemaElement> schemas = new ArrayList<>();
+	        appdescription.setSchema(schemas);
 	        //at the moment i consider the best of all of them, the first one.
 	        //when integration--> increase index from 0 to 5.
 			for (ReturnedSc rs : response2) {
@@ -200,15 +251,15 @@ public class SimulateSchema extends Page {
 			}
 			
 			//store the schema (5 schemas later) into the history repo
-			try {
-				storeHistorySchemas(schemas,id);
-			} catch (AppManagerException e1) {
-				// TODO Auto-generated catch block
-				e1.printStackTrace();
-			} catch (IOException e1) {
-				// TODO Auto-generated catch block
-				e1.printStackTrace();
-			}
+//			try {
+//				storeHistorySchemas(schemas,id);
+//			} catch (AppManagerException e1) {
+//				// TODO Auto-generated catch block
+//				e1.printStackTrace();
+//			} catch (IOException e1) {
+//				// TODO Auto-generated catch block
+//				e1.printStackTrace();
+//			}
 	       
 	       		appdescription.setSchema(schemas);
 		        //List<SchemaElement> schemas2 = new ArrayList<>();
@@ -235,33 +286,42 @@ public class SimulateSchema extends Page {
 
 		private void storeHistorySchemas(List<SchemaElement> schemas, Integer id) throws AppManagerException, IOException {
 			AppManager manager = null;
-			String localAppDesc = System.getProperty("java.io.tmpdir");
-			localAppDesc = localAppDesc+"\\"+id;
+			//String localAppDesc = System.getProperty("java.io.tmpdir");
+			//localAppDesc = localAppDesc+"\\"+id;
+			IPath localAppDesc=ResourcesPlugin.getWorkspace().getRoot().getProject(appd.getName()).getLocation();
 			//localAppDesc = localAppDesc+"\\"+System.currentTimeMillis();
 			//this is the way to manage the variables (paths only) by java, obtaining tmp system folder - end
 			
 			//System.out.println("my applocalfolder is: "+Paths.get(localAppDesc));
 			try {
-				manager = AppManager.open(Paths.get(localAppDesc));
+				manager = AppManager.open(Paths.get(localAppDesc.toString()));
 
 			} catch (AppManagerException e) {
 				e.printStackTrace();
 			}
 			HistoryManager historyManager = manager.getHistoryManager();
-			List<HistoryEntry> history = new ArrayList();
-			history = historyManager.getHistory();
+			ArrayList<HistoryEntry> history = new ArrayList(historyManager.getHistory());
+			//history = historyManager.getHistory();
 
-			HistoryEntry he = new HistoryEntry();
-			List<SchemaElement> deployments = new ArrayList();
-			he.setDate(LocalDateTime.now().toString());
-			for (SchemaElement se : schemas) {
-				deployments.add(se);
-			}
 			
-			//he.setSchema(deployments);
-			//history.add(he);
-			//for now i write it but first i should ask the developer
-			//historyManager.write(history);
+			//List<SchemaElement> deployments = new ArrayList();
+			
+			//for (SchemaElement se : schemas) {
+			HistoryEntry he = new HistoryEntry();
+			DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
+			he.setDate(dateFormat.format(new Date()));
+			he.setSchema(schemas);
+			List<ObjectNode> slaB = new ArrayList<>();
+			he.setSlaBreaches(slaB);
+			history.add(he);
+
+			//}
+			historyManager.writeAndCommit(history, "updating History");
+//			
+//			//he.setSchema(deployments);
+//			history.add(he);
+//			//for now i write it but first i should ask the developer
+//			historyManager.write(history);
 			
 		}
 	});
diff --git a/OPTIMUS/eu.DECIDEh2020.optimus/src/eu/DECIDEh2020/optimus/editors/Simulation.java b/OPTIMUS/eu.DECIDEh2020.optimus/src/eu/DECIDEh2020/optimus/editors/Simulation.java
deleted file mode 100644
index 0cdb9388419de9803888cef935e19b9382e74d09..0000000000000000000000000000000000000000
--- a/OPTIMUS/eu.DECIDEh2020.optimus/src/eu/DECIDEh2020/optimus/editors/Simulation.java
+++ /dev/null
@@ -1,139 +0,0 @@
-
-/*********************************************************************
-* Copyright (c) 2017 Tecnalia.
-*
-* This program and the accompanying materials are made
-* available under the terms of the Eclipse Public License 2.0
-* which is available at https://www.eclipse.org/legal/epl-2.0/
-*
-* SPDX-License-Identifier: EPL-2.0
-* Contributors (in alphabetical order):
-* Gorka Benguria                            Tecnalia
-* I�aki Etxaniz                             Tecnalia
-* Juncal Alonso                             Tecnalia
-* Leire Orue-Echevarria                     Tecnalia
-* Maria Jose Lopez                          Tecnalia
-* Marisa Escalante                          Tecnalia
-* Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
-**********************************************************************/
-package eu.DECIDEh2020.optimus.editors;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.widgets.Composite;
-//import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Button;
-//import org.eclipse.swt.widgets.Table;
-import org.json.simple.JSONArray;
-//import org.json.simple.JSONObject;
-import org.eclipse.swt.widgets.ProgressBar;
-import org.eclipse.swt.custom.StyledText;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.custom.ScrolledComposite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.wb.swt.SWTResourceManager;
-
-public class Simulation extends Composite {
-
-
-
-	/**
-	 * Create the composite.
-	 * @param parent
-	 * @param style
-	 */
-	
-	private JSONArray NFRs;
-	public Simulation(Composite parent, int style) {
-		super(parent, SWT.NONE);
-		
-		ScrolledComposite scrolledComposite = new ScrolledComposite(this, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
-		scrolledComposite.setAlwaysShowScrollBars(true);
-		scrolledComposite.setBounds(10, 43, 813, 453);
-		scrolledComposite.setExpandHorizontal(true);
-		scrolledComposite.setExpandVertical(true);
-		
-		Group group = new Group(scrolledComposite, SWT.NONE);
-		
-		Composite composite = new Composite(group, SWT.NONE);
-		composite.setBounds(10, 10, 135, 121);
-		
-		Label lblNfrEditor = new Label(composite, SWT.NONE);
-		lblNfrEditor.setBounds(10, 10, 55, 15);
-		lblNfrEditor.setText("NFR Editor");
-		NFRs = new JSONArray();
-		
-		
-		Button btnCost_1 = new Button(composite, SWT.CHECK);
-		btnCost_1.setBounds(30, 31, 93, 16);
-		btnCost_1.setText("Cost");
-		
-		
-		Button btnAvailability_1 = new Button(composite, SWT.CHECK);
-		btnAvailability_1.setBounds(30, 53, 93, 16);
-		btnAvailability_1.setText("Availability");
-		
-		
-		Button btnLocation_1 = new Button(composite, SWT.CHECK);
-		btnLocation_1.setBounds(30, 75, 93, 16);
-		btnLocation_1.setText("Location");
-		
-		
-		Button btnSimulate = new Button(group, SWT.NONE);
-		btnSimulate.setBounds(185, 62, 75, 25);
-		btnSimulate.setText("Simulate");
-		
-		Composite composite_1 = new Composite(group, SWT.NONE);
-		composite_1.setBounds(10, 137, 723, 259);
-		
-		Label lblNewLabel = new Label(composite_1, SWT.NONE);
-		lblNewLabel.setFont(SWTResourceManager.getFont("Calibri", 14, SWT.BOLD));
-		lblNewLabel.setBounds(10, 10, 339, 21);
-		lblNewLabel.setText("ApplicationDescription JSON file:");
-		StyledText simulationText = new StyledText(composite_1, SWT.BORDER);
-		simulationText.setBounds(10, 62, 671, 100);
-		simulationText.setAlwaysShowScrollBars(true);
-		simulationText.setJustify(true);
-		simulationText.setLineSpacing(3);
-		simulationText.setText("");
-
-		btnSimulate.addSelectionListener(new SelectionAdapter() {
-		public void widgetSelected(SelectionEvent event) {
-			NFRs.removeAll(NFRs);
-			if (btnCost_1.getSelection()) {
-				NFRs.add(btnCost_1.getText());
-				}
-			if (btnAvailability_1.getSelection()) {
-				NFRs.add(btnAvailability_1.getText());
-				}
-			if (btnLocation_1.getSelection()) {
-				NFRs.add(btnLocation_1.getText());
-				}
-			
-			optimus.appjson.put("NFRs", NFRs);
-			//}
-			
-			
-
-			ProgressBar progressBar = new ProgressBar(parent, SWT.NONE);
-			progressBar.setBounds(103, 18, 170, 17);
-
-			
-			
-			progressBar.setVisible(true);
-			simulationText.setText(optimus.appjson.toString());
-			addDisposeListener(new DisposeListener() {
-				public void widgetDisposed(DisposeEvent e) {
-				}
-			});
-			
-		}
-	});
-		scrolledComposite.setContent(group);
-		scrolledComposite.setMinSize(group.computeSize(SWT.DEFAULT, SWT.DEFAULT));
-
-	}
-}
diff --git a/OPTIMUS/eu.DECIDEh2020.optimus/src/eu/DECIDEh2020/optimus/editors/optimus.java b/OPTIMUS/eu.DECIDEh2020.optimus/src/eu/DECIDEh2020/optimus/editors/optimus.java
deleted file mode 100644
index 1739f14097673fd45bd06e5c671e2f2353f8e214..0000000000000000000000000000000000000000
--- a/OPTIMUS/eu.DECIDEh2020.optimus/src/eu/DECIDEh2020/optimus/editors/optimus.java
+++ /dev/null
@@ -1,259 +0,0 @@
-
-/*********************************************************************
-* Copyright (c) 2017 Tecnalia.
-*
-* This program and the accompanying materials are made
-* available under the terms of the Eclipse Public License 2.0
-* which is available at https://www.eclipse.org/legal/epl-2.0/
-*
-* SPDX-License-Identifier: EPL-2.0
-* Contributors (in alphabetical order):
-* Gorka Benguria                            Tecnalia
-* I�aki Etxaniz                             Tecnalia
-* Juncal Alonso                             Tecnalia
-* Leire Orue-Echevarria                     Tecnalia
-* Maria Jose Lopez                          Tecnalia
-* Marisa Escalante                          Tecnalia
-* Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
-**********************************************************************/
-package eu.DECIDEh2020.optimus.editors;
-
-
-import java.io.BufferedReader;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.StringWriter;
-import java.text.Collator;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.StringTokenizer;
-
-import org.eclipse.core.resources.IMarker;
-import org.eclipse.core.resources.IResourceChangeEvent;
-import org.eclipse.core.resources.IResourceChangeListener;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jface.dialogs.ErrorDialog;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.StyledText;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.graphics.FontData;
-import org.eclipse.swt.layout.FillLayout;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.FontDialog;
-import org.eclipse.ui.*;
-import org.eclipse.ui.editors.text.TextEditor;
-import org.eclipse.ui.part.FileEditorInput;
-import org.eclipse.ui.part.MultiPageEditorPart;
-import org.json.simple.JSONObject;
-import org.json.simple.parser.JSONParser;
-import org.json.simple.parser.ParseException;
-import org.json.simple.JSONArray;
-import org.json.*;
-import org.eclipse.ui.ide.IDE;
-
-/**
- * How to create a multi-page editor.
- * This example has 3 pages:
- * <ul>
- * <li>page 0 contains a nested text editor.
- * <li>page 1 shows the Classification tab
- * <li>page 2 shows the Simulation tab
- * </ul>
- */
-public class optimus extends MultiPageEditorPart implements IResourceChangeListener{
-
-	/** The text editor used in page 0. */
-	// Tecnalia20171024: I should find out how to assign a json editor
-	public static TextEditor editor;
-	private StyledText text;
-	// create a json object
-	public static JSONObject appjson;
-	public static JSONArray appmicros;
-	public static String newjson = "";
-	public static String workingDir;
-	/**
-	 * Creates a multi-page editor example.
-	 */
-	public optimus() {
-		super();
-		
-		ResourcesPlugin.getWorkspace().addResourceChangeListener(this);
-		
-		appjson = new JSONObject();
-		appmicros = new JSONArray();
-		
-	}
-	/**
-	 * Creates page 0 of the multi-page editor,
-	 * which contains a text editor.
-	 */
-	void createPage0() {
-		try {
-
-			editor = new TextEditor();
-			int index = addPage(editor, getEditorInput());
-
-			setPageText(index, editor.getTitle());
-			
-		} catch (PartInitException e) {
-			ErrorDialog.openError(
-				getSite().getShell(),
-				"Error creating nested text editor",
-				null,
-				e.getStatus());
-		}
-
-	}
-	// these lines of comments are a try of reading the JSON file and drawing the corresponding elements in classification tab
-	// I leave it to try again for the second version - Mar�a Jos� L�pe< - TECNALIA November 2017
-
-//	private JSONObject initialfile() throws IOException, ParseException {
-//		
-//		String line;
-//		FileReader f = new FileReader(workingDir);
-//        BufferedReader b = new BufferedReader(f);
-//       line = b.readLine();
-//       JSONParser parser = new JSONParser();
-//       JSONObject jsonfilecontent = (JSONObject) parser.parse(line);
-//       //JSONObject jsonfilecontent = new JSONObject(line);
-//       b.close();
-//		return jsonfilecontent;
-//	}
-	/**
-	 * Creates page 1 of the multi-page editor,
-	 * which allows you to change the font used in page 2.
-	 */
-	// Tecnalia: The UI for the classification tool
-	void createPage1() {
-
-		Composite composite = new Classification(getContainer(), SWT.NONE);
-
-		int index = addPage(composite);
-		setPageText(index, "Classification");
-	}
-	/**
-	 * Creates page 2 of the multi-page editor,
-	 * which shows the sorted text.
-	 */
-	void createPage2() {
-// Classification tab
-		Composite composite = new Simulation (getContainer(), SWT.NONE);
-
-		int index = addPage(composite);
-		setPageText(index, "Simulation");
-	}
-	
-
-	
-	
-	/**
-	 * Creates the pages of the multi-page editor.
-	 */
-	protected void createPages() {
-		createPage0();
-		createPage1();
-		createPage2();
-	}
-	/**
-	 * The <code>MultiPageEditorPart</code> implementation of this 
-	 * <code>IWorkbenchPart</code> method disposes all nested editors.
-	 * Subclasses may extend.
-	 */
-	public void dispose() {
-		ResourcesPlugin.getWorkspace().removeResourceChangeListener(this);
-		super.dispose();
-	}
-	/**
-	 * Saves the multi-page editor's document.
-	 */
-	public void doSave(IProgressMonitor monitor) {
-		getEditor(0).doSave(monitor);
-
-		
-	}
-	/**
-	 * Saves the multi-page editor's document as another file.
-	 * Also updates the text for page 0's tab, and updates this multi-page editor's input
-	 * to correspond to the nested editor's.
-	 */
-	public void doSaveAs() {
-		IEditorPart editor = getEditor(0);
-		editor.doSaveAs();
-		setPageText(0, editor.getTitle());
-		setInput(editor.getEditorInput());
-	}
-	/* (non-Javadoc)
-	 * Method declared on IEditorPart
-	 */
-	public void gotoMarker(IMarker marker) {
-		setActivePage(0);
-		IDE.gotoMarker(getEditor(0), marker);
-	}
-	/**
-	 * The <code>MultiPageEditorExample</code> implementation of this method
-	 * checks that the input is an instance of <code>IFileEditorInput</code>.
-	 */
-	public void init(IEditorSite site, IEditorInput editorInput)
-		throws PartInitException {
-		
-		if (!(editorInput instanceof IFileEditorInput))
-			throw new PartInitException("Invalid Input: Must be IFileEditorInput");
-		workingDir = ResourcesPlugin.getWorkspace().getRoot().getLocation().toString();
-		Integer position = editorInput.toString().indexOf("/");
-		Integer length = editorInput.toString().length();
-		workingDir = workingDir+editorInput.toString().substring(position,length-1);
-		
-		super.init(site, editorInput);
-	}
-	/* (non-Javadoc)
-	 * Method declared on IEditorPart.
-	 */
-	public boolean isSaveAsAllowed() {
-		return true;
-	}
-	/**
-	 * Calculates the contents of page 0.
-	 */
-	protected void pageChange(int newPageIndex) {
-		super.pageChange(newPageIndex);
-		if (newPageIndex == 1) {
-		}
-		if (newPageIndex == 2) {
-		}
-		if (newPageIndex == 0) {
-			// I do not know why but  I do not see the new content until the button save is selected.
-			// to be analyzed for next version
-			//IEditorPart editor = getEditor(0);
-			//setPageText(0, editor.getTitle());
-			//setInput(editor.getEditorInput());
-		}
-		}
-	
-	/**
-	 * Closes all project files on project close.
-	 */
-	public void resourceChanged(final IResourceChangeEvent event){
-		if(event.getType() == IResourceChangeEvent.PRE_CLOSE){
-			Display.getDefault().asyncExec(new Runnable(){
-				public void run(){
-					IWorkbenchPage[] pages = getSite().getWorkbenchWindow().getPages();
-					for (int i = 0; i<pages.length; i++){
-						if(((FileEditorInput)editor.getEditorInput()).getFile().getProject().equals(event.getResource())){
-							IEditorPart editorPart = pages[i].findEditor(editor.getEditorInput());
-							pages[i].closeEditor(editorPart,true);
-						}
-					}
-				}            
-			});
-		}
-	}
-}
diff --git a/OPTIMUS/eu.DECIDEh2020.optimus/src/eu/DECIDEh2020/optimus/wizards/OptimusWizard.java b/OPTIMUS/eu.DECIDEh2020.optimus/src/eu/DECIDEh2020/optimus/wizards/OptimusWizard.java
deleted file mode 100644
index 6f1a9446404e5352a51c1753aa48916bcdd20024..0000000000000000000000000000000000000000
--- a/OPTIMUS/eu.DECIDEh2020.optimus/src/eu/DECIDEh2020/optimus/wizards/OptimusWizard.java
+++ /dev/null
@@ -1,152 +0,0 @@
-package eu.DECIDEh2020.optimus.wizards;
-
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.wizard.Wizard;
-import org.eclipse.ui.INewWizard;
-import org.eclipse.ui.IWorkbench;
-import org.eclipse.core.runtime.*;
-import org.eclipse.jface.operation.*;
-import java.lang.reflect.InvocationTargetException;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.core.resources.*;
-import org.eclipse.core.runtime.CoreException;
-import java.io.*;
-import org.eclipse.ui.*;
-import org.eclipse.ui.ide.IDE;
-
-/**
- * This is a sample new wizard. Its role is to create a new file 
- * resource in the provided container. If the container resource
- * (a folder or a project) is selected in the workspace 
- * when the wizard is opened, it will accept it as the target
- * container. The wizard creates one file with the extension
- * "json". If a sample multi-page editor (also available
- * as a template) is registered for the same extension, it will
- * be able to open it.
- */
-
-public class OptimusWizard extends Wizard implements INewWizard {
-	private OptimusWizardPage page;
-	private ISelection selection;
-
-	/**
-	 * Constructor for OptimusWizard.
-	 */
-	public OptimusWizard() {
-		super();
-		setNeedsProgressMonitor(true);
-	}
-	
-	/**
-	 * Adding the page to the wizard.
-	 */
-	@Override
-	public void addPages() {
-		page = new OptimusWizardPage(selection);
-		addPage(page);
-	}
-
-	/**
-	 * This method is called when 'Finish' button is pressed in
-	 * the wizard. We will create an operation and run it
-	 * using wizard as execution context.
-	 */
-	@Override
-	public boolean performFinish() {
-		final String containerName = page.getContainerName();
-		final String fileName = page.getFileName();
-		IRunnableWithProgress op = new IRunnableWithProgress() {
-			public void run(IProgressMonitor monitor) throws InvocationTargetException {
-				try {
-					doFinish(containerName, fileName, monitor);
-				} catch (CoreException e) {
-					throw new InvocationTargetException(e);
-				} finally {
-					monitor.done();
-				}
-			}
-		};
-		try {
-			getContainer().run(true, false, op);
-		} catch (InterruptedException e) {
-			return false;
-		} catch (InvocationTargetException e) {
-			Throwable realException = e.getTargetException();
-			MessageDialog.openError(getShell(), "Error", realException.getMessage());
-			return false;
-		}
-		return true;
-	}
-	
-	/**
-	 * The worker method. It will find the container, create the
-	 * file if missing or just replace its contents, and open
-	 * the editor on the newly created file.
-	 */
-
-	private void doFinish(
-		String containerName,
-		String fileName,
-		IProgressMonitor monitor)
-		throws CoreException {
-		// create a sample file
-		monitor.beginTask("Creating " + fileName, 2);
-		IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
-		IResource resource = root.findMember(new Path(containerName));
-		if (!resource.exists() || !(resource instanceof IContainer)) {
-			throwCoreException("Container \"" + containerName + "\" does not exist.");
-		}
-		IContainer container = (IContainer) resource;
-		final IFile file = container.getFile(new Path(fileName));
-		try {
-			InputStream stream = openContentStream();
-			if (file.exists()) {
-				file.setContents(stream, true, true, monitor);
-			} else {
-				file.create(stream, true, monitor);
-			}
-			stream.close();
-		} catch (IOException e) {
-		}
-		monitor.worked(1);
-		monitor.setTaskName("Opening file for editing...");
-		getShell().getDisplay().asyncExec(new Runnable() {
-			public void run() {
-				IWorkbenchPage page =
-					PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
-				try {
-					IDE.openEditor(page, file, true);
-				} catch (PartInitException e) {
-				}
-			}
-		});
-		monitor.worked(1);
-	}
-	
-	/**
-	 * We will initialize file contents with a sample text.
-	 */
-
-	private InputStream openContentStream() {
-		String contents =
-			"This is the initial file contents for *.json file that should be word-sorted in the Preview page of the multi-page editor";
-		return new ByteArrayInputStream(contents.getBytes());
-	}
-
-	private void throwCoreException(String message) throws CoreException {
-		IStatus status =
-			new Status(IStatus.ERROR, "eu.DECIDEh2020.optimus", IStatus.OK, message, null);
-		throw new CoreException(status);
-	}
-
-	/**
-	 * We will accept the selection in the workbench to see if
-	 * we can initialize from it.
-	 * @see IWorkbenchWizard#init(IWorkbench, IStructuredSelection)
-	 */
-	@Override
-	public void init(IWorkbench workbench, IStructuredSelection selection) {
-		this.selection = selection;
-	}
-}
\ No newline at end of file
diff --git a/OPTIMUS/eu.DECIDEh2020.optimus/src/eu/DECIDEh2020/optimus/wizards/OptimusWizardPage.java b/OPTIMUS/eu.DECIDEh2020.optimus/src/eu/DECIDEh2020/optimus/wizards/OptimusWizardPage.java
deleted file mode 100644
index 0c0c8eeeb15f685f8f976c3342ddf0a55e5f26f5..0000000000000000000000000000000000000000
--- a/OPTIMUS/eu.DECIDEh2020.optimus/src/eu/DECIDEh2020/optimus/wizards/OptimusWizardPage.java
+++ /dev/null
@@ -1,184 +0,0 @@
-package eu.DECIDEh2020.optimus.wizards;
-
-import org.eclipse.core.resources.IContainer;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.wizard.WizardPage;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.ui.dialogs.ContainerSelectionDialog;
-
-/**
- * The "New" wizard page allows setting the container for the new file as well
- * as the file name. The page will only accept file name without the extension
- * OR with the extension that matches the expected one (json).
- */
-
-public class OptimusWizardPage extends WizardPage {
-	private Text containerText;
-
-	private Text fileText;
-
-	private ISelection selection;
-
-	/**
-	 * Constructor for SampleNewWizardPage.
-	 * 
-	 * @param pageName
-	 */
-	public OptimusWizardPage(ISelection selection) {
-		super("wizardPage");
-		setTitle("Multi-page Editor File");
-		setDescription("This wizard creates a new file with *.json extension that can be opened by a multi-page editor.");
-		this.selection = selection;
-	}
-
-	@Override
-	public void createControl(Composite parent) {
-		Composite container = new Composite(parent, SWT.NULL);
-		GridLayout layout = new GridLayout();
-		container.setLayout(layout);
-		layout.numColumns = 3;
-		layout.verticalSpacing = 9;
-		Label label = new Label(container, SWT.NULL);
-		label.setText("&Container:");
-
-		containerText = new Text(container, SWT.BORDER | SWT.SINGLE);
-		GridData gd = new GridData(GridData.FILL_HORIZONTAL);
-		containerText.setLayoutData(gd);
-		containerText.addModifyListener(new ModifyListener() {
-			@Override
-			public void modifyText(ModifyEvent e) {
-				dialogChanged();
-			}
-		});
-
-		Button button = new Button(container, SWT.PUSH);
-		button.setText("Browse...");
-		button.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				handleBrowse();
-			}
-		});
-		label = new Label(container, SWT.NULL);
-		label.setText("&File name:");
-
-		fileText = new Text(container, SWT.BORDER | SWT.SINGLE);
-		gd = new GridData(GridData.FILL_HORIZONTAL);
-		fileText.setLayoutData(gd);
-		fileText.addModifyListener(new ModifyListener() {
-			public void modifyText(ModifyEvent e) {
-				dialogChanged();
-			}
-		});
-		initialize();
-		dialogChanged();
-		setControl(container);
-	}
-
-	/**
-	 * Tests if the current workbench selection is a suitable container to use.
-	 */
-
-	private void initialize() {
-		if (selection != null && selection.isEmpty() == false
-				&& selection instanceof IStructuredSelection) {
-			IStructuredSelection ssel = (IStructuredSelection) selection;
-			if (ssel.size() > 1)
-				return;
-			Object obj = ssel.getFirstElement();
-			if (obj instanceof IResource) {
-				IContainer container;
-				if (obj instanceof IContainer)
-					container = (IContainer) obj;
-				else
-					container = ((IResource) obj).getParent();
-				containerText.setText(container.getFullPath().toString());
-			}
-		}
-		fileText.setText("new_file.json");
-	}
-
-	/**
-	 * Uses the standard container selection dialog to choose the new value for
-	 * the container field.
-	 */
-
-	private void handleBrowse() {
-		ContainerSelectionDialog dialog = new ContainerSelectionDialog(
-				getShell(), ResourcesPlugin.getWorkspace().getRoot(), false,
-				"Select new file container");
-		if (dialog.open() == ContainerSelectionDialog.OK) {
-			Object[] result = dialog.getResult();
-			if (result.length == 1) {
-				containerText.setText(((Path) result[0]).toString());
-			}
-		}
-	}
-
-	/**
-	 * Ensures that both text fields are set.
-	 */
-
-	private void dialogChanged() {
-		IResource container = ResourcesPlugin.getWorkspace().getRoot()
-				.findMember(new Path(getContainerName()));
-		String fileName = getFileName();
-
-		if (getContainerName().length() == 0) {
-			updateStatus("File container must be specified");
-			return;
-		}
-		if (container == null
-				|| (container.getType() & (IResource.PROJECT | IResource.FOLDER)) == 0) {
-			updateStatus("File container must exist");
-			return;
-		}
-		if (!container.isAccessible()) {
-			updateStatus("Project must be writable");
-			return;
-		}
-		if (fileName.length() == 0) {
-			updateStatus("File name must be specified");
-			return;
-		}
-		if (fileName.replace('\\', '/').indexOf('/', 1) > 0) {
-			updateStatus("File name must be valid");
-			return;
-		}
-		int dotLoc = fileName.lastIndexOf('.');
-		if (dotLoc != -1) {
-			String ext = fileName.substring(dotLoc + 1);
-			if (ext.equalsIgnoreCase("json") == false) {
-				updateStatus("File extension must be \"json\"");
-				return;
-			}
-		}
-		updateStatus(null);
-	}
-
-	private void updateStatus(String message) {
-		setErrorMessage(message);
-		setPageComplete(message == null);
-	}
-
-	public String getContainerName() {
-		return containerText.getText();
-	}
-
-	public String getFileName() {
-		return fileText.getText();
-	}
-}
\ No newline at end of file
diff --git a/OPTIMUS/eu.DECIDEh2020.optimus/src/org/eclipse/wb/swt/SWTResourceManager.java b/OPTIMUS/eu.DECIDEh2020.optimus/src/org/eclipse/wb/swt/SWTResourceManager.java
deleted file mode 100644
index d8a285807adcefed53ca8b9d3af0f7d9881e1a13..0000000000000000000000000000000000000000
--- a/OPTIMUS/eu.DECIDEh2020.optimus/src/org/eclipse/wb/swt/SWTResourceManager.java
+++ /dev/null
@@ -1,447 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2011 Google, Inc.
- * 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
- *
- * Contributors:
- *    Google, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wb.swt;
-
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.Cursor;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.graphics.FontData;
-import org.eclipse.swt.graphics.GC;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.ImageData;
-import org.eclipse.swt.graphics.RGB;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.widgets.Display;
-
-/**
- * Utility class for managing OS resources associated with SWT controls such as colors, fonts, images, etc.
- * <p>
- * !!! IMPORTANT !!! Application code must explicitly invoke the <code>dispose()</code> method to release the
- * operating system resources managed by cached objects when those objects and OS resources are no longer
- * needed (e.g. on application shutdown)
- * <p>
- * This class may be freely distributed as part of any application or plugin.
- * <p>
- * @author scheglov_ke
- * @author Dan Rubel
- */
-public class SWTResourceManager {
-	////////////////////////////////////////////////////////////////////////////
-	//
-	// Color
-	//
-	////////////////////////////////////////////////////////////////////////////
-	private static Map<RGB, Color> m_colorMap = new HashMap<RGB, Color>();
-	/**
-	 * Returns the system {@link Color} matching the specific ID.
-	 * 
-	 * @param systemColorID
-	 *            the ID value for the color
-	 * @return the system {@link Color} matching the specific ID
-	 */
-	public static Color getColor(int systemColorID) {
-		Display display = Display.getCurrent();
-		return display.getSystemColor(systemColorID);
-	}
-	/**
-	 * Returns a {@link Color} given its red, green and blue component values.
-	 * 
-	 * @param r
-	 *            the red component of the color
-	 * @param g
-	 *            the green component of the color
-	 * @param b
-	 *            the blue component of the color
-	 * @return the {@link Color} matching the given red, green and blue component values
-	 */
-	public static Color getColor(int r, int g, int b) {
-		return getColor(new RGB(r, g, b));
-	}
-	/**
-	 * Returns a {@link Color} given its RGB value.
-	 * 
-	 * @param rgb
-	 *            the {@link RGB} value of the color
-	 * @return the {@link Color} matching the RGB value
-	 */
-	public static Color getColor(RGB rgb) {
-		Color color = m_colorMap.get(rgb);
-		if (color == null) {
-			Display display = Display.getCurrent();
-			color = new Color(display, rgb);
-			m_colorMap.put(rgb, color);
-		}
-		return color;
-	}
-	/**
-	 * Dispose of all the cached {@link Color}'s.
-	 */
-	public static void disposeColors() {
-		for (Color color : m_colorMap.values()) {
-			color.dispose();
-		}
-		m_colorMap.clear();
-	}
-	////////////////////////////////////////////////////////////////////////////
-	//
-	// Image
-	//
-	////////////////////////////////////////////////////////////////////////////
-	/**
-	 * Maps image paths to images.
-	 */
-	private static Map<String, Image> m_imageMap = new HashMap<String, Image>();
-	/**
-	 * Returns an {@link Image} encoded by the specified {@link InputStream}.
-	 * 
-	 * @param stream
-	 *            the {@link InputStream} encoding the image data
-	 * @return the {@link Image} encoded by the specified input stream
-	 */
-	protected static Image getImage(InputStream stream) throws IOException {
-		try {
-			Display display = Display.getCurrent();
-			ImageData data = new ImageData(stream);
-			if (data.transparentPixel > 0) {
-				return new Image(display, data, data.getTransparencyMask());
-			}
-			return new Image(display, data);
-		} finally {
-			stream.close();
-		}
-	}
-	/**
-	 * Returns an {@link Image} stored in the file at the specified path.
-	 * 
-	 * @param path
-	 *            the path to the image file
-	 * @return the {@link Image} stored in the file at the specified path
-	 */
-	public static Image getImage(String path) {
-		Image image = m_imageMap.get(path);
-		if (image == null) {
-			try {
-				image = getImage(new FileInputStream(path));
-				m_imageMap.put(path, image);
-			} catch (Exception e) {
-				image = getMissingImage();
-				m_imageMap.put(path, image);
-			}
-		}
-		return image;
-	}
-	/**
-	 * Returns an {@link Image} stored in the file at the specified path relative to the specified class.
-	 * 
-	 * @param clazz
-	 *            the {@link Class} relative to which to find the image
-	 * @param path
-	 *            the path to the image file, if starts with <code>'/'</code>
-	 * @return the {@link Image} stored in the file at the specified path
-	 */
-	public static Image getImage(Class<?> clazz, String path) {
-		String key = clazz.getName() + '|' + path;
-		Image image = m_imageMap.get(key);
-		if (image == null) {
-			try {
-				image = getImage(clazz.getResourceAsStream(path));
-				m_imageMap.put(key, image);
-			} catch (Exception e) {
-				image = getMissingImage();
-				m_imageMap.put(key, image);
-			}
-		}
-		return image;
-	}
-	private static final int MISSING_IMAGE_SIZE = 10;
-	/**
-	 * @return the small {@link Image} that can be used as placeholder for missing image.
-	 */
-	private static Image getMissingImage() {
-		Image image = new Image(Display.getCurrent(), MISSING_IMAGE_SIZE, MISSING_IMAGE_SIZE);
-		//
-		GC gc = new GC(image);
-		gc.setBackground(getColor(SWT.COLOR_RED));
-		gc.fillRectangle(0, 0, MISSING_IMAGE_SIZE, MISSING_IMAGE_SIZE);
-		gc.dispose();
-		//
-		return image;
-	}
-	/**
-	 * Style constant for placing decorator image in top left corner of base image.
-	 */
-	public static final int TOP_LEFT = 1;
-	/**
-	 * Style constant for placing decorator image in top right corner of base image.
-	 */
-	public static final int TOP_RIGHT = 2;
-	/**
-	 * Style constant for placing decorator image in bottom left corner of base image.
-	 */
-	public static final int BOTTOM_LEFT = 3;
-	/**
-	 * Style constant for placing decorator image in bottom right corner of base image.
-	 */
-	public static final int BOTTOM_RIGHT = 4;
-	/**
-	 * Internal value.
-	 */
-	protected static final int LAST_CORNER_KEY = 5;
-	/**
-	 * Maps images to decorated images.
-	 */
-	@SuppressWarnings("unchecked")
-	private static Map<Image, Map<Image, Image>>[] m_decoratedImageMap = new Map[LAST_CORNER_KEY];
-	/**
-	 * Returns an {@link Image} composed of a base image decorated by another image.
-	 * 
-	 * @param baseImage
-	 *            the base {@link Image} that should be decorated
-	 * @param decorator
-	 *            the {@link Image} to decorate the base image
-	 * @return {@link Image} The resulting decorated image
-	 */
-	public static Image decorateImage(Image baseImage, Image decorator) {
-		return decorateImage(baseImage, decorator, BOTTOM_RIGHT);
-	}
-	/**
-	 * Returns an {@link Image} composed of a base image decorated by another image.
-	 * 
-	 * @param baseImage
-	 *            the base {@link Image} that should be decorated
-	 * @param decorator
-	 *            the {@link Image} to decorate the base image
-	 * @param corner
-	 *            the corner to place decorator image
-	 * @return the resulting decorated {@link Image}
-	 */
-	public static Image decorateImage(final Image baseImage, final Image decorator, final int corner) {
-		if (corner <= 0 || corner >= LAST_CORNER_KEY) {
-			throw new IllegalArgumentException("Wrong decorate corner");
-		}
-		Map<Image, Map<Image, Image>> cornerDecoratedImageMap = m_decoratedImageMap[corner];
-		if (cornerDecoratedImageMap == null) {
-			cornerDecoratedImageMap = new HashMap<Image, Map<Image, Image>>();
-			m_decoratedImageMap[corner] = cornerDecoratedImageMap;
-		}
-		Map<Image, Image> decoratedMap = cornerDecoratedImageMap.get(baseImage);
-		if (decoratedMap == null) {
-			decoratedMap = new HashMap<Image, Image>();
-			cornerDecoratedImageMap.put(baseImage, decoratedMap);
-		}
-		//
-		Image result = decoratedMap.get(decorator);
-		if (result == null) {
-			Rectangle bib = baseImage.getBounds();
-			Rectangle dib = decorator.getBounds();
-			//
-			result = new Image(Display.getCurrent(), bib.width, bib.height);
-			//
-			GC gc = new GC(result);
-			gc.drawImage(baseImage, 0, 0);
-			if (corner == TOP_LEFT) {
-				gc.drawImage(decorator, 0, 0);
-			} else if (corner == TOP_RIGHT) {
-				gc.drawImage(decorator, bib.width - dib.width, 0);
-			} else if (corner == BOTTOM_LEFT) {
-				gc.drawImage(decorator, 0, bib.height - dib.height);
-			} else if (corner == BOTTOM_RIGHT) {
-				gc.drawImage(decorator, bib.width - dib.width, bib.height - dib.height);
-			}
-			gc.dispose();
-			//
-			decoratedMap.put(decorator, result);
-		}
-		return result;
-	}
-	/**
-	 * Dispose all of the cached {@link Image}'s.
-	 */
-	public static void disposeImages() {
-		// dispose loaded images
-		{
-			for (Image image : m_imageMap.values()) {
-				image.dispose();
-			}
-			m_imageMap.clear();
-		}
-		// dispose decorated images
-		for (int i = 0; i < m_decoratedImageMap.length; i++) {
-			Map<Image, Map<Image, Image>> cornerDecoratedImageMap = m_decoratedImageMap[i];
-			if (cornerDecoratedImageMap != null) {
-				for (Map<Image, Image> decoratedMap : cornerDecoratedImageMap.values()) {
-					for (Image image : decoratedMap.values()) {
-						image.dispose();
-					}
-					decoratedMap.clear();
-				}
-				cornerDecoratedImageMap.clear();
-			}
-		}
-	}
-	////////////////////////////////////////////////////////////////////////////
-	//
-	// Font
-	//
-	////////////////////////////////////////////////////////////////////////////
-	/**
-	 * Maps font names to fonts.
-	 */
-	private static Map<String, Font> m_fontMap = new HashMap<String, Font>();
-	/**
-	 * Maps fonts to their bold versions.
-	 */
-	private static Map<Font, Font> m_fontToBoldFontMap = new HashMap<Font, Font>();
-	/**
-	 * Returns a {@link Font} based on its name, height and style.
-	 * 
-	 * @param name
-	 *            the name of the font
-	 * @param height
-	 *            the height of the font
-	 * @param style
-	 *            the style of the font
-	 * @return {@link Font} The font matching the name, height and style
-	 */
-	public static Font getFont(String name, int height, int style) {
-		return getFont(name, height, style, false, false);
-	}
-	/**
-	 * Returns a {@link Font} based on its name, height and style. Windows-specific strikeout and underline
-	 * flags are also supported.
-	 * 
-	 * @param name
-	 *            the name of the font
-	 * @param size
-	 *            the size of the font
-	 * @param style
-	 *            the style of the font
-	 * @param strikeout
-	 *            the strikeout flag (warning: Windows only)
-	 * @param underline
-	 *            the underline flag (warning: Windows only)
-	 * @return {@link Font} The font matching the name, height, style, strikeout and underline
-	 */
-	public static Font getFont(String name, int size, int style, boolean strikeout, boolean underline) {
-		String fontName = name + '|' + size + '|' + style + '|' + strikeout + '|' + underline;
-		Font font = m_fontMap.get(fontName);
-		if (font == null) {
-			FontData fontData = new FontData(name, size, style);
-			if (strikeout || underline) {
-				try {
-					Class<?> logFontClass = Class.forName("org.eclipse.swt.internal.win32.LOGFONT"); //$NON-NLS-1$
-					Object logFont = FontData.class.getField("data").get(fontData); //$NON-NLS-1$
-					if (logFont != null && logFontClass != null) {
-						if (strikeout) {
-							logFontClass.getField("lfStrikeOut").set(logFont, Byte.valueOf((byte) 1)); //$NON-NLS-1$
-						}
-						if (underline) {
-							logFontClass.getField("lfUnderline").set(logFont, Byte.valueOf((byte) 1)); //$NON-NLS-1$
-						}
-					}
-				} catch (Throwable e) {
-					System.err.println("Unable to set underline or strikeout" + " (probably on a non-Windows platform). " + e); //$NON-NLS-1$ //$NON-NLS-2$
-				}
-			}
-			font = new Font(Display.getCurrent(), fontData);
-			m_fontMap.put(fontName, font);
-		}
-		return font;
-	}
-	/**
-	 * Returns a bold version of the given {@link Font}.
-	 * 
-	 * @param baseFont
-	 *            the {@link Font} for which a bold version is desired
-	 * @return the bold version of the given {@link Font}
-	 */
-	public static Font getBoldFont(Font baseFont) {
-		Font font = m_fontToBoldFontMap.get(baseFont);
-		if (font == null) {
-			FontData fontDatas[] = baseFont.getFontData();
-			FontData data = fontDatas[0];
-			font = new Font(Display.getCurrent(), data.getName(), data.getHeight(), SWT.BOLD);
-			m_fontToBoldFontMap.put(baseFont, font);
-		}
-		return font;
-	}
-	/**
-	 * Dispose all of the cached {@link Font}'s.
-	 */
-	public static void disposeFonts() {
-		// clear fonts
-		for (Font font : m_fontMap.values()) {
-			font.dispose();
-		}
-		m_fontMap.clear();
-		// clear bold fonts
-		for (Font font : m_fontToBoldFontMap.values()) {
-			font.dispose();
-		}
-		m_fontToBoldFontMap.clear();
-	}
-	////////////////////////////////////////////////////////////////////////////
-	//
-	// Cursor
-	//
-	////////////////////////////////////////////////////////////////////////////
-	/**
-	 * Maps IDs to cursors.
-	 */
-	private static Map<Integer, Cursor> m_idToCursorMap = new HashMap<Integer, Cursor>();
-	/**
-	 * Returns the system cursor matching the specific ID.
-	 * 
-	 * @param id
-	 *            int The ID value for the cursor
-	 * @return Cursor The system cursor matching the specific ID
-	 */
-	public static Cursor getCursor(int id) {
-		Integer key = Integer.valueOf(id);
-		Cursor cursor = m_idToCursorMap.get(key);
-		if (cursor == null) {
-			cursor = new Cursor(Display.getDefault(), id);
-			m_idToCursorMap.put(key, cursor);
-		}
-		return cursor;
-	}
-	/**
-	 * Dispose all of the cached cursors.
-	 */
-	public static void disposeCursors() {
-		for (Cursor cursor : m_idToCursorMap.values()) {
-			cursor.dispose();
-		}
-		m_idToCursorMap.clear();
-	}
-	////////////////////////////////////////////////////////////////////////////
-	//
-	// General
-	//
-	////////////////////////////////////////////////////////////////////////////
-	/**
-	 * Dispose of cached objects and their underlying OS resources. This should only be called when the cached
-	 * objects are no longer needed (e.g. on application shutdown).
-	 */
-	public static void dispose() {
-		disposeColors();
-		disposeImages();
-		disposeFonts();
-		disposeCursors();
-	}
-}
\ No newline at end of file
diff --git a/OPTIMUS/eu.decideh2020.int.optimus.server.src.dvp/src/main/docker/.dockerignore b/OPTIMUS/eu.decideh2020.int.optimus.server.src.dvp/src/main/docker/.dockerignore
new file mode 100644
index 0000000000000000000000000000000000000000..d3064226ba3aa9312002c53467a04ecccec42ef5
--- /dev/null
+++ b/OPTIMUS/eu.decideh2020.int.optimus.server.src.dvp/src/main/docker/.dockerignore
@@ -0,0 +1,3 @@
+node_modules/
+node/
+bower_components/
\ No newline at end of file
diff --git a/OPTIMUS/eu.decideh2020.int.optimus.server.src.dvp/src/main/docker/.gitignore b/OPTIMUS/eu.decideh2020.int.optimus.server.src.dvp/src/main/docker/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..59a4e66eaea0a4fdb51672d97673ad79089ec530
--- /dev/null
+++ b/OPTIMUS/eu.decideh2020.int.optimus.server.src.dvp/src/main/docker/.gitignore
@@ -0,0 +1 @@
+/sources
\ No newline at end of file
diff --git a/OPTIMUS/eu.decideh2020.int.optimus.server.src.dvp/src/main/docker/Dockerfile b/OPTIMUS/eu.decideh2020.int.optimus.server.src.dvp/src/main/docker/Dockerfile
index 8eadc7bc64deab3331b3cfe3c55a1933e4d55dbb..86fa9944a1369237b8f73dec2d75cdc84fc82b8d 100644
--- a/OPTIMUS/eu.decideh2020.int.optimus.server.src.dvp/src/main/docker/Dockerfile
+++ b/OPTIMUS/eu.decideh2020.int.optimus.server.src.dvp/src/main/docker/Dockerfile
@@ -1,20 +1,34 @@
-FROM maven:3.5.3-jdk-8 as builder
+FROM maven:3.5.4 as builder
 
-#COPY sources /sources
-#COPY sources-appmanager /sources-appmanager
-#COPY .m2 /root/.m2
-#
 ARG GIT_CREDENTIALS
-ARG APPMANAGER_VERSION=4a0ea6cefb05af77565ffbdb6fa5b29e695860ec
-ARG OPTIMUS_VERSION=3ff6333b5d90743014fed475707d505e6f02f3d7
-
-COPY downloadsources.sh /downloadsources.sh
-COPY maveninstall.sh /maveninstall.sh
-RUN chmod +x /downloadsources.sh && \
-    sh ./downloadsources.sh && \
-    chmod +x /maveninstall.sh && \
-    sh ./maveninstall.sh 
-
-WORKDIR /OPTIMUS/eu.decideh2020.optimus.server
-CMD ["mvn","jetty:run","-Dmaven.test.skip=true"]
-#cd target/*.war /ROOT.war
\ No newline at end of file
+ARG ARTIFACTORY_USE
+ARG ARTIFACTORY_USER
+ARG ARTIFACTORY_PASSWORD
+ARG ARTIFACTORY_MAVEN_REPO
+ARG APP_MANAGER_GIT_REF=2ab0422cde8ebc189cfc369e67bafe2a2af72957
+ARG ACSMI_BACKEND_CLIENT_GIT_REF=9c38ad2a7ac52463929d4623838de9eb3fd88632
+ARG OPTIMUS_GIT_REF=98736c5dd43c750df5642c932c881d533f7c6896
+
+ARG VERSION
+
+COPY . /
+
+RUN \
+	chmod 750 /*.sh && \
+	. /configartifactorymaven.sh && \
+	python /processSourcesJson.py && \
+	rm -rf /sources
+
+FROM jetty:9.3.24-alpine
+
+ENV USER_GIT=user
+ENV TOKEN_GIT=password
+
+COPY --from=builder /app.war /var/lib/jetty/webapps/ROOT.war
+
+USER root
+RUN  chown jetty:jetty /var/lib/jetty/webapps/ROOT.war
+USER jetty
+
+COPY /etc/decide /etc/decide
+
diff --git a/OPTIMUS/eu.decideh2020.int.optimus.server.src.dvp/src/main/docker/config.sh b/OPTIMUS/eu.decideh2020.int.optimus.server.src.dvp/src/main/docker/config.sh
new file mode 100644
index 0000000000000000000000000000000000000000..165fe3ec35541ad40ecf279c15b152acfc95432b
--- /dev/null
+++ b/OPTIMUS/eu.decideh2020.int.optimus.server.src.dvp/src/main/docker/config.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+sourcespath=$1
+project=$2
+echo "sourcespath $sourcespath"
+echo "project $project"
+
+#no config needed
+#rm -rf ${xpref}
\ No newline at end of file
diff --git a/OPTIMUS/eu.decideh2020.int.optimus.server.src.dvp/src/main/docker/configartifactorymaven.sh b/OPTIMUS/eu.decideh2020.int.optimus.server.src.dvp/src/main/docker/configartifactorymaven.sh
new file mode 100644
index 0000000000000000000000000000000000000000..1fe2d19e9e517411406ad9d1d44766503a1bec7d
--- /dev/null
+++ b/OPTIMUS/eu.decideh2020.int.optimus.server.src.dvp/src/main/docker/configartifactorymaven.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+if [ "$ARTIFACTORY_USE" != "Y" ]
+then
+  echo "Without Artifactory"
+else
+
+  echo "With Artifactory"
+  cp /settings.xml /usr/share/maven/conf/.
+  mkdir /root/.m2
+  cp /settings-security.xml /root/.m2/.
+  export MAVEN_USER="$ARTIFACTORY_USER"
+  export MASTER_PASSWORD="$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1)"
+  export MAVEN_MASTER_PASSWORD="$(mvn --encrypt-master-password $MASTER_PASSWORD)"
+
+  sed -i "s@\${.*}@$MAVEN_MASTER_PASSWORD@g" /root/.m2/settings-security.xml
+  export MAVEN_PASSWORD="$(mvn --encrypt-password $ARTIFACTORY_PASSWORD)"
+
+fi
+
+#rm -rf /root/.m2/repository/ #to test that it works
diff --git a/OPTIMUS/eu.decideh2020.int.optimus.server.src.dvp/src/main/docker/downloadsources.sh b/OPTIMUS/eu.decideh2020.int.optimus.server.src.dvp/src/main/docker/downloadsources.sh
deleted file mode 100644
index 6e75dd735336dd502446acd59824458766b080c7..0000000000000000000000000000000000000000
--- a/OPTIMUS/eu.decideh2020.int.optimus.server.src.dvp/src/main/docker/downloadsources.sh
+++ /dev/null
@@ -1,9 +0,0 @@
-cd /
-git clone https://git.code.tecnalia.com/DECIDE_Public/DECIDE_Components.git AppController
-cd /AppController
-git checkout $APPMANAGER_VERSION
-cd /
-git clone https://git.code.tecnalia.com/DECIDE_Public/DECIDE_Components.git OPTIMUS
-cd /OPTIMUS
-git checkout $OPTIMUS_VERSION
-
diff --git a/OPTIMUS/eu.decideh2020.int.optimus.server.src.dvp/src/main/docker/etc/decide/.gitkeep b/OPTIMUS/eu.decideh2020.int.optimus.server.src.dvp/src/main/docker/etc/decide/.gitkeep
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/OPTIMUS/eu.decideh2020.int.optimus.server.src.dvp/src/main/docker/etc/decide/optimus.server.properties b/OPTIMUS/eu.decideh2020.int.optimus.server.src.dvp/src/main/docker/etc/decide/optimus.server.properties
new file mode 100644
index 0000000000000000000000000000000000000000..b6eeef8b07bdf3e14f017b0b8fda5f2cb0637ad4
--- /dev/null
+++ b/OPTIMUS/eu.decideh2020.int.optimus.server.src.dvp/src/main/docker/etc/decide/optimus.server.properties
@@ -0,0 +1,4 @@
+; localAppDesc="D:\\W\2017-Decide\\workspace\\AppsDescFolder\\"
+credentialsmode=environment
+;credentialsmode=vault
+; credentiales de vault
diff --git a/OPTIMUS/eu.decideh2020.int.optimus.server.src.dvp/src/main/docker/maveninstall.sh b/OPTIMUS/eu.decideh2020.int.optimus.server.src.dvp/src/main/docker/maveninstall.sh
deleted file mode 100644
index 9947115f74837825c17e41978d84cf8405b7dda3..0000000000000000000000000000000000000000
--- a/OPTIMUS/eu.decideh2020.int.optimus.server.src.dvp/src/main/docker/maveninstall.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-cd /AppController
-mvn install -Dmaven.test.skip=true
-cd /OPTIMUS/ACSmI-client
-mvn install -Dmaven.test.skip=true
-cd /OPTIMUS/eu.decideh2020.optimus.server
-mvn install -Dmaven.test.skip=true
diff --git a/OPTIMUS/eu.decideh2020.int.optimus.server.src.dvp/src/main/docker/moveappwar.sh b/OPTIMUS/eu.decideh2020.int.optimus.server.src.dvp/src/main/docker/moveappwar.sh
new file mode 100644
index 0000000000000000000000000000000000000000..07ef1909223c63502219db61c47130b3e7ddfc75
--- /dev/null
+++ b/OPTIMUS/eu.decideh2020.int.optimus.server.src.dvp/src/main/docker/moveappwar.sh
@@ -0,0 +1,6 @@
+#!/bin/bash
+sourcespath=$1
+project=$2
+echo "sourcespath $sourcespath"
+echo "project $project"
+cp $sourcespath/$project/target/*.war /app.war || true
diff --git a/OPTIMUS/eu.decideh2020.int.optimus.server.src.dvp/src/main/docker/processSource.sh b/OPTIMUS/eu.decideh2020.int.optimus.server.src.dvp/src/main/docker/processSource.sh
new file mode 100644
index 0000000000000000000000000000000000000000..433cea8f24c7f9d95a91514de85b3e2bd93a71fa
--- /dev/null
+++ b/OPTIMUS/eu.decideh2020.int.optimus.server.src.dvp/src/main/docker/processSource.sh
@@ -0,0 +1,50 @@
+#!/bin/bash -e
+
+if [ $# -lt 5 ]; then
+    echo "Arguments required: dockerRepoUrl projectPath gitRef mavenParams"
+fi
+
+dockerRepoUrl=$1
+projectPath=$2
+gitRef=$3
+gitCredentials=$4
+mavenParams=$5
+repofix=$dockerRepoUrl
+
+[ -d /sources ] || mkdir -p /sources
+
+#phase 1 clone repo if necesary
+repo_dir=`echo $dockerRepoUrl | sed 's%^.*/\([^/]*\)\.git$%\1%g'`
+echo "Git repository: $dockerRepoUrl"
+echo "repository dir: $repo_dir"
+if [ "$VERSION" != "local" ] && [ ! -d /sources/$repo_dir/.git ]; then
+	echo "Enter to clone repo..."
+	rm -rf /sources/$repo_dir/* > /dev/null 2>&1 || true
+	if [[ ! -z "$gitCredentials" ]]; then
+		repofix=${repofix/https:\/\//https:\/\/$gitCredentials@}
+	fi
+	git clone "$repofix" /sources/$repo_dir
+	echo "repository cloned"
+else
+	echo "repository found in local folder: $repo_dir"
+fi
+
+#phase 2 checkout right version
+if [ "$VERSION" != "local" ] && [ ! -z "$gitRef" ]; then
+	echo "checking out: $gitRef"
+	git -C /sources/$repo_dir checkout $gitRef --force
+fi
+
+#phase 3 config 
+/config.sh /sources/$repo_dir $projectPath
+
+#phase 4 mvn 
+#NOTE jhipster bower instalation requires a file /root/.bowerrc to be run as root
+if [[ ! -z "$mavenParams" ]]; then
+	echo "maven execution: -f sources/$repo_dir/$projectPath/pom.xml  $mavenParams"
+	mvn  -f /sources/$repo_dir/$projectPath/pom.xml $mavenParams || true
+	#because jhister
+fi
+
+#phase 5 move app war 
+/moveappwar.sh /sources/$repo_dir $projectPath
diff --git a/OPTIMUS/eu.decideh2020.int.optimus.server.src.dvp/src/main/docker/processSourcesJson.py b/OPTIMUS/eu.decideh2020.int.optimus.server.src.dvp/src/main/docker/processSourcesJson.py
new file mode 100644
index 0000000000000000000000000000000000000000..674930941ff948eaf85a0ec23dec4d79686f6f3c
--- /dev/null
+++ b/OPTIMUS/eu.decideh2020.int.optimus.server.src.dvp/src/main/docker/processSourcesJson.py
@@ -0,0 +1,9 @@
+import json
+import subprocess
+import os
+
+with open('/sources.json', 'r') as handle:
+    parsed = json.load(handle)
+    for source in parsed['sources']:
+        subprocess.check_call(['/processSource.sh',source['source']['repo'],source['source']['path'],os.getenv(source['source']['git_ref'],''),os.getenv(source['source']['git_credentials'],''),source['source']['maven']])
+
diff --git a/OPTIMUS/eu.decideh2020.int.optimus.server.src.dvp/src/main/docker/root/.m2/settings-security.xml b/OPTIMUS/eu.decideh2020.int.optimus.server.src.dvp/src/main/docker/root/.m2/settings-security.xml
new file mode 100644
index 0000000000000000000000000000000000000000..663d9c91ac87740dfecdba5f1da1c113d9379c6f
--- /dev/null
+++ b/OPTIMUS/eu.decideh2020.int.optimus.server.src.dvp/src/main/docker/root/.m2/settings-security.xml
@@ -0,0 +1,3 @@
+<settingsSecurity>
+<master>${env.MAVEN_MASTER_PASSWORD}</master>
+</settingsSecurity>
\ No newline at end of file
diff --git a/OPTIMUS/eu.decideh2020.int.optimus.server.src.dvp/src/main/docker/settings-security.xml b/OPTIMUS/eu.decideh2020.int.optimus.server.src.dvp/src/main/docker/settings-security.xml
new file mode 100644
index 0000000000000000000000000000000000000000..663d9c91ac87740dfecdba5f1da1c113d9379c6f
--- /dev/null
+++ b/OPTIMUS/eu.decideh2020.int.optimus.server.src.dvp/src/main/docker/settings-security.xml
@@ -0,0 +1,3 @@
+<settingsSecurity>
+<master>${env.MAVEN_MASTER_PASSWORD}</master>
+</settingsSecurity>
\ No newline at end of file
diff --git a/OPTIMUS/eu.decideh2020.int.optimus.server.src.dvp/src/main/docker/settings.xml b/OPTIMUS/eu.decideh2020.int.optimus.server.src.dvp/src/main/docker/settings.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0a4df6f659d664ce3eb0e4c6cfdfb8c5ccef3ee7
--- /dev/null
+++ b/OPTIMUS/eu.decideh2020.int.optimus.server.src.dvp/src/main/docker/settings.xml
@@ -0,0 +1,306 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+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.
+-->
+
+<!--
+ | This is the configuration file for Maven. It can be specified at two levels:
+ |
+ |  1. User Level. This settings.xml file provides configuration for a single user,
+ |                 and is normally provided in ${user.home}/.m2/settings.xml.
+ |
+ |                 NOTE: This location can be overridden with the CLI option:
+ |
+ |                 -s /path/to/user/settings.xml
+ |
+ |  2. Global Level. This settings.xml file provides configuration for all Maven
+ |                 users on a machine (assuming they're all using the same Maven
+ |                 installation). It's normally provided in
+ |                 ${maven.conf}/settings.xml.
+ |
+ |                 NOTE: This location can be overridden with the CLI option:
+ |
+ |                 -gs /path/to/global/settings.xml
+ |
+ | The sections in this sample file are intended to give you a running start at
+ | getting the most out of your Maven installation. Where appropriate, the default
+ | values (values used when the setting is not specified) are provided.
+ |
+ |-->
+<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
+          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
+  <!-- localRepository
+   | The path to the local repository maven will use to store artifacts.
+   |
+   | Default: ${user.home}/.m2/repository
+  <localRepository>/path/to/local/repo</localRepository>
+  -->
+
+  <!-- interactiveMode
+   | This will determine whether maven prompts you when it needs input. If set to false,
+   | maven will use a sensible default value, perhaps based on some other setting, for
+   | the parameter in question.
+   |
+   | Default: true
+  <interactiveMode>true</interactiveMode>
+  -->
+
+  <!-- offline
+   | Determines whether maven should attempt to connect to the network when executing a build.
+   | This will have an effect on artifact downloads, artifact deployment, and others.
+   |
+   | Default: false
+  <offline>false</offline>
+  -->
+
+  <!-- pluginGroups
+   | This is a list of additional group identifiers that will be searched when resolving plugins by their prefix, i.e.
+   | when invoking a command line like "mvn prefix:goal". Maven will automatically add the group identifiers
+   | "org.apache.maven.plugins" and "org.codehaus.mojo" if these are not already contained in the list.
+   |-->
+  <pluginGroups>
+    <!-- pluginGroup
+     | Specifies a further group identifier to use for plugin lookup.
+    <pluginGroup>com.your.plugins</pluginGroup>
+    -->
+  </pluginGroups>
+
+  <!-- proxies
+   | This is a list of proxies which can be used on this machine to connect to the network.
+   | Unless otherwise specified (by system property or command-line switch), the first proxy
+   | specification in this list marked as active will be used.
+   |-->
+  <proxies>
+    <!-- proxy
+     | Specification for one proxy, to be used in connecting to the network.
+     |
+    <proxy>
+      <id>optional</id>
+      <active>true</active>
+      <protocol>http</protocol>
+      <username>proxyuser</username>
+      <password>proxypass</password>
+      <host>proxy.host.net</host>
+      <port>80</port>
+      <nonProxyHosts>local.net|some.host.com</nonProxyHosts>
+    </proxy>
+    -->
+  </proxies>
+
+  <!-- servers
+   | This is a list of authentication profiles, keyed by the server-id used within the system.
+   | Authentication profiles can be used whenever maven must make a connection to a remote server.
+   |-->
+  <servers>
+    <server>
+      <username>${env.MAVEN_USER}</username>
+      <password>${env.MAVEN_PASSWORD}</password>
+      <id>central</id>
+    </server>
+    <server>
+      <username>${env.MAVEN_USER}</username>
+      <password>${env.MAVEN_PASSWORD}</password>
+      <id>snapshots</id>
+    </server>
+  
+    <!-- server
+     | Specifies the authentication information to use when connecting to a particular server, identified by
+     | a unique name within the system (referred to by the 'id' attribute below).
+     |
+     | NOTE: You should either specify username/password OR privateKey/passphrase, since these pairings are
+     |       used together.
+     |
+    <server>
+      <id>deploymentRepo</id>
+      <username>repouser</username>
+      <password>repopwd</password>
+    </server>
+    -->
+
+    <!-- Another sample, using keys to authenticate.
+    <server>
+      <id>siteServer</id>
+      <privateKey>/path/to/private/key</privateKey>
+      <passphrase>optional; leave empty if not used.</passphrase>
+    </server>
+    -->
+  </servers>
+
+  <!-- mirrors
+   | This is a list of mirrors to be used in downloading artifacts from remote repositories.
+   |
+   | It works like this: a POM may declare a repository to use in resolving certain artifacts.
+   | However, this repository may have problems with heavy traffic at times, so people have mirrored
+   | it to several places.
+   |
+   | That repository definition will have a unique id, so we can create a mirror reference for that
+   | repository, to be used as an alternate download site. The mirror site will be the preferred
+   | server for that repository.
+   |-->
+  <mirrors>
+    <!-- mirror
+     | Specifies a repository mirror site to use instead of a given repository. The repository that
+     | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
+     | for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
+     |
+    <mirror>
+      <id>mirrorId</id>
+      <mirrorOf>repositoryId</mirrorOf>
+      <name>Human Readable Name for this Mirror.</name>
+      <url>http://my.repository.com/repo/path</url>
+    </mirror>
+     -->
+  </mirrors>
+
+  <!-- profiles
+   | This is a list of profiles which can be activated in a variety of ways, and which can modify
+   | the build process. Profiles provided in the settings.xml are intended to provide local machine-
+   | specific paths and repository locations which allow the build to work in the local environment.
+   |
+   | For example, if you have an integration testing plugin - like cactus - that needs to know where
+   | your Tomcat instance is installed, you can provide a variable here such that the variable is
+   | dereferenced during the build process to configure the cactus plugin.
+   |
+   | As noted above, profiles can be activated in a variety of ways. One way - the activeProfiles
+   | section of this document (settings.xml) - will be discussed later. Another way essentially
+   | relies on the detection of a system property, either matching a particular value for the property,
+   | or merely testing its existence. Profiles can also be activated by JDK version prefix, where a
+   | value of '1.4' might activate a profile when the build is executed on a JDK version of '1.4.2_07'.
+   | Finally, the list of active profiles can be specified directly from the command line.
+   |
+   | NOTE: For profiles defined in the settings.xml, you are restricted to specifying only artifact
+   |       repositories, plugin repositories, and free-form properties to be used as configuration
+   |       variables for plugins in the POM.
+   |
+   |-->
+  <profiles>
+    <profile>
+      <repositories>
+        <repository>
+          <snapshots>
+            <enabled>false</enabled>
+          </snapshots>
+          <id>central</id>
+          <name>${env.ARTIFACTORY_MAVEN_REPO}</name>
+          <url>https://artifact.tecnalia.com:443/${env.ARTIFACTORY_MAVEN_REPO}</url>
+        </repository>
+        <repository>
+          <snapshots />
+          <id>snapshots</id>
+          <name>${env.ARTIFACTORY_MAVEN_REPO}</name>
+          <url>https://artifact.tecnalia.com:443/${env.ARTIFACTORY_MAVEN_REPO}</url>
+        </repository>
+      </repositories>
+      <pluginRepositories>
+        <pluginRepository>
+          <snapshots>
+            <enabled>false</enabled>
+          </snapshots>
+          <id>central</id>
+          <name>${env.ARTIFACTORY_MAVEN_REPO}</name>
+          <url>https://artifact.tecnalia.com:443/${env.ARTIFACTORY_MAVEN_REPO}</url>
+        </pluginRepository>
+        <pluginRepository>
+          <snapshots />
+          <id>snapshots</id>
+          <name>${env.ARTIFACTORY_MAVEN_REPO}</name>
+          <url>https://artifact.tecnalia.com:443/${env.ARTIFACTORY_MAVEN_REPO}</url>
+        </pluginRepository>
+      </pluginRepositories>
+      <id>artifactory</id>
+    </profile>
+    <!-- profile
+     | Specifies a set of introductions to the build process, to be activated using one or more of the
+     | mechanisms described above. For inheritance purposes, and to activate profiles via <activatedProfiles/>
+     | or the command line, profiles have to have an ID that is unique.
+     |
+     | An encouraged best practice for profile identification is to use a consistent naming convention
+     | for profiles, such as 'env-dev', 'env-test', 'env-production', 'user-jdcasey', 'user-brett', etc.
+     | This will make it more intuitive to understand what the set of introduced profiles is attempting
+     | to accomplish, particularly when you only have a list of profile id's for debug.
+     |
+     | This profile example uses the JDK version to trigger activation, and provides a JDK-specific repo.
+    <profile>
+      <id>jdk-1.4</id>
+
+      <activation>
+        <jdk>1.4</jdk>
+      </activation>
+
+      <repositories>
+        <repository>
+          <id>jdk14</id>
+          <name>Repository for JDK 1.4 builds</name>
+          <url>http://www.myhost.com/maven/jdk14</url>
+          <layout>default</layout>
+          <snapshotPolicy>always</snapshotPolicy>
+        </repository>
+      </repositories>
+    </profile>
+    -->
+
+    <!--
+     | Here is another profile, activated by the system property 'target-env' with a value of 'dev',
+     | which provides a specific path to the Tomcat instance. To use this, your plugin configuration
+     | might hypothetically look like:
+     |
+     | ...
+     | <plugin>
+     |   <groupId>org.myco.myplugins</groupId>
+     |   <artifactId>myplugin</artifactId>
+     |
+     |   <configuration>
+     |     <tomcatLocation>${tomcatPath}</tomcatLocation>
+     |   </configuration>
+     | </plugin>
+     | ...
+     |
+     | NOTE: If you just wanted to inject this configuration whenever someone set 'target-env' to
+     |       anything, you could just leave off the <value/> inside the activation-property.
+     |
+    <profile>
+      <id>env-dev</id>
+
+      <activation>
+        <property>
+          <name>target-env</name>
+          <value>dev</value>
+        </property>
+      </activation>
+
+      <properties>
+        <tomcatPath>/path/to/tomcat/instance</tomcatPath>
+      </properties>
+    </profile>
+    -->
+  </profiles>
+
+  <activeProfiles>
+    <activeProfile>artifactory</activeProfile>
+  </activeProfiles>
+  <!-- activeProfiles
+   | List of profiles that are active for all builds.
+   |
+  <activeProfiles>
+    <activeProfile>alwaysActiveProfile</activeProfile>
+    <activeProfile>anotherAlwaysActiveProfile</activeProfile>
+  </activeProfiles>
+  -->
+</settings>
diff --git a/OPTIMUS/eu.decideh2020.int.optimus.server.src.dvp/src/main/docker/sources.json b/OPTIMUS/eu.decideh2020.int.optimus.server.src.dvp/src/main/docker/sources.json
new file mode 100644
index 0000000000000000000000000000000000000000..db4ebea995bc61402ce47b19f6272e599ee1f314
--- /dev/null
+++ b/OPTIMUS/eu.decideh2020.int.optimus.server.src.dvp/src/main/docker/sources.json
@@ -0,0 +1,31 @@
+{
+	"sources": [
+		{
+			"source": {
+				"repo": "ttps://git.code.tecnalia.com/DECIDE_Public/DECIDE_Components.git",
+				"path": "AppController",
+				"git_ref": "APP_MANAGER_GIT_REF",
+				"git_credentials": "GIT_CREDENTIALS",
+				"maven": "install -Dmaven.test.skip=true -DskipTests"
+			}
+		},
+		{
+			"source": {
+				"repo": "https://git.code.tecnalia.com/DECIDE_Public/DECIDE_Components.git",
+				"path": "ACSmI/Discovery/eu.decideh2020.acsmi.backend.services.client",
+				"git_ref": "ACSMI_BACKEND_CLIENT_GIT_REF",
+				"git_credentials": "GIT_CREDENTIALS",
+				"maven": "install -Dmaven.test.skip=true -DskipTests"
+			}
+		},
+		{
+			"source": {
+				"repo": "https://git.code.tecnalia.com/DECIDE_Public/DECIDE_Components.git",
+				"path": "OPTIMUS/eu.decideh2020.optimus.server",
+				"git_ref": "OPTIMUS_GIT_REF",
+				"git_credentials": "GIT_CREDENTIALS",
+				"maven": "package war:war -Dmaven.test.skip=true -DskipTests"
+			}
+		}
+	]
+} 
\ No newline at end of file
diff --git a/OPTIMUS/eu.decideh2020.optimus.client.osgifier/pom.xml b/OPTIMUS/eu.decideh2020.optimus.client.osgifier/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1ab3d14bea2f17f610711b8069efc24313f47e44
--- /dev/null
+++ b/OPTIMUS/eu.decideh2020.optimus.client.osgifier/pom.xml
@@ -0,0 +1,41 @@
+<project>
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>eu.decideh2020</groupId>
+    <artifactId>eu.decideh2020.optimus.client.osgi</artifactId>
+    <version>1.0.0-SNAPSHOT</version>
+    <packaging>bundle</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>eu.decideh2020</groupId>
+            <artifactId>optimus-client</artifactId>
+            <version>1.0.0</version>
+        </dependency>
+		<dependency>
+             <groupId>org.apache.cxf</groupId>
+            <artifactId>cxf-rt-rs-client</artifactId>
+            <version>3.1.11</version>
+        </dependency>
+   </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <version>3.0.1</version>
+                <extensions>true</extensions>
+
+                <configuration>
+                    <instructions>
+                        <Export-Package>*</Export-Package>
+                        <Embed-Dependency>*;scope=compile|runtime;inline=false</Embed-Dependency>
+                        <Embed-StripGroup>true</Embed-StripGroup>
+                        <Embed-Transitive>true</Embed-Transitive>
+                        <Import-Package></Import-Package>
+                    </instructions>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>
diff --git a/OPTIMUS/eu.decideh2020.optimus.client/pom.xml b/OPTIMUS/eu.decideh2020.optimus.client/pom.xml
index d99e9f65815ab77433393db93d2e14cd52168374..c4b6cec3c25fd1dd464540eaa6d37424419e9d7f 100644
--- a/OPTIMUS/eu.decideh2020.optimus.client/pom.xml
+++ b/OPTIMUS/eu.decideh2020.optimus.client/pom.xml
@@ -7,7 +7,7 @@
 <!--   <description>optimus simulation API documentation</description> -->
 <!--   <version>1.0.0</version> -->
     <groupId>eu.decideh2020</groupId>
-  <artifactId>optimus-client</artifactId>
+  <artifactId>eu.DECIDEh2020.optimus.client</artifactId>
   <packaging>jar</packaging>
   <version>2.0.0</version>
 
@@ -111,51 +111,8 @@
       <scope>test</scope>
     </dependency>
     <!-- CXF Client -->
-    <dependency>
-        <groupId>org.apache.cxf</groupId>
-        <artifactId>cxf-rt-rs-client</artifactId>
-        <version>${cxf-version}</version>
-        <scope>test</scope>
-    </dependency>
     
      <!-- CXF server -->
-    <dependency>
-        <groupId>org.apache.cxf</groupId>
-        <artifactId>cxf-rt-frontend-jaxrs</artifactId>
-        <version>${cxf-version}</version>
-        <scope>compile</scope>
-    </dependency>
-    <dependency>
-        <groupId>org.apache.cxf</groupId>
-        <artifactId>cxf-rt-rs-service-description</artifactId>
-        <version>${cxf-version}</version>
-        <scope>compile</scope>
-    </dependency>
-    <dependency>
-        <groupId>org.apache.cxf</groupId>
-        <artifactId>cxf-rt-ws-policy</artifactId>
-        <version>${cxf-version}</version>
-        <scope>compile</scope>
-    </dependency>
-    <dependency>
-        <groupId>org.apache.cxf</groupId>
-        <artifactId>cxf-rt-wsdl</artifactId>
-        <version>${cxf-version}</version>
-        <scope>compile</scope>
-         
-    </dependency>
-    <dependency>
-        <groupId>com.fasterxml.jackson.jaxrs</groupId>
-        <artifactId>jackson-jaxrs-json-provider</artifactId>
-        <version>${jackson-jaxrs-version}</version>
-        <scope>compile</scope>
-    </dependency>
-    <dependency>
-       <groupId>com.fasterxml.jackson.datatype</groupId>
-       <artifactId>jackson-datatype-joda</artifactId>
-       <version>${jackson-jaxrs-version}</version>
-       <scope>compile</scope>
-    </dependency>
     
   </dependencies>
   <repositories>
@@ -171,13 +128,16 @@
     <java.version>1.7</java.version>
     <maven.compiler.source>${java.version}</maven.compiler.source>
     <maven.compiler.target>${java.version}</maven.compiler.target>
-    <swagger-core-version>1.5.15</swagger-core-version>
+    <swagger-core-version>1.5.18</swagger-core-version>
     <jetty-version>9.2.9.v20150224</jetty-version>
     <junit-version>4.12</junit-version>
     <logback-version>1.1.7</logback-version>
     <servlet-api-version>2.5</servlet-api-version>
-    <cxf-version>3.1.11</cxf-version>
-    <jackson-jaxrs-version>2.9.5</jackson-jaxrs-version>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+<!--     <beanvalidation-version>1.1.0.Final</beanvalidation-version> -->
+    <cxf-version>3.2.1</cxf-version>
+    <jackson-jaxrs-version>2.9.1</jackson-jaxrs-version>
+    <project.build.sourceEncoding>UTF-8
+    </project.build.sourceEncoding>
+    
   </properties>
 </project>
diff --git a/OPTIMUS/eu.decideh2020.optimus.client/src/gen/java/eu/decideh2020/optimus/client/api/DefaultApi.java b/OPTIMUS/eu.decideh2020.optimus.client/src/gen/java/eu/decideh2020/optimus/client/api/DefaultApi.java
index adcc1a1e3eb2cbb4bb10355691726e6d7fe8e016..21d0243ae8e77875509b7c6702162ff19e284c72 100644
--- a/OPTIMUS/eu.decideh2020.optimus.client/src/gen/java/eu/decideh2020/optimus/client/api/DefaultApi.java
+++ b/OPTIMUS/eu.decideh2020.optimus.client/src/gen/java/eu/decideh2020/optimus/client/api/DefaultApi.java
@@ -11,7 +11,7 @@ import java.util.Map;
 import javax.ws.rs.*;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.MediaType;
-import org.apache.cxf.jaxrs.ext.multipart.*;
+//import org.apache.cxf.jaxrs.ext.multipart.*;
 
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
diff --git a/OPTIMUS/eu.decideh2020.optimus.client/target/eu.DECIDEh2020.optimus.client-2.0.0.jar b/OPTIMUS/eu.decideh2020.optimus.client/target/eu.DECIDEh2020.optimus.client-2.0.0.jar
new file mode 100644
index 0000000000000000000000000000000000000000..c8d5977bab4519f02778cdad7e93ce642bbe2428
Binary files /dev/null and b/OPTIMUS/eu.decideh2020.optimus.client/target/eu.DECIDEh2020.optimus.client-2.0.0.jar differ
diff --git a/OPTIMUS/eu.decideh2020.optimus.client/target/maven-archiver/pom.properties b/OPTIMUS/eu.decideh2020.optimus.client/target/maven-archiver/pom.properties
index edaa31b1b782936bc399080b945cc9b2458e28af..f281ccde31870a5850cb4615bd7f8c85a7e0229e 100644
--- a/OPTIMUS/eu.decideh2020.optimus.client/target/maven-archiver/pom.properties
+++ b/OPTIMUS/eu.decideh2020.optimus.client/target/maven-archiver/pom.properties
@@ -1,5 +1,5 @@
 #Generated by Maven
-#Fri Nov 16 10:14:52 CET 2018
+#Wed Mar 27 15:22:20 CET 2019
 version=2.0.0
 groupId=eu.decideh2020
-artifactId=optimus-client
+artifactId=eu.DECIDEh2020.optimus.client
diff --git a/OPTIMUS/eu.decideh2020.optimus.client/target/optimus-client-1.0.0.jar b/OPTIMUS/eu.decideh2020.optimus.client/target/optimus-client-1.0.0.jar
new file mode 100644
index 0000000000000000000000000000000000000000..0223b9edf56ac451ac37ac66e3832a321f39ae12
Binary files /dev/null and b/OPTIMUS/eu.decideh2020.optimus.client/target/optimus-client-1.0.0.jar differ
diff --git a/OPTIMUS/eu.decideh2020.optimus.client/target/optimus-client-2.0.0.jar b/OPTIMUS/eu.decideh2020.optimus.client/target/optimus-client-2.0.0.jar
index 1951b7bf72ceb0016a773053faf67fa55c138b6a..8329676e0428f0b658d24ada4711f5cd657e0287 100644
Binary files a/OPTIMUS/eu.decideh2020.optimus.client/target/optimus-client-2.0.0.jar and b/OPTIMUS/eu.decideh2020.optimus.client/target/optimus-client-2.0.0.jar differ
diff --git a/OPTIMUS/eu.decideh2020.optimus.server/pom.xml b/OPTIMUS/eu.decideh2020.optimus.server/pom.xml
index 57d9f106f0d20324a862570655c07241a82ceb0c..18510921cdf00de985429d13d1669328c6258614 100644
--- a/OPTIMUS/eu.decideh2020.optimus.server/pom.xml
+++ b/OPTIMUS/eu.decideh2020.optimus.server/pom.xml
@@ -98,8 +98,14 @@
       </resource>
      </resources>
   </build>
+  
   <dependencies>
-    <dependency>
+  <dependency>
+        <groupId>org.springframework.vault</groupId>
+        <artifactId>spring-vault-core</artifactId>
+        <version>2.0.1.RELEASE</version>
+    </dependency>
+      <dependency>
       <groupId>io.swagger</groupId>
       <artifactId>swagger-jersey2-jaxrs</artifactId>
       <scope>compile</scope>
@@ -138,18 +144,7 @@
       <artifactId>jersey-media-multipart</artifactId>
       <version>${jersey2-version}</version>
     </dependency>
-    <dependency>
-      <groupId>com.fasterxml.jackson.datatype</groupId>
-      <artifactId>jackson-datatype-joda</artifactId>
-      <version>${jackson-jaxrs-version}</version>
-      <scope>compile</scope>
-    </dependency>
-    <dependency>
-      <groupId>com.fasterxml.jackson.jaxrs</groupId>
-      <artifactId>jackson-jaxrs-json-provider</artifactId>
-      <version>${jackson-jaxrs-version}</version>
-      <scope>compile</scope>
-    </dependency>
+    
     <!-- Base64 encoding that works in both JVM and Android -->
     <dependency>
       <groupId>com.brsanthu</groupId>
@@ -157,6 +152,12 @@
       <version>2.2</version>
     </dependency>
 
+  <!-- https://mvnrepository.com/artifact/javax.ws.rs/javax.ws.rs-api -->
+<dependency>
+    <groupId>javax.ws.rs</groupId>
+    <artifactId>javax.ws.rs-api</artifactId>
+    <version>2.1</version>
+</dependency>
   
     <!-- Bean Validation API support -->
     <dependency>
@@ -176,36 +177,42 @@
     </dependency>
     
 <!--      CXF server -->
-<!--     <dependency> -->
-<!--         <groupId>org.apache.cxf</groupId> -->
-<!--         <artifactId>cxf-rt-frontend-jaxrs</artifactId> -->
-<!--         <version>${cxf-version}</version> -->
-<!--         <scope>compile</scope> -->
-<!--     </dependency> -->
-<!--     <dependency> -->
-<!--         <groupId>org.apache.cxf</groupId> -->
-<!--         <artifactId>cxf-rt-rs-service-description</artifactId> -->
-<!--         <version>${cxf-version}</version> -->
-<!--         <scope>compile</scope> -->
-<!--     </dependency> -->
-<!--     <dependency> -->
-<!--         <groupId>org.apache.cxf</groupId> -->
-<!--         <artifactId>cxf-rt-ws-policy</artifactId> -->
-<!--         <version>${cxf-version}</version> -->
-<!--         <scope>compile</scope> -->
-<!--     </dependency> -->
-<!--     <dependency> -->
-<!--         <groupId>org.apache.cxf</groupId> -->
-<!--         <artifactId>cxf-rt-wsdl</artifactId> -->
-<!--         <version>${cxf-version}</version> -->
-<!--         <scope>compile</scope> -->
-<!--     </dependency> -->
+    <dependency>
+        <groupId>org.apache.cxf</groupId>
+        <artifactId>cxf-rt-frontend-jaxrs</artifactId>
+        <version>${cxf-version}</version>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.apache.cxf</groupId>
+        <artifactId>cxf-rt-rs-service-description</artifactId>
+        <version>${cxf-version}</version>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.apache.cxf</groupId>
+        <artifactId>cxf-rt-ws-policy</artifactId>
+        <version>${cxf-version}</version>
+        <scope>compile</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.apache.cxf</groupId>
+        <artifactId>cxf-rt-wsdl</artifactId>
+        <version>${cxf-version}</version>
+        <scope>compile</scope>
+    </dependency>
+<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.jaxrs/jackson-jaxrs-json-provider -->
+<dependency>
+    <groupId>com.fasterxml.jackson.jaxrs</groupId>
+    <artifactId>jackson-jaxrs-json-provider</artifactId>
+    <version>2.9.6</version>
+</dependency>
 
 
   <dependency>
   <groupId>eu.decideh2020</groupId>
-  <artifactId>ACSmI-client</artifactId>
-  <version>2.0.0</version>
+  <artifactId>eu.decideh2020.ACSmI.discovery.backend.client</artifactId>
+  <version>1.0.0</version>
 </dependency>
  <dependency>
     <groupId>com.googlecode.json-simple</groupId>
@@ -214,9 +221,17 @@
 </dependency>
  <dependency>
  	<groupId>eu.DECIDEh2020</groupId>
- 	<artifactId>app-Controller</artifactId>
+ 	<artifactId>app-controller</artifactId>
  	<version>0.0.16-SNAPSHOT</version>
  </dependency>
+ 
+ <!-- https://mvnrepository.com/artifact/org.moeaframework/moeaframework -->
+<dependency>
+    <groupId>org.moeaframework</groupId>
+    <artifactId>moeaframework</artifactId>
+    <version>2.12</version>
+</dependency>
+ 
   </dependencies>
   <repositories>
     <repository>
@@ -227,18 +242,36 @@
       </snapshots>
     </repository>
   </repositories>
+  
   <properties>
-    <java.version>1.7</java.version>
+<!--     <java.version>1.7</java.version> -->
+<!--     <maven.compiler.source>${java.version}</maven.compiler.source> -->
+<!--     <maven.compiler.target>${java.version}</maven.compiler.target> -->
+<!--     <swagger-core-version>1.5.15</swagger-core-version> -->
+<!--     <jetty-version>9.2.9.v20150224</jetty-version> -->
+<!--     <jersey2-version>2.22.2</jersey2-version> -->
+<!--         <cxf-version>3.1.11</cxf-version> -->
+<!--     <jackson-jaxrs-version>2.9.6</jackson-jaxrs-version> -->
+<!--     <junit-version>4.12</junit-version> -->
+<!--     <logback-version>1.1.7</logback-version> -->
+<!--     <servlet-api-version>2.5</servlet-api-version> -->
+<!--     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> -->
+    
+        <java.version>1.7</java.version>
     <maven.compiler.source>${java.version}</maven.compiler.source>
     <maven.compiler.target>${java.version}</maven.compiler.target>
-    <swagger-core-version>1.5.15</swagger-core-version>
+    <swagger-core-version>1.5.18</swagger-core-version>
     <jetty-version>9.2.9.v20150224</jetty-version>
     <jersey2-version>2.22.2</jersey2-version>
-        <cxf-version>3.1.11</cxf-version>
-    <jackson-jaxrs-version>2.8.9</jackson-jaxrs-version>
     <junit-version>4.12</junit-version>
     <logback-version>1.1.7</logback-version>
     <servlet-api-version>2.5</servlet-api-version>
+<!--     <beanvalidation-version>1.1.0.Final</beanvalidation-version> -->
+    <cxf-version>3.2.1</cxf-version>
+    <jackson-jaxrs-version>2.9.6</jackson-jaxrs-version>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    
+    
+    
   </properties>
 </project>
diff --git a/OPTIMUS/eu.decideh2020.optimus.server/src/gen/java/eu/decideh2020/optimus/server/model/OPTIMUSproblem.java b/OPTIMUS/eu.decideh2020.optimus.server/src/gen/java/eu/decideh2020/optimus/server/model/OPTIMUSproblem.java
new file mode 100644
index 0000000000000000000000000000000000000000..e36b8650da807c45a0376e1b8ec163647a475338
--- /dev/null
+++ b/OPTIMUS/eu.decideh2020.optimus.server/src/gen/java/eu/decideh2020/optimus/server/model/OPTIMUSproblem.java
@@ -0,0 +1,6 @@
+package eu.decideh2020.optimus.server.model;
+
+public class OPTIMUSproblem {
+//TODO
+	//include algorithm using MOEAFramework library
+}
diff --git a/OPTIMUS/eu.decideh2020.optimus.server/src/gen/java/eu/decideh2020/optimus/server/model/Simulation.java b/OPTIMUS/eu.decideh2020.optimus.server/src/gen/java/eu/decideh2020/optimus/server/model/Simulation.java
index a1e36bd066a11cbe91ec158c4696669659ddaaad..8dabe3afb525c38ca156b06564fb70e13d1c022d 100644
--- a/OPTIMUS/eu.decideh2020.optimus.server/src/gen/java/eu/decideh2020/optimus/server/model/Simulation.java
+++ b/OPTIMUS/eu.decideh2020.optimus.server/src/gen/java/eu/decideh2020/optimus/server/model/Simulation.java
@@ -20,6 +20,7 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import eu.decideh2020.optimus.server.model.ReturnedSc;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 import javax.validation.constraints.*;
 
@@ -30,6 +31,9 @@ import javax.validation.constraints.*;
 public class Simulation   {
   @JsonProperty("simid")
   private Integer simid = null;
+  
+  @JsonProperty("simdate")
+  private Date simdate = null;
 
   @JsonProperty("appurl")
   private String appurl = null;
diff --git a/OPTIMUS/eu.decideh2020.optimus.server/src/gen/java/eu/decideh2020/optimus/server/model/msANDcs.java b/OPTIMUS/eu.decideh2020.optimus.server/src/gen/java/eu/decideh2020/optimus/server/model/msANDcs.java
index 9655b2b3cd9fd52a5dfc85bb049745f939371476..1d3d8c0040823d5f4750a8f0dcf213d643d2548f 100644
--- a/OPTIMUS/eu.decideh2020.optimus.server/src/gen/java/eu/decideh2020/optimus/server/model/msANDcs.java
+++ b/OPTIMUS/eu.decideh2020.optimus.server/src/gen/java/eu/decideh2020/optimus/server/model/msANDcs.java
@@ -24,7 +24,7 @@ import java.util.List;
 
 import eu.DECIDEh2020.appManager.models.Expression;
 import eu.DECIDEh2020.appManager.models.Parameter;
-import eu.decideh2020.acsmi.client.model.Service;
+import eu.decideh2020.ACSmI.discovery.backend.client.model.Service;
 
 public class msANDcs {
 	private String msid;
diff --git a/OPTIMUS/eu.decideh2020.optimus.server/src/gen/java/eu/decideh2020/optimus/server/model/sortingPossibilities.java b/OPTIMUS/eu.decideh2020.optimus.server/src/gen/java/eu/decideh2020/optimus/server/model/sortingPossibilities.java
index 4aea4917978e3de191e0a2b9b06ea94798ac4659..21d6a567762570992403478a34d1c18b8ad71812 100644
--- a/OPTIMUS/eu.decideh2020.optimus.server/src/gen/java/eu/decideh2020/optimus/server/model/sortingPossibilities.java
+++ b/OPTIMUS/eu.decideh2020.optimus.server/src/gen/java/eu/decideh2020/optimus/server/model/sortingPossibilities.java
@@ -106,7 +106,9 @@ public class sortingPossibilities {
         			newsc.setCsId(mscs.getCsid());
         			microservices.add(mscs.getMsid());	
         			//for now just one detachable resource associated to one microservice
-        			microservices.add(mscs.getdrid().get(0));
+        			if (mscs.getdrid().size()!=0) {
+        				microservices.add(mscs.getdrid().get(0));
+        			}
         			newsc.setMicroservices(microservices);
         			sc.add(newsc);
         			micros.addAll(microservices);
diff --git a/OPTIMUS/eu.decideh2020.optimus.server/src/main/java/eu/decideh2020/optimus/server/api/Bootstrap.java b/OPTIMUS/eu.decideh2020.optimus.server/src/main/java/eu/decideh2020/optimus/server/api/Bootstrap.java
index a751068d0369eb2e27ab9fe1984cbba61a61d56b..eb2de290859d94218ec7d61ec433a26bb462c713 100644
--- a/OPTIMUS/eu.decideh2020.optimus.server/src/main/java/eu/decideh2020/optimus/server/api/Bootstrap.java
+++ b/OPTIMUS/eu.decideh2020.optimus.server/src/main/java/eu/decideh2020/optimus/server/api/Bootstrap.java
@@ -21,8 +21,6 @@ package eu.decideh2020.optimus.server.api;
 import io.swagger.jaxrs.config.SwaggerContextService;
 import io.swagger.models.*;
 
-import io.swagger.models.auth.*;
-
 import javax.servlet.http.HttpServlet;
 
 import eu.decideh2020.optimus.server.api.impl.SimQueue;
@@ -49,6 +47,10 @@ public class Bootstrap extends HttpServlet {
     Swagger swagger = new Swagger().info(info);
 
     new SwaggerContextService().withServletConfig(config).updateSwagger(swagger);
+    //how to obtain the information of the current simulation????
+//    System.out.println();
+//    System.out.println("launching simulation for: " );
+//    System.out.println();
     SimulatorThread simulator = new SimulatorThread();
     simulator.start();
   }
diff --git a/OPTIMUS/eu.decideh2020.optimus.server/src/main/java/eu/decideh2020/optimus/server/api/SimulatorThread.java b/OPTIMUS/eu.decideh2020.optimus.server/src/main/java/eu/decideh2020/optimus/server/api/SimulatorThread.java
index 8d4708f348cc294c94be1228b7752315751d35bd..b8d0d2c19729ea3236b1bf8a135a23d3de3af9cd 100644
--- a/OPTIMUS/eu.decideh2020.optimus.server/src/main/java/eu/decideh2020/optimus/server/api/SimulatorThread.java
+++ b/OPTIMUS/eu.decideh2020.optimus.server/src/main/java/eu/decideh2020/optimus/server/api/SimulatorThread.java
@@ -1,4 +1,4 @@
-/*********************************************************************
+/********************************************************************* 
 * Copyright (c) 2018 Tecnalia.
 *
 * This program and the accompanying materials are made
@@ -18,38 +18,38 @@
 **********************************************************************/
 package eu.decideh2020.optimus.server.api;
 
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.FileWriter;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.nio.file.Paths;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 import java.util.Properties;
-import java.util.UUID;
-
 import org.apache.cxf.jaxrs.client.ClientConfiguration;
 import org.apache.cxf.jaxrs.client.JAXRSClientFactory;
 import org.apache.cxf.jaxrs.client.WebClient;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.ObjectWriter;
 import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
 
 
 import eu.DECIDEh2020.appManager.AppManager;
+import eu.DECIDEh2020.appManager.HistoryManager;
 import eu.DECIDEh2020.appManager.exceptions.AppManagerException;
 import eu.DECIDEh2020.appManager.exceptions.DECIDEValidationException;
 import eu.DECIDEh2020.appManager.models.AppDescription;
 import eu.DECIDEh2020.appManager.models.AvailabilityNfr;
+import eu.DECIDEh2020.appManager.models.CostNfr;
 import eu.DECIDEh2020.appManager.models.DetachableResource;
+import eu.DECIDEh2020.appManager.models.HistoryEntry;
 import eu.DECIDEh2020.appManager.models.Microservice;
 import eu.DECIDEh2020.appManager.models.Nfr;
 import eu.DECIDEh2020.appManager.models.PerformanceNfr;
@@ -58,22 +58,25 @@ import eu.decideh2020.optimus.server.api.impl.Attribute;
 import eu.decideh2020.optimus.server.api.impl.Filter;
 import eu.decideh2020.optimus.server.api.impl.SimQueue;
 import eu.decideh2020.optimus.server.model.sortingPossibilities;
-import io.swagger.util.Json;
 import eu.decideh2020.optimus.server.model.ReturnedSc;
-import eu.decideh2020.optimus.server.model.ReturnedSchema;
 import eu.decideh2020.optimus.server.model.Simulation;
 import eu.decideh2020.optimus.server.model.msANDcs;
-import eu.decideh2020.optimus.server.model.sortingPossibilities;
-import eu.decideh2020.acsmi.client.api.ServiceResourceApi;
-import eu.decideh2020.acsmi.client.model.Service;
 
-//import eu.decideh2020.optimus.server.api.JacksonJsonProvider;
-import org.json.simple.JSONArray;
-//import org.json.simple.JSONException;
-import org.json.simple.JSONObject;
+import eu.decideh2020.ACSmI.discovery.backend.client.api.ServiceResourceApi;
+import eu.decideh2020.ACSmI.discovery.backend.client.model.Service;
 
+import org.springframework.vault.authentication.TokenAuthentication;
+import org.springframework.vault.client.VaultEndpoint;
+import org.springframework.vault.core.VaultTemplate;
+import org.springframework.vault.support.VaultResponse;
+import java.net.URI;
+//import org.slf4j.Logger;
+//import org.slf4j.LoggerFactory;
 
 
+//TODO
+	//include algorithm using MOEAFramework library
+
 
 public class SimulatorThread extends Thread {
 
@@ -81,6 +84,7 @@ public class SimulatorThread extends Thread {
 	private HashMap<Integer, String> classid = new HashMap<Integer, String>();
 	private ServiceResourceApi api;
 	private List<msANDcs> schemasPossibilities = new ArrayList<>();
+//	private final Logger log = LoggerFactory.getLogger(SimulatorThread.class);
 	
 
     List<SchemaElement> sc = new ArrayList<>();
@@ -124,11 +128,63 @@ public class SimulatorThread extends Thread {
 		if (hq.getAppurl().contains("https://"))
 		{
 			localAppDesc = System.getProperty("java.io.tmpdir");
-			localAppDesc = localAppDesc+"\\"+hq.getSimid();
-			//this is the way to manage the variables (paths only) by java, obtaining tmp system folder - end
+			
+			
+			String gitusername =null;
+			String gittoken =null;	
+		final String osName = System.getProperty("os.name");
+				String path = null;
+				if (osName.matches("Win.*")) {
+					path = "D:\\W\\2017-Decide\\git\\WP3\\Optimus\\eu.decideh2020.optimus.server\\src\\main\\resources\\optimus.server.properties";
+					localAppDesc = localAppDesc+"\\"+hq.getSimid();
+				} else {
+					path = "/etc/decide/optimus.server.properties";
+					localAppDesc = localAppDesc+"/"+hq.getSimid();
+					System.out.println("fichero properties: "+path);
+					System.out.println("fichero properties: "+path);
+					System.out.println("path local : "+localAppDesc);
+				}
+			Properties props= new Properties();
 			try {
-				manager = AppManager.open(hq.getAppurl(), "user", "password", Paths.get(localAppDesc));
-
+				props.load(new FileInputStream(path));
+			} catch (FileNotFoundException e1) {
+				// TODO Auto-generated catch block
+				e1.printStackTrace();
+			} catch (IOException e1) {
+				// TODO Auto-generated catch block
+				e1.printStackTrace();
+			}
+			
+			if (props.getProperty("credentialsmode").equals ("environment")){
+				gitusername=System.getenv("USER_GIT");
+				gittoken=System.getenv("TOKEN_GIT");
+			} else {
+				//vault call (TODO)
+				try {
+		    		System.out.println("Inicio del proceso\n");
+		    		
+		    		// Crear endpoint
+		    		//final VaultEndpoint endpoint = VaultEndpoint.from(new URI("http://85.91.40.245:8200"));
+		    		
+		    		// Crear template
+		            //final VaultTemplate vaultTemplate = new VaultTemplate(endpoint, new TokenAuthentication("s.ry9XFWOO7BLZK4XhW4W1m1eg"));
+		            
+		            // Llamar a Vault
+		            //VaultResponse response = vaultTemplate.read("secret/testuser/sockshop");
+		            //System.out.println(response.getData().get("key"));
+		            
+		            System.out.println("\nFin del proceso");
+		    	} catch (Exception e) {
+		    		e.printStackTrace();}
+			}
+			
+			try { 
+				//manager = AppManager.open(hq.getAppurl(), "1SqFF3zmxmS5CXTx8Ntf", Paths.get(localAppDesc));
+				//manager = AppManager.open(hq.getAppurl(), "externo-e18008@tecnalia.com", "JM4VubfGY1L7wQecHk-4", Paths.get(localAppDesc));
+				//manager = AppManager.open(hq.getAppurl(),gitusername,gittoken, Paths.get(localAppDesc));
+				//manager = AppManager.open(hq.getAppurl(),"mariajose.lopez@tecnalia.com","wy81yjfuSfqcQZfu9Ev2", Paths.get(localAppDesc));
+				manager = AppManager.open(hq.getAppurl(),"mariajose.lopez@tecnalia.com","tecnalia#681920", Paths.get(localAppDesc));
+				//change the proper url depending on the version is going to be deployed on
 			} catch (AppManagerException e) {
 				e.printStackTrace();
 			}
@@ -136,23 +192,27 @@ public class SimulatorThread extends Thread {
 		else {
 			localAppDesc = hq.getAppurl();
 			try {
+				//log.debug("localAppDesc : " + localAppDesc);
 				manager = AppManager.open(Paths.get(localAppDesc));
 			} catch (AppManagerException e) {
 				e.printStackTrace();
 			}
 		}
 		
-
+//		AppManager manager = AppManager.open(hq.getAppurl(), "mariajose.lopez@tecnalia.com", "tecnalia#681916", Paths.get(localAppDesc));
 		AppDescription description = new AppDescription();
 		sc.clear();
 		try {
 
 			description = manager.getAppDescription();
 			nfrs = description.getNfrs();
+			microservices.clear();
 			microservices = description.getMicroservices();
+			int nummicros = microservices.size();
+			//log.debug("number of microservice : " + nummicros);
 			description.getSchema().clear();
 			for (Microservice ms : microservices) {
-
+			       //log.debug("microservice : " + ms.getName());
 				BuildRequest(ms,nfrs, description);
 			}
 			
@@ -173,7 +233,10 @@ public class SimulatorThread extends Thread {
 		sortingPossibilities sorter = new sortingPossibilities();
 	        sorter.sort(schemasPossibilities);
 	        //combine the individual schemas possibilities
+	        sc.clear();
+    		//log.debug("sc before combine : " + sc);
 	        sc = sorter.combine(schemasPossibilities);
+	        //log.debug("sc after combine : " + sc);
 	        sim.setStatus("finished");
 	        if (!localAppDesc.contains("https://"))
 		{
@@ -189,14 +252,55 @@ public class SimulatorThread extends Thread {
 	    		for (String micro : se.getMicroservices()) {
 	    		rs.addMicrosItem(micro);}
 	    		schemas.add(rs);
+	    		//log.debug("schema added : " + rs);
+
 	    		
 	    	}
 
+	        //sim.getSc().clear();
 	        sim.setSc(schemas);
+	        //log.debug("sim schemas : " + sim.getSc());
 			SimQueue SimQ = SimQueue.getInstance( );
 			SimQ.add(sim);
+			//sim.setCaller("VH");
 			if (sim.getCaller()=="VH") {
-				//record the appdescription into de git
+				//record the appdescription into the git
+				List<SchemaElement> schemaslist = new ArrayList<>();
+		        //at the moment i consider the best of all of them, the first one.
+		        //when integration--> increase index from 0 to 5.
+				for (ReturnedSc rs : schemas) {
+					SchemaElement sc = new SchemaElement();
+					sc.setCsId(rs.getCsId());
+					sc.setIndex(rs.getIndex());
+					sc.setMicroservices(rs.getMicros());
+					schemaslist.add(sc);
+				}
+				appd.setSchema(schemaslist);
+				try {
+					manager.writeAndSync(appd, "Added new Schemas");
+					HistoryManager historyManager = manager.getHistoryManager();
+					ArrayList<HistoryEntry> history = new ArrayList(historyManager.getHistory());
+					HistoryEntry he = new HistoryEntry();
+					DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
+					he.setDate(dateFormat.format(new Date()));
+					he.setSchema(schemaslist);
+					List<ObjectNode> slaB = new ArrayList<>();
+					he.setSlaBreaches(slaB);
+					history.add(he);
+					historyManager.writeAndCommit(history, "updating History");
+					// close the AppManager
+					manager.close();
+
+				} catch (AppManagerException e) {
+					// TODO Auto-generated catch block
+					e.printStackTrace();
+				} catch (IOException e) {
+					// TODO Auto-generated catch block
+					e.printStackTrace();
+				}
+
+
+				
 			}
 	        }
 		}
@@ -207,38 +311,50 @@ public class SimulatorThread extends Thread {
 		List<Attribute> attributes = new ArrayList<>();
 		// all the CS are VM
 		filterexample.setClassid(3);
+		filterexample.setIncidences(false);
+		//provider should be obtained from DECIDE.json, in the meantime it will be hardcoded
+		filterexample.setProvider("Amazon");
+		//filterexample.setProvider(appdesc.getProvider()); A provider property is needed in the DECIDE.json
 		for (Nfr nf : nfrs) {
 			
-			if (nf instanceof PerformanceNfr) {
-				PerformanceNfr performanceNfr = (PerformanceNfr) nf;
-				Attribute att = new Attribute();
-				att.setTypeid(21);
-				att.setName("Response Time: Virtual Machine Performance");
-				if (performanceNfr.getUnit().contains("percentage")) {
-					att.setUnit("%");
-				}
-				if (performanceNfr.getUnit().contains("milliseconds")) {
-					att.setUnit("ms");
-				}
-				att.setValue(Double.toString(performanceNfr.getValue()));
-				attributes.add(att);
-			}
-               if (nf instanceof AvailabilityNfr) {
+//			if (nf instanceof PerformanceNfr) {
+//				PerformanceNfr performanceNfr = (PerformanceNfr) nf;
+//				Attribute att = new Attribute();
+//				att.setTypeid(21);
+//				att.setName("Response Time: Virtual Machine Performance");
+//				if (performanceNfr.getUnit().contains("millisecond")) {
+//					att.setUnit("ms");
+//				}
+//				att.setValue(Double.toString(performanceNfr.getValue()));
+//				attributes.add(att);
+//			}
+             if (nf instanceof AvailabilityNfr) {
                       AvailabilityNfr availabilityNfr = (AvailabilityNfr) nf;
                       
 				Attribute att = new Attribute();
 				att.setTypeid(20);
 				att.setName("Availability");
 				att.setValue(Double.toString(availabilityNfr.getValue()));
-				if (availabilityNfr.getUnit().contains("percentage")) {
-					att.setUnit("%");
-				}
-				if (availabilityNfr.getUnit().contains("milliseconds")) {
-					att.setUnit("ms");
-				}
+				//if (availabilityNfr.getUnit().contains("percentage")) {
+				att.setUnit(availabilityNfr.getUnit());
+				//}
 				attributes.add(att);
 			}
+             if (nf instanceof CostNfr) {
+                 CostNfr costNfr = (CostNfr) nf;
+                 
+			Attribute att = new Attribute();
+			att.setTypeid(25);
+			att.setName("Cost");
+			att.setValue(Double.toString(costNfr.getValue()));
+			//att.setUnit(costNfr.getUnit());
+			att.setUnit("€");
+			attributes.add(att);
+		}
+             //TODO add location as zone and region
+             //TODO add legal level
 		}
+		System.out.println(ms.getClassification() + ms.getName());
 		if (ms.getClassification().contentEquals("Computing Public IP")) {
 		Attribute att = new Attribute();
 		att.setTypeid(9);
@@ -247,9 +363,43 @@ public class SimulatorThread extends Thread {
 		att.setUnit(null);
 		attributes.add(att);
 		}
+		
+		
+		if (ms.getInfrastructureRequirements()!=null) {
+			//Disk - Instance Storage
+			Attribute att = new Attribute();
+			att.setTypeid(7);
+			att.setName("Instance Storage");
+			att.setValue(String.valueOf(ms.getInfrastructureRequirements().getMinDisk()));
+			att.setUnit("GB");
+			attributes.add(att);
+			//Memory 
+			att = new Attribute();
+			att.setTypeid(6);
+			att.setName("Memory");
+			att.setValue(String.valueOf(ms.getInfrastructureRequirements().getMinRam()));
+			att.setUnit("GB");
+			attributes.add(att);
+			}
+		
+
 		//pending eliminate nameVM
 		//String nameVM = "nononono";
+		//just for logroño GA
+//		Attribute att = new Attribute();
+//		att.setTypeid(3);
+//		att.setName("Provider");
+//		att.setValue("Amazon");
+//		attributes.add(att);
+//		filterexample.setAttributes(attributes);
+//		Attribute att2 = new Attribute();
+//		att2.setTypeid(3);
+//		att2.setName("Provider");
+//		att2.setValue("CloudSigma");
+//		attributes.add(att2);
 		filterexample.setAttributes(attributes);
+		//just for logroño ga
+
 
 		//ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
         String filter= "";
@@ -259,6 +409,7 @@ public class SimulatorThread extends Thread {
         mapper.configure(SerializationFeature.INDENT_OUTPUT, true);
         try {
 			filter = mapper.writeValueAsString(filterexample);
+			System.out.println(filter);
 		} catch (JsonProcessingException e1) {
 			// TODO Auto-generated catch block
 			e1.printStackTrace();
@@ -281,7 +432,9 @@ public class SimulatorThread extends Thread {
         	// detachable_resources are always associated to the microservice and they will be deployed in the same cs
         		List<String> detach = new ArrayList<>();
         		for (DetachableResource dr : ms.getDetachableResources()) {
-        		detach.add(dr.getId());
+        		if (!dr.getName().equals("none")) {
+        			detach.add(dr.getId());
+        			}
         		}
         		mscs.setdrid(detach);
             	schemasPossibilities.add(mscs);
@@ -298,12 +451,16 @@ public class SimulatorThread extends Thread {
         providers.add(provider);
         
         //the integration enviroment
-        api = JAXRSClientFactory.create("acsmiServicesURL", ServiceResourceApi.class, providers);
+        api = JAXRSClientFactory.create("http://85.91.40.245:8087/acsmiservices", ServiceResourceApi.class, providers);
+        //the local enviroment for testing (Alberto's machine but not stable)
+        //api = JAXRSClientFactory.create("http://172.26.147.2:8080/acsmiservices", ServiceResourceApi.class, providers);
         
         org.apache.cxf.jaxrs.client.Client client = WebClient.client(api);
         
         ClientConfiguration config = WebClient.getConfig(client); 
+        System.out.println("filtro: "+filter);
         List<Service> response = api.findServicesUsingGET(filter);
+        System.out.println("response: "+ response);
         return response;
 	}
 	private void wait (int segundos) {
diff --git a/OPTIMUS/eu.decideh2020.optimus.server/src/main/java/eu/decideh2020/optimus/server/api/impl/ApplicationsApiServiceImpl.java b/OPTIMUS/eu.decideh2020.optimus.server/src/main/java/eu/decideh2020/optimus/server/api/impl/ApplicationsApiServiceImpl.java
index d437ef3afb9541f5dac816b87f077fcd5cba8a27..44574cfbd98c3564cbd72b40f6e96556442b19a3 100644
--- a/OPTIMUS/eu.decideh2020.optimus.server/src/main/java/eu/decideh2020/optimus/server/api/impl/ApplicationsApiServiceImpl.java
+++ b/OPTIMUS/eu.decideh2020.optimus.server/src/main/java/eu/decideh2020/optimus/server/api/impl/ApplicationsApiServiceImpl.java
@@ -25,9 +25,13 @@ import eu.decideh2020.optimus.server.model.*;
 
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.SecurityContext;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 @javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2018-03-06T15:32:29.649Z")
 public class ApplicationsApiServiceImpl extends ApplicationsApiService {
 	
+	private final Logger log = LoggerFactory.getLogger(ApplicationsApiServiceImpl.class);
 	ArrayList<Simulation> SimsLaunched = new ArrayList<Simulation>();
 	SimQueue SimQ = SimQueue.getInstance( );
 	
@@ -44,6 +48,7 @@ public class ApplicationsApiServiceImpl extends ApplicationsApiService {
     	// where has to be placed this method? in Simulation class for now.
     	simlaunch.setStatus("started");
     	simlaunch.setAppurl(simulation.getAppurl());
+
     	SimsLaunched.add(simlaunch);
     	SimQ.add(simlaunch);
      	//System.out.println(simlaunch.getAppurl());
@@ -54,37 +59,24 @@ public class ApplicationsApiServiceImpl extends ApplicationsApiService {
 		ArrayList<ReturnedSimulation> simsreturned = new ArrayList<ReturnedSimulation>();
 		simsreturned.add(returnedsimulation);
 
-//		ObjectMapper mapper = new ObjectMapper();
-//    	//Object to JSON in file
-//    	//Object to JSON in String
-//		String jsonInString = "";
-//		try {
-//			jsonInString = mapper.writeValueAsString(simsreturned);
-//		} catch (JsonProcessingException e) {
-//	// TODO Auto-generated catch block
-//			e.printStackTrace();
-//		}
-		//System.out.println("jsonstring"+jsonInString);
-        //return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, jsonInString)).build();
-		//Change the way swagger generates the response, because a simpler build works
 		return Response.ok().entity(simsreturned).build();
     }
     @Override
     public Response getAllSimulationsUsingGET(SecurityContext securityContext) throws NotFoundException {
         // do some magic!
-    	SimQueue SimQ = SimQueue.getInstance( );
+    	//SimQueue SimQ = SimQueue.getInstance( );
     	ArrayList<ReturnedSimulation> SimsReturned = new ArrayList<ReturnedSimulation>();
     	
 // I do not build the response with ReturnedSimulation objects because of the format that they are shown in swagger, but I should be aware
     	// of the kind of object that is going to need every tool who asks for these REST services.
-    	for (int i=0;i<SimQ.size();i++)
+    	for (int i=0;i<SimsLaunched.size();i++)
     	{
     	
     		Simulation simselected = new Simulation();
     		ReturnedSimulation simret = new ReturnedSimulation();
-        	ArrayList<ReturnedSimulation> simsreturned = new ArrayList<ReturnedSimulation>();
+        	//ArrayList<ReturnedSimulation> SimsReturned = new ArrayList<ReturnedSimulation>();
         	
-    			simselected = SimQ.element();
+    			simselected = SimsLaunched.get(i);
     			if (simselected!=null ) {
     				simret.setSimid(simselected.getSimid());
     				simret.setStatus(simselected.getStatus());
@@ -93,7 +85,7 @@ public class ApplicationsApiServiceImpl extends ApplicationsApiService {
     			
     			
     		}
-        	simsreturned.add(simret);
+    			SimsReturned.add(simret);
 }
 //    	{	//ReturnedSimulation simselected = new ReturnedSimulation();
 //    		//simselected.setSimid(SimsLaunched.get(i).getSimid());
@@ -114,18 +106,23 @@ public class ApplicationsApiServiceImpl extends ApplicationsApiService {
 
 		ReturnedSc simret = new ReturnedSc();
     	ArrayList<ReturnedSc> schreturned = new ArrayList<ReturnedSc>();
+    	log.debug("simslaunched : " + SimsLaunched);
     	for (Simulation simselected : SimsLaunched) {
     	
     	//while (true) {
 			
-			if (simselected!=null && simselected.getSimid().equals(simid)) {
+			if (simselected!=null && simselected.getSimid().equals(simid) ) {
 				//simret.setSimid(simid);
 				//simret.setStatus(simselected.getStatus());
 				//for
+				log.debug("simid : " + simid);
+				log.debug("simselected : " + simselected);
+				if (simselected.getSc() != null) {
 				for (ReturnedSc scret : simselected.getSc()) {
 					
 					schreturned.add(scret);
 					}
+				}
 				break;
 			}
 			
@@ -151,7 +148,8 @@ public class ApplicationsApiServiceImpl extends ApplicationsApiService {
 			
 			if (simselected!=null && simselected.getSimid().equals(simid)) {
 				simret.setSimid(simid);
-				simret.setStatus(simselected.getStatus());
+				simret.setStatus(simselected.getStatus()); 
+				log.debug("simstatus en getSimulationUsingGET : " + simselected.getStatus());
 				//simret.setSc(simselected.getSc());
 				break;
 			}
diff --git a/OPTIMUS/eu.decideh2020.optimus.server/src/main/java/eu/decideh2020/optimus/server/api/impl/Filter.java b/OPTIMUS/eu.decideh2020.optimus.server/src/main/java/eu/decideh2020/optimus/server/api/impl/Filter.java
index 007a4d2d120eee3cea7975a300b796f754255d93..8c7c775f4c55b5c5358e909abe1941bac2ba6fd3 100644
--- a/OPTIMUS/eu.decideh2020.optimus.server/src/main/java/eu/decideh2020/optimus/server/api/impl/Filter.java
+++ b/OPTIMUS/eu.decideh2020.optimus.server/src/main/java/eu/decideh2020/optimus/server/api/impl/Filter.java
@@ -25,8 +25,10 @@ import eu.DECIDEh2020.appManager.models.DetachableResource;
 
 public class Filter {
 	 	private int classid;
+	 	private String provider;
+	 	private boolean incidences;
 		private List<Attribute> attributes = new ArrayList<>();
-		
+				
 
 
 	    public int getClassid() {
@@ -35,6 +37,20 @@ public class Filter {
 
 	    public void setClassid(int id) {
 	        this.classid = id;
+	    }
+	    public String getProvider() {
+	        return provider;
+	    }
+
+	    public void setProvider(String prov) {
+	        this.provider = prov;
+	    }
+	    public boolean getIncidences() {
+	        return incidences;
+	    }
+
+	    public void setIncidences(boolean inc) {
+	        this.incidences = inc;
 	    }
 		public List<Attribute>  getAttributes() {
 			return this.attributes;
diff --git a/OPTIMUS/eu.decideh2020.optimus.server/src/main/resources/optimus.server.properties b/OPTIMUS/eu.decideh2020.optimus.server/src/main/resources/optimus.server.properties
index de34fbdc135056ee4885a058c82c1033bf464dd3..86f9174df6472e95970608b40ddbe21b24772a11 100644
--- a/OPTIMUS/eu.decideh2020.optimus.server/src/main/resources/optimus.server.properties
+++ b/OPTIMUS/eu.decideh2020.optimus.server/src/main/resources/optimus.server.properties
@@ -1 +1,4 @@
-localAppDesc="D:\\W\2017-Decide\\workspace\\AppsDescFolder\\"
+; localAppDesc="D:\\W\2017-Decide\\workspace\\AppsDescFolder\\"
+credentialsmode=environment
+;credentialsmode=vault
+; credentiales de vault