This package was debianized by Aurelien Jarno <aurel32@debian.org>.

It was downloaded from http://www.lm-sensors.org/

Copyright

  Copyright (C) 1995-1997  Simon G. Vogl
  Copyright (C) 1998-2004 Frodo Looijaard <frodol@dds.nl>
  Copyright (C) 1998, 1999 Philip Edelbrock <phil@netroedge.com>
  Copyright (C) 1998-2004  Mark D. Studebaker <mdsxyz123@yahoo.com>
  Copyright (C) 2002  James Simmons <jsimmons@users.sf.net>
  Copyright (C) 2002-2007  Jean Delvare <khali@linux-fr.org>
  Copyright (c) 2003  Stefano Barbato
  Copyright (C) 2005-2007 Mark M. Hoffman <mhoffman@lightlink.com>

License:

  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.

  You should have received a copy of the GNU General Public License with
  the Debian GNU/Linux distribution in file /usr/share/common-licenses/GPL;
  if not, write to the Free Software Foundation, Inc., 51 Franklin St, 
  Fifth Floor, Boston, MA  02110-1301 USA

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

