# Notices for Eclipse MDM|BL

This content is produced and maintained by the Eclipse MDM|BL project,
it is a project of the openMDM(R) Eclipse Working Group.

* Project home: https://projects.eclipse.org/projects/technology.mdmbl

## Trademarks

Eclipse MDM|BL, MDM|BL and Eclipse openMDM(R) logo are registered trademarks
of the Eclipse Foundation.

## Copyright

All content is the property of the following respective authors or their employers.
For more information regarding authorship of content, please consult the listed
source code repository logs.

Copyright (c) 2016-2019 Gigatronik Ingolstadt GmbH
Copyright (c) 2016-2020 Peak Solution GmbH
Copyright (c) 2017-2020 science + computing AG Tuebingen (ATOS SE)
Copyright (c) 2017-2018 Canoo Engineering AG
Copyright (c) 2017-2020 Angelika Wittek
Copyright (c) 2018-2019 Elektronische Fahrwerksysteme GMBH
Copyright (c) 2018-2020 Karakun AG
Copyright (c) 2018-2020 Alexander Nehmer

## Declared Project Licenses

This program and the accompanying materials are made available under the
terms of the Eclipse Public License v. 2.0 which is available at
http://www.eclipse.org/legal/epl-2.0.

SPDX-License-Identifier: EPL-2.0

## Source Code

The project maintains the following source code repositories:

org.eclipse.mdm.api.base.git	    - The openMDM(R) API.
org.eclipse.mdm.api.default.git	    - Extension of the openMDM(R) API containing default elements.
org.eclipse.mdm.api.odsadapter.git	- ODS implementation of persistence adapter.
org.eclipse.mdm.nucleus.git	        - Core building blocks for the openMDM Business Logic and Web Frontend.

## Third-party Content

The Content includes items that have been sourced from third parties as set out below.
If you did not receive this Content directly from the Eclipse Foundation, the following
is provided for informational purposes only, and you should look to
the Redistributor's license for terms and conditions of use.

antlr4-4.5.3.jar(2.5.3)
    * License: New BSD license

aopalliance-repackaged-2.5.0-b05.jar (2.5.0-b05)
    * License: CDDL

commons-codec-1.2.jar (1.2)
    * License: Apache License, 2.0

commons-httpclient-3.1.jar  (3.1)
    * License: Apache License, 2.0

commons-lang3-3.8.1.jar (3.8.1)
    * License: Apache License, 2.0

commons-text-1.6.jar (1.6)
    * License: Apache License, 2.0

gson-2.7.jar (2.7)
    * License: Apache License, 2.0

Google Guava Version: 25.0-jre  (25.0)
    * License: Apache License, 2.0

Gradle Wrapper (4.10.2)
    * License: Apache License, 2.0

hk2-api-2.5.0-b05.jar (2.5.0-b05)
    * License: CDDL-1.1

hk2-locator-2.5.0-b05.jar(2.5.0-b05)
    * License: CDDL

hk2-utils-2.5.0-b05.jar (2.5.0-b05)
    * License: CDDL

jackson-annotations-2.9.0.jar  (2.9.0)
    * License: Apache License, 2.0

jackson-core-2.9.2.jar(2.9.2)
    * License: Apache License, 2.0

jackson-databind-2.9.2.jar  (2.9.2)
    * License: Apache License, 2.0

jackson-jaxrs-base-2.9.2.jar(2.9.2)
    * License: Apache License, 2.0

jackson-jaxrs-json-provider-2.9.2.jar(2.9.2)
    * License: Apache License, 2.0

jackson-module-jaxb-annotations-2.9.2.jar  (2.9.2)
    * License: Apache License, 2.0

javassist-3.20.0-GA.jar  (2.20.0-GA)
    * License: Apache 2.0

jcl-over-slf4j-1.7.25.jar(1.7.25)
    * License: MIT License
    * Licence Path: https://www.slf4j.org/license.html
    * Project URL:  https://www.slf4j.org
    * Source URL:   https://github.com/qos-ch/slf4j

jersey-client-2.23.2.jar (2.23.2)
     * License: CDDL

jersey-common-2.23.2.jar (2.23.2)
    * License: CDDL

jersey-container-servlet-2.23.2.jar  (2.23.2)
    * License: CDDL

jersey-container-servlet-core-2.23.3.jar(2.23.2)
    * License: CDDL

jersey-guava-2.23.2.jar  (2.23.2)
    * License: Apache License, 2.0

jersey-media-jaxb-2.23.2.jar(2.23.2)
    * License: CDDL

jersey-media-sse-2.23.2.jar (2.23.2)
    * License: CDDL

