# Notices for Eclipse EASE

This content is produced and maintained by the Eclipse EASE project.

* Project home: https://www.eclipse.org/ease/

## Trademarks

Eclipse EASE is a trademark of the Eclipse Foundation.

## Copyright

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

## 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:

* http://git.eclipse.org/c/ease/org.eclipse.ease.core.git
* http://git.eclipse.org/c/ease/org.eclipse.ease.modules.git
* http://git.eclipse.org/c/ease/org.eclipse.ease.scripts.git
* https://git.eclipse.org/cgit.cgi/www.eclipse.org/ease.git

