This is the Mendel #OSNAME# prepackaged version of the Mendel Base System
Miscellaneous files. These files were originally written by Ian Murdock
<imurdock@debian.org> and Bruce Perens <bruce@pixar.com> for Debian.

This package was first put together by Bruce Perens <Bruce@Pixar.com>,
from his own sources.

This package was further forked by the Coral team
<coral-support@google.com> for Mendel.

The GNU Public Licenses in /usr/share/common-licenses were taken from
ftp.gnu.org and are copyrighted by the Free Software Foundation, Inc.

The Artistic License in /usr/share/common-licenses is the one coming
from Perl and its SPDX name is "Artistic License 1.0 (Perl)".


Copyright (C) 1995-2011 Software in the Public Interest.

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 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 General Public License for more details.

On Debian #OSNAME# systems, the complete text of the GNU General
Public License can be found in `/usr/share/common-licenses/GPL'.


Copyright (C) 2018 Google, Inc.

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 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 General Public License for more details.

On Mendel #OSNAME# systems, the complete text of the GNU General
Public License can be found in `/usr/share/common-licenses/GPL'.
