                                  _   _ ____  _     
                              ___| | | |  _ \| |    
                             / __| | | | |_) | |    
                            | (__| |_| |  _ <| |___ 
                             \___|\___/|_| \_\_____|

README

  Curl is a command line tool for transfering data specified with URL
  syntax. Find out how to use Curl by reading the curl.1 man page or the
  README.curl document. Find out how to install Curl by reading the INSTALL
  document.

  libcurl is a link-library that Curl is using to do its job. It is readily
  available to be used by your software. Read the README.libcurl document to
  find out how!

  You find answers to the most frequent questions we get in the FAQ document.

  Always try the Curl web site for the latest news:

        http://curl.haxx.nu

  The official download mirror sites are:

        Sweden --  ftp://ftp.sunet.se/pub/www/utilities/curl/
        Germany -- ftp://ftp.fu-berlin.de/pub/unix/network/curl/
        China --   http://www.pshowing.com/curl/

  To download the very latest source off the CVS server do this:

        cvs -d :pserver:anonymous@cvs.curl.sourceforge.net:/cvsroot/curl login

        (just press enter when asked for password)

        cvs -d :pserver:anonymous@cvs.curl.sourceforge.net:/cvsroot/curl co .

        (now, you'll get all the latest sources downloaded into your current
        directory. Note that this does not create a directory named curl or
        anything)

        cvs -d :pserver:anonymous@cvs.curl.sourceforge.net:/cvsroot/curl logout
        
        (you're off the hook!)
