/* FLAC - Free Lossless Audio Codec
 * Copyright (C) 2001-2009  Josh Coalson
 * Copyright (C) 2011-2022  Xiph.Org Foundation
 *
 * This file is part the FLAC project.  FLAC is comprised of several
 * components distributed under different licenses.  The codec libraries
 * are distributed under Xiph.Org's BSD-like license (see the file
 * COPYING.Xiph in this distribution).  All other programs, libraries, and
 * plugins are distributed under the GPL (see COPYING.GPL).  The documentation
 * is distributed under the Gnu FDL (see COPYING.FDL).  Each file in the
 * FLAC distribution contains at the top the terms under which it may be
 * distributed.
 *
 * Since this particular file is relevant to all components of FLAC,
 * it may be distributed under the Xiph.Org license, which is the least
 * restrictive of those mentioned above.  See the file COPYING.Xiph in this
 * distribution.
 */

This file lists major contributors to the FLAC project. This list is not
exhaustive. For an exhaustive list, run the command `git shortlog -s` on
the git repo or visit https://gitlab.xiph.org/xiph/flac/-/graphs/master

For a complete list of contributions, run the command `git log` on the
git repo, visit https://github.com/xiph/flac/commits or visit
https://gitlab.xiph.org/xiph/flac/commits

Original author: Josh Coalson <jcoalson@users.sourceforge.net>
Maintainer 2012-2020: Erik de Castro Lopo <erikd@mega-nerd.com>

Website : https://www.xiph.org/flac/

Other major contributors and their contributions:

"lvqcl" <lvqcl@users.sourceforge.net>
* Visual Studio build system.
* Optimisations in the encoder and decoder.

"Janne Hyvärinen" <cse@sci.fi>
* Visual Studio build system.
* Unicode handling on Windows.

"Andrey Astafiev" <andrei@tvcell.ru>
* Russian translation of the HTML documentation

"Miroslav Lichvar" <lichvarm@phoenix.inf.upol.cz>
* IA-32 assembly versions of several libFLAC routines

"Brady Patterson" <bpat@users.sourceforge.net>
* AIFF file support, PPC assembly versions of libFLAC routines

"Daisuke Shimamura" <Daisuke_Shimamura@nifty.com>
* i18n support in the XMMS plugin

"X-Fixer" <x-fixer@narod.ru>
* Configuration system, tag editing, and file info in the Winamp2 plugin

"Matt Zimmerman" <mdz@debian.org>
* Libtool/autoconf/automake make system, flac man page

"Martijn van Beurden" <mvanb1@gmail.com>
* Compression improvements
* Fuzzer improvements and fixes for fuzz findings
* Implementation of 32 bps encoder and decoder