jersey-media-multipart-2.23.2.jar (2.23.2)
    * License: CDDL

jersey-server-2.23.2.jar (2.23.2)
    * License: Apache-2.0

log4j-over-slf4j-1.7.25.jar (1.7.25)
    * License: Apache-2.0

logback-classic-1.2.3.jar(1.2.3)
    * License: Eclipse Public License 1.0

logback-core-1.2.3.jar(1.2.3)
    * License: Eclipse Public License 1.0

mimepull-1.9.6.jar (1.9.4)
    * License: CDDL

openatfx-0.7.4.jar (0.7.4)
    * License: Apache-2.0

osgi-resource-locator-1.0.1.jar(1.0.1)
    * License: CDDL

protobuf-java-3.2.0.jar (3.2.0)
    * License: New BSD license

protobuf-java-util-3.2.0.jar  (3.2.0)
    * License: New BSD license

swagger-annotations-2.0.8.jar (2.0.8)
    * License: Apache-2.0

swagger-ui-3.23.0.jar (3.23.0)
    * License: Apache-2.0

slf4j-api-1.7.25.jar  (1.7.25)
    * License: MIT license
    * Licence Path: https://www.slf4j.org/license.html
    * Project URL: https://github.com/qos-ch/slf4j
    * Source URL:  https://github.com/qos-ch/slf4j/releases/tag/v_1.7.25

stax2-api-3.1.4.jar (3.1.4)
    * License: BSD-2-Clause

validation-api-1.1.0.Final.jar (1.1.0.Final)
  * License: Apache License, 2.0

vavr-0.9.1-sources.jar (0.9.1)
  * License: Apache License, 2.0

vavr-match-0.9.1.jar (0.9.1)
  * License: Apache License, 2.0

woodstox-core-asl-4.4.1.jar (4.4.1)
  * License: Apache License, 2.0


FFAMFAMFAM Silk Icon, Version 1.3
    * License: Creative Commons Attribution 3.0 License
    * Licence Path: https://creativecommons.org/licenses/by/3.0/
    * Project: http://www.famfamfam.com/lab/icons/silk/
    * Source:  http://www.famfamfam.com/lab/icons/silk/

@angular/animations:7.2.4
    * License: MIT
    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
    * Project: https://angular.io/api/animations
    * Source:  https://github.com/angular/angular/releases/tag/7.2.4

@angular/cdk:7.1.1
    * License: MIT
    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
    * Project: https://angular.io/api
    * Source:  https://github.com/angular/angular/releases/tag/7.1.1


@angular/common@7.2.4
    * License: MIT
    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
    * Project: https://angular.io/api/common
    * Source:  https://github.com/angular/angular/releases/tag/7.2.4r

@angular/compiler@7.2.4
    * License: MIT
    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
    * Project: https://angular.io
    * Source:  https://github.com/angular/angular/releases/tag/7.2.4

@angular/core@7.2.4
    * License: MIT
    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
    * Project: https://angular.io
    * Source:  https://github.com/angular/angular/releases/tag/7.2.4

@angular/forms@7.2.4
    * License: MIT
    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
    * Project: https://angular.io
    * Source:  https://github.com/angular/angular/releases/tag/7.2.4

@angular/http@7.2.4
    * License: MIT
    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
    * Project: https://angular.io
    * Source:  https://github.com/angular/angular/releases/tag/7.2.4

@angular/platform-browser-dynamic@7.2.4
    * License: MIT
    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
    * Project: https://angular.io
    * Source:  https://github.com/angular/angular/releases/tag/7.2.4

@angular/platform-browser@7.2.4
    * License: MIT
    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
    * Project: https://angular.io
    * Source:  https://github.com/angular/angular/releases/tag/7.2.4

@angular/router@7.2.4
    * License: MIT
    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
    * Project: https://angular.io
    * Source:  https://github.com/angular/angular/releases/tag/7.2.4

bootstrap@4.1.3
    * License: MIT
    * Licence Path: https://github.com/twbs/bootstrap/raw/master/LICENSE
    * Project: https://getbootstrap.com/
    * Source:  https://github.com/twbs/bootstrap

class-transformer@0.1.6
    * License: MIT
    * Licence Path: https://github.com/typestack/class-transformer/blob/master/LICENSE
    * Project: https://github.com/pleerock/class-transformer
    * Source:  https://github.com/pleerock/class-transformer

core-js@2.6.0
    * License: MIT
    * Licence Path: https://github.com/zloirock/core-js/raw/master/LICENSE
    * Project: https://github.com/zloirock/core-js
    * Source:  https://github.com/zloirock/core-js/releases/tag/v2.6.0

