   ====================================================================
   ==  DO NOT PANIC!  This is a draft for discussion purposes only.  ==
   ==  It has not yet been approved. It does not yet apply to any    ==
   ==  software distributed by the Apache Software Foundation.       ==
   ==                                                                ==
   ==  This would be attached to all of the ASF discussion areas,    ==
   ==  including mailing list acks, rcsinfo, and bugzilla.           ==
   ====================================================================

                 Apache Community Contribution Agreement

   This forum has been created for public communication about projects
   of The Apache Software Foundation (the "Foundation"), a Delaware
   nonprofit corporation classified as a public charity under 501(c)(3).
   All communication intentionally submitted to the Foundation is to be
   licensed as a Contribution unless otherwise noted in the communication.
   By participating on this forum, you agree to only submit a Contribution
   when you are the copyright owner of that Contribution or when you
   have obtained the owner's permission to make said Contribution on
   their behalf.  It is your responsibility to notify the Foundation of
   any conditions that apply to the communication that might make it
   ineligible for Contribution.

   Your Contributions are licensed to the Foundation in accordance with
   the contributor license agreement(s) (CLA) signed by you and/or your
   employer.  If no such CLA is on file with the Foundation, then your
   Contributions are licensed under the Apache License, Version 2.0.
   You may obtain a copy of these licenses from

      http://www.apache.org/licenses/icla.txt
      http://www.apache.org/licenses/cla-corporate.txt
      http://www.apache.org/licenses/LICENSE-2.0

