 ----
 Privacy Policy
 -----
 Olivier Lamy
 -----
 2012-06-18
 -----

~~ Licensed to the Apache Software Foundation (ASF) under one
~~ or more contributor license agreements.  See the NOTICE file
~~ distributed with this work for additional information
~~ regarding copyright ownership.  The ASF licenses this file
~~ to you under the Apache License, Version 2.0 (the
~~ "License"); you may not use this file except in compliance
~~ with the License.  You may obtain a copy of the License at
~~
~~   http://www.apache.org/licenses/LICENSE-2.0
~~
~~ Unless required by applicable law or agreed to in writing,
~~ software distributed under the License is distributed on an
~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~~ KIND, either express or implied.  See the License for the
~~ specific language governing permissions and limitations
~~ under the License.

~~ NOTE: For help with the syntax of this file, see:
~~ http://maven.apache.org/doxia/references/apt-format.html

Privacy Policy

  Information about your use of this website is collected using server access logs and a tracking cookie. The
  collected information consists of the following:

  [[1]] The IP address from which you access the website;

  [[2]] The type of browser and operating system you use to access our site;

  [[3]] The date and time you access our site;

  [[4]] The pages you visit; and

  [[5]] The addresses of pages from where you followed a link to our site.

  []

  Part of this information is gathered using a tracking cookie set by the
  {{{http://www.google.com/analytics/}Google Analytics}} service and handled by Google as described in their
  {{{http://www.google.com/privacy.html}privacy policy}}. See your browser documentation for instructions on how to
  disable the cookie if you prefer not to share this data with Google.

  We use the gathered information to help us make our site more useful to visitors and to better understand how and
  when our site is used. We do not track or collect personally identifiable information or associate gathered data
  with any personally identifying information from other sources.

  By using this website, you consent to the collection of this data in the manner and for the purpose described above.