Apache CouchDB
Copyright 2009-2013 The Apache Software Foundation

This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).

This product also includes the following third-party components:

 * ac_check_icu.m4 (http://autoconf-archive.cryp.to/ac_check_icu.html)

   Copyright 2008, Akos Maroy <darkeye@tyrell.hu>

 * ac_check_curl.m4 (http://autoconf-archive.cryp.to/ac_check_curl.html)

   Copyright 2008, Akos Maroy <darkeye@tyrell.hu>

 * pkg.m4 (http://http://pkg-config.freedesktop.org/wiki/)

   Copyright 2004, Scott James Remnant <scott@netsplit.com>

 * jQuery (http://jquery.com/)

   Copyright 2011, John Resig
 
 * jQuery UI (http://jqueryui.com)

   Copyright 2011, Paul Bakaus

 * json2.js (http://www.json.org/)

   In the public domain

 * MochiWeb (http://code.google.com/p/mochiweb/)

   Copyright 2007, Mochi Media Coporation

 * ibrowse (http://github.com/cmullaparthi/ibrowse/tree/master)

   Copyright 2009, Chandrashekhar Mullaparthi

 * Erlang OAuth (http://github.com/tim/erlang-oauth/tree/master)

   Copyright 2009, Tim Fletcher <http://tfletcher.com/>

 * ETap (http://github.com/ngerakines/etap/)

   Copyright 2009, Nick Gerakines <nick@gerakines.net>

 * mimeparse.js (http://code.google.com/p/mimeparse/)

   Copyright 2009, Chris Anderson <jchris@apache.org>

 * base64.js

   Copyright 1999, Masanao Izumo <iz@onicos.co.jp>

 * jspec.js (http://visionmedia.github.com/jspec/)

  Copyright 2010 TJ Holowaychuk <tj@vision-media.ca>

 * yajl (http://lloyd.github.com/yajl/)

  Copyright 2010, Lloyd Hilaiel

 * snappy (http://code.google.com/p/snappy/)

  Copyright 2005 and onwards Google Inc.

 * snappy-erlang-nif (https://github.com/fdmanana/snappy-erlang-nif)

  Copyright 2011, Filipe David Manana <fdmanana@apache.org>

 * CoffeeScript (http://coffeescript.org/)

  Copyright 2011, Jeremy Ashkenas