file-saver@1.3.3
    * License: MIT
    * Licence Path: https://github.com/eligrey/FileSaver.js/raw/master/LICENSE.md
    * Project: https://github.com/eligrey/FileSaver.js
    * Source:  https://github.com/eligrey/FileSaver.js

font-awesome@4.7.0
    * License: MIT
    * Licence Path: https://github.com/FortAwesome/Font-Awesome/blob/master/LICENSE.txt
    * Project: https://fontawesome.com/
    * Source:  https://github.com/FortAwesome/Font-Awesome

ng2-split-pane@1.3.1
    * License: MIT
    * Licence Path: https://github.com/wannabegeek/ng2-split-pane/raw/master/LICENSE
    * Project: https://github.com/wannabegeek/ng2-split-pane
    * Source:  https://github.com/wannabegeek/ng2-split-pane

ngx-bootstrap@3.1.2
    * License: MIT
    * Licence Path: https://github.com/valor-software/ngx-bootstrap/blob/v3.1.2/LICENSE
    * Project: https://valor-software.com/ngx-bootstrap
    * Source:  https://github.com/valor-software/ngx-bootstrap/tree/v3.1.2

@ngx-translate/core@11.0.1
    * License: MIT 
    * Licence Path:   https://github.com/ngx-translate/core/blob/v11.0.1/LICENSE  
    * Project URL:    http://www.ngx-translate.com/
    * Source URL:     https://github.com/ngx-translate/core

@ngx-translate/http-loader@4.0.0
    * License: MIT 
    * Licence Path:   https://github.com/ngx-translate/http-loader/blob/v4.0.0/LICENSE  
    * Project URL:    http://www.ngx-translate.com/
    * Source URL:     https://github.com/ngx-translate/http-loader/tree/v4.0.0

primeicons:1.0.0
    * License: MIT
    * Licence Path: https://github.com/primefaces/primeicons/blob/1.0.0/LICENSE
    * Project: https://www.primefaces.org/primeng
    * Source:  https://github.com/primefaces/primeicons/tree/1.0.0

primeng@7.0.1
    * License: MIT
    * Licence Path: https://github.com/primefaces/primeng/blob/7.0.1/LICENSE.md
    * Project: https://www.primefaces.org/primeng
    * Source:  https://github.com/primefaces/primeng/tree/7.0.1

rxjs@6.3.3
    * License: Apache-2.0
    * Project: https://rxjs-dev.firebaseapp.com/
    * Source:  https://github.com/ReactiveX/rxjs/tree/6.3.3

rxjs-compat:6.3.3
    * License: Apache-2.0
    * Project: https://rxjs-dev.firebaseapp.com/
    * Source:  https://github.com/ReactiveX/rxjs/tree/6.3.3/compat

tslib@1.9.0
    * License: Apache-2.0
    * Project: https://github.com/Microsoft/tslib
    * Source:  https://github.com/Microsoft/tslib/tree/1.9.0

zone.js@0.8.26
    * License: MIT
    * Licence Path: https://github.com/angular/zone.js/raw/master/LICENSE
    * Project: https://github.com/angular
    * Source:  https://github.com/angular/zone.js/releases/tag/v0.8.26

OMG Event Service Specification (1.2)

* License: LicenseRef - Object-Management-Group-License
* Project: https://www.omg.org/spec/EVNT/1.2/
* Source: https://www.omg.org/spec/EVNT/1.2/pdf

OMG Notification Service Specification (1.1)

* License: LicenseRef - Object-Management-Group-License
* Project: https://www.omg.org/spec/NOT/
* Source: https://www.omg.org/spec/NOT/1.1/PDF

ods530.idl
Date: Hoehenkirchen, 06/01/2016
"The ASAM Board of Directors releases the IDL files for use under the EPL to the Eclipse IWG openMDM.
This is valid for all versions of ASAM ODS 5.3.x.
This permission is valid under the conditions of Eclipse will not modify the file."

AvalonEvent.idl, CorbaFileServer.idl
Date: 08/15/2016
"Herewith, we release the generated Client-Source-Code generated from our CORBA IDLs, namely
* CORBANotification Service (generated from „AvalonEvent.idl”)
* CORBAFileServer (generated from „CorbaFileServer.idl“),
Under the Eclipse Public License (EPL). This agreement does not include the „AvalonEvent.idl“ and
„CorbaFileServer.idl“ itself, which remain protected property of HighQSoft. "

## Cryptography

Content may contain encryption software. The country in which you are currently
may have restrictions on the import, possession, and use, and/or re-export to
another country, of encryption software. BEFORE using any encryption software,
please check the country's laws, regulations and policies concerning the import,
possession, or use, and re-export of encryption software, to see if this is
permitted.
